S5PV210串行通信编程实战2

来源:互联网 发布:ad高亮pcb某一网络 编辑:程序博客网 时间:2024/05/30 04:50

《朱老师物联网大讲堂》学习笔记

学习地址:www.zhulaoshi.org


这节课暂时没写笔记,就把朱老师的代码贴这里吧。

#define GPA0CON0xE0200000#define UCON0 0xE2900004#define ULCON0 0xE2900000#define UMCON0 0xE290000C#define UFCON0 0xE2900008#define UBRDIV0 0xE2900028#define UDIVSLOT00xE290002C#define UTRSTAT00xE2900010#define UTXH00xE2900020#define URXH00xE2900024#define rGPA0CON(*(volatile unsigned int *)GPA0CON)#define rUCON0(*(volatile unsigned int *)UCON0)#define rULCON0(*(volatile unsigned int *)ULCON0)#define rUMCON0(*(volatile unsigned int *)UMCON0)#define rUFCON0(*(volatile unsigned int *)UFCON0)#define rUBRDIV0(*(volatile unsigned int *)UBRDIV0)#define rUDIVSLOT0(*(volatile unsigned int *)UDIVSLOT0)#define rUTRSTAT0(*(volatile unsigned int *)UTRSTAT0)#define rUTXH0(*(volatile unsigned int *)UTXH0)#define rURXH0(*(volatile unsigned int *)URXH0)// 串口初始化程序void uart_init(void){// 初始化Tx Rx对应的GPIO引脚rGPA0CON &= ~(0xff<<0);// 把寄存器的bit0~7全部清零rGPA0CON |= 0x00000022;// 0b0010, Rx Tx// 几个关键寄存器的设置rULCON0 = 0x3;rUCON0 = 0x5;rUMCON0 = 0;rUFCON0 = 0;// 波特率设置DIV_VAL = (PCLK / (bps x 16))-1// PCLK_PSYS用66MHz算余数0.8//rUBRDIV0 = 34;//rUDIVSLOT0 = 0xdfdd;// PCLK_PSYS用66.7MHz算余数0.18// DIV_VAL = (66700000/(115200*16)-1) = 35.18rUBRDIV0 = 35;// (rUDIVSLOT中的1的个数)/16=上一步计算的余数=0.18// (rUDIVSLOT中的1的个数 = 16*0.18= 2.88 = 3rUDIVSLOT0 = 0x0888;// 3个1,查官方推荐表得到这个数字}// 串口发送程序,发送一个字节void uart_putc(char c){                  // 串口发送一个字符,其实就是把一个字节丢到发送缓冲区中去// 因为串口控制器发送1个字节的速度远远低于CPU的速度,所以CPU发送1个字节前必须// 确认串口控制器当前缓冲区是空的(意思就是串口已经发完了上一个字节)// 如果缓冲区非空则位为0,此时应该循环,直到位为1while (!(rUTRSTAT0 & (1<<1)));rUTXH0 = c;}// 串口接收程序,轮询方式,接收一个字节char uart_getc(void){while (!(rUTRSTAT0 & (1<<0)));return (rURXH0 & 0x0f);}


数据手册中的资料,

The receiver detects(检测)overrun(溢出) error, parity error, frame error and break condition, each of which sets an error flag.


Frame error indicates that the received data does not have avalid(有效的) stop bit. 

0 0
原创粉丝点击