CC2430有两个串行通信接口USART0和USART1,本实验采用第一个接口。要实现的功能是在超级终端发送数据到开发板,并且在lcd上显示。
那么,此实验中UART中主要用的是接受功能。当U0CSR.RE=1时,在UART上数据接收就开始了。然后UART会在输入引脚中寻找有效起始位,并且设置U0CSR.ACTIVE位为1,表明UART处于忙状态。当检测到有效起始位时,收到的字节就传入接收寄存器U0BUF,同时U0CSR.RX_BYTE位置1,表明接收数据完成。之后,会产生接收完成中断,通过寄存器U0BUF提供数据。当U0BUF被读出时,U0CSR.RX_BYTE由硬件清零。
开始时,运行程序,发现键盘上的任何输入,都没有产生任何反应,之后发现程序一直停在uartGetkey()函数中的while (!URX0IF )处,再观察寄存器,发现URX0IF一直为0,也就是说,在数据接收完成后,并没有产生一个中断,于是程序停在这里。为什么呢?后来把芯片手册看了一下,发现这个中断默认是关闭的,若想要用,必须打开。它的使能位在IEN2寄存器2位,0关闭,1使能。如图;
于是在原程序上还加一条语句:IEN2=0x04;即可。
主函数如下:
void main(void){
char c = 0;
UINT8 i;
char s[]="UART <--> LCD";<