8th 串口通信
简单来说,依然只是设置好几个寄存器即可。
按步骤分别是:
1. 设置引脚相关寄存器 GPxCON、GPxUP
2. 设置波特率寄存器 UBRDIVx
3. 设置传输格式 ULCONx
4. 设置接受发送方式以及时钟源 UCONx
5. 设置流控和FIFO UFCONx UMCONx
相关配置代码如下:
1 void uart0_init(void) 2 { 3 GPHCON |= 0xa0; //设置TX,RX引脚 4 GPHUP = 0x0c; //设置为内部上拉方式 5 6 UBRDIV0 = UART_BRD; //设置波特率 7 8 ULCON0 = 0x03; //设置传输格式 8位 无校验 0个停止位 9 10 UCON0 = 0x05; //选择查询方式,以及时钟源选择为PCLK 11 UFCON0 = 0x00; // 不使用FIFO 12 UMCON0 = 0x00; // 不使用流控 13 14 15 }
关于接收和发送的查询方式,是通过UTRSTATx寄存器的
UTRSTATx具体如下:
主要是第0位与第2位。第0位是当接收缓存区接收到数据时,置1。第2位是当发送缓存区没有数据并且最后一个数据也发送出去时,置1.
代码如下:
1 void putc(unsigned char c) 2 { 3 /* 等待,直到发送缓冲区中的数据已经全部发送出去 */ 4 while (!(UTRSTAT0 & TXD0READY)); 5 6 /* 向UTXH0寄存器中写入数据,UART即自动将它发送出去 */ 7 UTXH0 = c; 8 } 9 10 /* 11 * 接收字符 12 */ 13 unsigned char getc(void) 14 { 15 /* 等待,直到接收缓冲区中的有数据 */ 16 while (!(UTRSTAT0 & RXD0READY)); 17 18 /* 直接读取URXH0寄存器,即可获得接收到的数据 */ 19 return URXH0; 20 }
其中 RXD0READY = 1 ,TXD0READY= 0b100