|
這個是我在準備電賽的時候小師傅布置的任務,這個模塊主要是要搞懂UART通信模塊的原理,然后對藍牙通信的原理有所了解即可。
一、 UART串口通信
固定代碼模式:
{
配置UART寄存器
}
#pragma vector = USCI_A1_VECTOR
__interrupt void USCI_ISR()
{
內(nèi)部程序;
}
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首先選擇。(控制 接收和發(fā)射移位寄存器 的方向,一般選擇0,因為默認值/模式為0(LSB first),故不用設置
0b = LSB first
1b = MSB first
UC7BIT 字符長度。選擇7位或8位字符長度,即串口發(fā)送的數(shù)據(jù)長度,默認值/模式0(8位),故不用設置。
0 8位 1 7位
UCSPB 選擇停止位的個數(shù)。默認值/模式為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.
波特率發(fā)生器的時鐘預壓器設置的低字節(jié)。16位值(UCAxBR0+UCAxBR1×256)形成預壓算器值UCBRx。
查找數(shù)據(jù)手冊,例: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.
波特率發(fā)生器的時鐘壓力機設置的高字節(jié)。16位值(UCAxBR0+UCAxBR1×256)形成預壓算器值UCBRx。
查找數(shù)據(jù)手冊, 例:UCA1BR1 = 0x00;
5、配置UCAxMCTL 例:UCA1MCTL |= UCBRS_3 + UCBRF_0;
UCBRFx 第一個調(diào)制階段的選擇。這些比特確定了當UCOS16=1時的BITCLK16的調(diào)制模式。被UCOS16=0忽略
UCBRSx 第二個調(diào)制階段的選擇。這些位決定了BITCLK的調(diào)制模式。表36-2給出了調(diào)制模式。
UCOS16 Oversampling mode enabled
0b = Disabled
1b = Enabled
6、UCAxSTAT((●'◡'●)這個沒用到我就沒有寫筆記)
7、UCAxRXBUF 數(shù)據(jù)接收緩沖區(qū)
8、UCAxTXBUF 數(shù)據(jù)發(fā)送緩沖區(qū)
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
2021-7-23 21:27 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
556.61 KB, 下載次數(shù): 120, 下載積分: 黑幣 -5
原代碼
評分
-
查看全部評分
|