不会用CC1110的校验的朋友可以看看下面的文字。
CC1110手册里对串口中字节格式的描述是:如果寄存器UxUCR(x=0,1 下同)中的BIT和PARITY两位都置高的话,打开校验计算和侦测功能。计算出校验的结果被当作被9位传输,在接收的时候,校验位被计算出并用来和第九位作比较。如果校验出错,则UxCSR.ERR位置高。这一标志位在读过UxCSR寄存器之后硬件清零。(之后的部分描述停止位)
可以发现这段描述里并没有说明当字节校验出错时会不会进中断,UxDBUF中能不能读到值,没有说表明它跟校验正常和没有校验时会发生同样的事件,也就是说中断会进,UxDBUF里会读到值。但是用户要小心,这里需要自己去判断UxUCR.ERR才能知道数据是否正确。如果不对此判断会出现什么情况呢?
将两个CC1110模块的串口(1RXD-2TXD,1TXD-2RXD),地(1GND-2GND)三条线相连,初始化两个串口,模块1(M1)设置为奇校验,模块2(M2)设为偶校验:
//m1 uart0 init
U0CSR |= 0X38; // 开寄校验,其他寄存器配置省略
//m2 uart0 init
U0CSR |= 0X18; //开偶校验 ,
然后M1向M2发送数据"1shang hai sunray string."在M2的串口中断里不判断ERR位连续接收25BYTE数据,结果发现数据完全正确,但是如果对ERR进行判断,则可以发现每接收到一字节,该位为1 ,因此可以知道校验发现了错误。在两边都配置为两样的校验方式(奇/偶)时,在发现这个错误时可以考虑将这一字节丢弃。
2010年7月27日
文章评论(0条评论)
登录后参与讨论