|
这个是我在准备电赛的时候小师傅布置的任务,这个模块主要是要搞懂UART通信模块的原理,然后对蓝牙通信的原理有所了解即可。
一、 UART串口通信
固定代码模式:
{
配置UART寄存器
}
#pragma vector = USCI_A1_VECTOR
__interrupt void USCI_ISR()
{
内部程序;
}
1、配置UCAxCTL0 //USCI_Ax Control Register 0
UCPEN 启用奇偶校验功能寄存器(一般情况下不启用奇偶校验)
0 关闭奇偶校验;
1 打开奇偶校验,将生成奇偶校验位(UCAxTXD)
注意:(UCAxRXD). In address-bit multiprocessor mode, the address bit is included in the parity calculation.
UCPAR 对奇偶校验项的选择。当禁用奇偶校验时,不使用UCPAR。
0b = Odd parity
1b = Even parity
UCMSB MSB首先选择。(控制 接收和发射移位寄存器 的方向,一般选择0,因为默认值/模式为0(LSB first),故不用设置
0b = LSB first
1b = MSB first
UC7BIT 字符长度。选择7位或8位字符长度,即串口发送的数据长度,默认值/模式0(8位),故不用设置。
0 8位 1 7位
UCSPB 选择停止位的个数。默认值/模式为0(1位停止位),故不用设置。
0 一位停止位 1 两位停止位
UCMODEx USCI模式选择。即选择USCI的工作模式,UCMODEx位在UCSYNC=0时选择异步模式。因为本模块是学习UART,所以USCI要设置为UART mode,同时UCMODEx默认值/模块为00b,所以在使用UART模块时不用设置此寄存器。
00b = UART mode
01b = Idle-line multiprocessor mode
10b = Address-bit multiprocessor mode
11b = UART mode with automatic baud-rate detection
UCSYNC 同步或异步模式启用模块。默认值/模块为0(启用异步模式),故在使用异步UART时不用设置。
0 启用异步模式 1 启用同步模式
2、配置UCAxCTL1 寄存器 //USCI_Ax Control Register 1
在使用UART时首先需复位UCAxCTL1、选择时钟源,再配置其他寄存器,最后取消对UCAxCTL1的复位。
例如: UCA1CTL1 |= UCSWRST; //复位USCI_AX
UCA1CTL1 |= UCSSEL_1; //选择时钟源SMCLK ACLK
UCA1BR0 = 0x03; // 32768Hz 9600 波特率为9600
UCA1BR1 = 0x00; // 32768Hz 9600
UCA1MCTL |= UCBRS_3 + UCBRF_0;
UCA1CTL1 &= ~UCSWRST; //清除复位
UCSSELx 选择USCI时钟源。这些位选择BRCLK源时钟。
00b = UCAxCLK (external USCI clock)
01b = ACLK
10b = SMCLK
11b = SMCLK
UXRXEIE
UCBRKIE
UCDORM
UCTXADDR
UCTXBRK
UCSWRST
3、配置UCAxBR0 Low byte of clock prescaler setting of the baud-rate generator. The 16-bit value
of (UCAxBR0 + UCAxBR1 × 256) forms the prescaler value UCBRx.
波特率发生器的时钟预压器设置的低字节。16位值(UCAxBR0+UCAxBR1×256)形成预压算器值UCBRx。
查找数据手册,例:UCA1BR0 = 0x03;
4、配置UCAxBR1 High byte of clock prescaler setting of the baud-rate generator. The 16-bit value
of (UCAxBR0 + UCAxBR1 × 256) forms the prescaler value UCBRx.
波特率发生器的时钟压力机设置的高字节。16位值(UCAxBR0+UCAxBR1×256)形成预压算器值UCBRx。
查找数据手册, 例:UCA1BR1 = 0x00;
5、配置UCAxMCTL 例:UCA1MCTL |= UCBRS_3 + UCBRF_0;
UCBRFx 第一个调制阶段的选择。这些比特确定了当UCOS16=1时的BITCLK16的调制模式。被UCOS16=0忽略
UCBRSx 第二个调制阶段的选择。这些位决定了BITCLK的调制模式。表36-2给出了调制模式。
UCOS16 Oversampling mode enabled
0b = Disabled
1b = Enabled
6、UCAxSTAT((●'◡'●)这个没用到我就没有写笔记)
7、UCAxRXBUF 数据接收缓冲区
8、UCAxTXBUF 数据发送缓冲区
UCAxIE
UCTXIE 关闭启用传输中断,默认值/模式为0(关闭传输中断), 1 打开传输中断
UCRXIE 关闭启用接收中断,默认值/模式为0(关闭接收中断), 1 打开接收中断
二、代码
//蓝牙模块
void set_uart_registers()
{
P4SEL |= BIT4+BIT5;
UCA1CTL1 |= UCSWRST;
UCA1CTL1 |= UCSSEL_1; //ACLK 副时钟
UCA1BR0 = 0x03;
UCA1BR1 = 0x00; //32768HZ 9600baud
UCA1MCTL |= UCBRS_3 + UCBRF_0;
UCA1CTL1 &=~ UCSWRST;
UCA1IE |= UCRXIE; //open interrupt of
_EINT();
}
#pragma vector = USCI_A1_VECTOR
__interrupt void USCI_ISR()
{
//UCA1TXBUF = UCA1RXBUF;
switch(__even_in_range(UCA1IV,4))
{
case 0:break; // Vector 0 - No interrupt
case 2: // Vector 2 - RXIFG
BUF = UCA1RXBUF;
UCA1TXBUF = UCA1RXBUF;
if(BUF == 'A')
{
P6OUT |= BIT0;
P6OUT &=~ BIT1;
P6OUT |= BIT2;
P6OUT &=~ BIT3;
}
if(BUF == 'B')
{
P6OUT &=~ BIT0;
P6OUT |= BIT1;
P6OUT &=~ BIT2;
P6OUT |= BIT3;
}
if(BUF == 'C')
{
P6OUT &=~ BIT0;
P6OUT |= BIT1;
P6OUT |= BIT2;
P6OUT &=~ BIT3;
}
if(BUF == 'D')
{
P6OUT |= BIT0;
P6OUT &=~ BIT1;
P6OUT &=~ BIT2;
P6OUT |= BIT3;
}
if(BUF == 'E')
{
P6OUT &=~ BIT0;
P6OUT &=~ BIT1;
P6OUT &=~ BIT2;
P6OUT &=~ BIT3;
}
if(BUF =='F')
{
P1OUT ^= BIT0;
}
if(BUF == '1')
{
P4OUT ^= BIT7;
}
break;
case 4:break;
default: break;
}
} |
-
-
TI.rar
556.61 KB, 下载次数: 120, 下载积分: 黑币 -5
原代码
评分
-
查看全部评分
|