RX62N用のRS232C通信プログラムです。割り込みを利用しません。
/***********************************************************************/ /* */ /* FILE :RS232Ctest.c */ /* DATE :Thu, Jul 12, 2012 */ /* DESCRIPTION :Main Program */ /* CPU TYPE :RX62N */ /* */ /* This file is generated by KPIT GNU Project Generator. */ /* */ /***********************************************************************/ #include "iodefine.h" /****************************************************************************** * Function Name: InitSCI * Description : Initializes SCI channel for asychronous operation * Arguments : none * Return Value : none ******************************************************************************/ void InitSCI(void) { /* Enable SCI0 */ MSTP(SCI0) = 0; /* RxD0 is input */ PORT2.DDR.BIT.B1 = 0; /* Enable Input Buffer on RxD1 */ PORT2.ICR.BIT.B1 = 1; /* TxD0 is output */ PORT2.DDR.BIT.B0 = 1; /* Disable Tx/Rx */ SCI0.SCR.BYTE = 0; /* Set mode register -Asynchronous Mode -8 bits -no parity -1 stop bit -PCLK clock (n = 0) */ SCI0.SMR.BYTE = 0x00; //SCI0.SEMR.BIT.ABCS = 1; /* Enable RXI and TXI interrupts, even though we are not using the interrupts, we will be checking the IR bits as flags */ //SCI0.SCR.BIT.RIE = 1; //SCI0.SCR.BIT.TIE = 1; /* Clear IR bits for TIE and RIE */ //IR(SCI0, RXI0) = 0; //IR(SCI0, TXI0) = 0; /* Disable RXI and TXI interrupts in ICU because we are polling */ //IEN(SCI0, RXI0) = 0; //IEN(SCI0, TXI0) = 0; /* Set baud rate to 115200 N = (PCLK Frequency) / (64 * 2^(2*n - 1) * Bit Rate) - 1 N = (48,000,000) / (64 * 2^(2*0 - 1) * 115200) - 1 N = 12 38400bps N=38 */ SCI0.BRR = 38; /* Enable Tx/Rx */ SCI0.SCR.BYTE |= 0x30; } /****************************************************************************** * Function Name: charput * Description : Outputs a character on a serial port * Arguments : character to output * Return Value : none ******************************************************************************/ void charput(unsigned char output_char) { /* Wait for transmit buffer to be empty */ //while(IR(SCI1, TXI1) == 0); while(SCI0.SSR.BIT.TDRE == 0); /* Clear TXI IR bit */ //IR(SCI0, TXI0) = 0; /* Write the character out */ SCI0.TDR = output_char; } /****************************************************************************** * Function Name: charget * Description : Gets a character on a serial port * Arguments : character to output * Return Value : none ******************************************************************************/ unsigned char charget(void) { unsigned char temp; /* エラーチェック */ if (SCI0.SSR.BYTE & 0x38) { SCI0.SSR.BYTE &= ~0x38; //エラーフラグクリア temp = SCI0.RDR; return 0; } /* Read any 'junk' out of receive buffer */ //temp = SCI0.RDR; /* Clear flag to receive next byte */ //IR(SCI0, RXI0) = 0; /* Wait for next receive data */ //while(IR(SCI1, RXI1) == 0); while(SCI0.SSR.BIT.RDRF == 0); /* Read data */ temp = SCI0.RDR; /* // Echo data back out if(temp == 0x0d) { // Enter was pressed, output newline charput('\r'); charput('\n'); } else { // Echo back character charput(temp); } */ // Receive data acquired, send back up return temp; } /* 文字列の出力 */ void printString(char *s) { while( *s != 0 ) { charput(*s); s++; } } int main(void) { // TODO: add application code here SYSTEM.SCKCR.BIT.ICK = 0x00; //システムクロック x16 96MHz SYSTEM.SCKCR.BIT.PCK = 0x01; //周辺クロック x4 48MHz SYSTEM.SCKCR.BIT.BCK = 0x01; //外部バスクロック x4 48MHz InitSCI(); printString("Start\r\n"); while (1) { charput(charget()); } return 0; }
※コメント投稿者のブログIDはブログ作成者のみに通知されます