Launch pad TimerA实现 uart串口
前段时间看到了TI公司的培训launchpad的视频,感觉受益匪浅。也学到Value line系列的微处理器的强大功能。收到launch pad后,不知道从什么地方开始入手了?感觉应该先调试一下串口不错,看到过用别人用定时器A来实现了串口的实现,所以就学习了一下串口的协议。
1、 首先实现波特率的实现。我们采用1M的时钟来实现波特率的发送,也就是定时器需要每1000000/9600 来中断一次才能满足波特率为9600的传输速率。
#define UART_TBIT_DIV_2 (1000000 / (9600 * 2))
#define UART_TBIT (1000000 / 9600)
2、 数据的发送是通过每UART_TBIT个时钟周期,来发送一次数据。我设置的数据位为一个起始信号+八位数据+一个终止信号。
while (TACCTL0 & CCIE);
TACCR0 = TAR;
TACCR0 += UART_TBIT;
txData = byte;
txData |= 0x100;
txData <<= 1; t
TACCTL0 = OUTMOD0 + CCIE;
3、 数据的发送过程是在定时器中断中进行的。
if ( BitCnt == 0)
CCTL0 &= ~ CCIE; 如果发送完成,则关闭定时器
else
{
CCTL0 |= OUTMOD2;
if (RXTXData & 0x01)
CCTL0 &= ~ OUTMOD2; 如果数据为高 ,则是端口设置1
RXTXData = RXTXData >> 1;
BitCnt --; 数据位减1.
}
其他的功能设置为下:
DCOCTL = 0x00; 启动 DCOCLK
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
BCSCTL2 &= ~DIVS_3; 设置SMclk为1Mhz
P1SEL |= UART_TXD + UART_RXD; /
P1DIR |= UART_TXD; 使用的是P1.5管脚
P1DIR &= ~UART_RXD;
TACCTL0 = OUT;
TACCTL1 = SCS + CM1 + CAP + CCIE;
TACTL |= TACLR;
TACTL = TASSEL_2 + MC_2;
timerA_UART_mode = 1;
为了测试能够正确使用launchpad的串口,我编写了下面的上位机程序。我使用launchpad发送 123 到上位机。哈哈,数据是正确的。