CC2430基础——串口代码分析

void initUART(void)
{
   IO_PER_LOC_UART0_AT_PORT0_PIN2345();
   SET_MAIN_CLOCK_SOURCE(CRYSTAL);
   UART_SETUP(0, 9600, HIGH_STOP);
   U0CSR = 0xC5;
}
其中
#define IO_PER_LOC_UART0_AT_PORT0_PIN2345() do { PERCFG = (PERCFG&~0x01)|0x00; } while (0)  是用来设置寄存器PERCFG的
SET_MAIN_CLOCK_SOURCE(CRYSTAL); 用来设置晶振的
UART_SETUP(0, 9600, HIGH_STOP); 波特率设置函数(将波特率设置成9600)
U0CSR = 0xC5 设置U0CSR(USART0控制和状态),设置成UART模式,接收器使能,收到的字节就绪还有就是在发送或者接收中,USART忙。
 
串口接收程序运用中断来完成的,所以首先要设置ISR(中断服务程序),其源代码是这样的:
void SET_UART0_ISR(void)
{
   U0CSR |= 0xd0;
    U0UCR |= 0x02;
}
 
串口的初始化函数,其具体的源代码是这样的:
void UARTxISRopen(void)
{
  U0CSR |= 0x40;
  IEN0 |= 0X04;//开串口接收中断 'URX0IE = 1',
}
 
调用的中断函数,其源代码是这样的:

#pragma vector = URX0_VECTOR
 __interrupt void URX0_ISR(void)

{

   uarttemp = U0DBUF;

   U0DBUF = uarttemp;
}

其主要的思想就是想把收/发寄存器的值读出赋到一个变量上,再将这个变量的值赋回给BUFFER,这样就能实现串口的回显功能。也就是说串口里的值始终在U0DBUF里,想要读串口的值就读这个变量的好了。

main( void )

{
 uchar temp = 0;
 SLEEP &= ~0x04;
 while(!(SLEEP & 0x40));  
 CLKCON &= ~0x47;   
 SLEEP |= 0x04;
 initUART();
 UARTxISRopen();
 ENABLE_ALL_INTERRUPT();
 while(1);


}

posted @ 2012-07-10 11:52  平湖之下  阅读(367)  评论(0编辑  收藏  举报