c - CC430 UART 读取问题 - 接收中断标志始终为“0”
问题描述
我正在尝试建立 UART 通信。我可以将数据从 CC430F6137 发送到其他 MCU。但是我无法处理接收操作。我确定其他 MCU 通过 UART Tx 引脚发送数据,但我无法从 CC430 Rx 引脚获取这些数据。
我的代码是:
#include <stdio.h>
#include <msp430.h>
#include "cc430x613x.h"
char buffer_0[5] ;
char terminal_read();
int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
UART_open();
UCA0IE |= UCRXIE ;
while(1)
{
terminal_read();
// __delay_cycles(1e5);
}
return 0;
}
char terminal_read()
{
char c ;
while (!(UCA0IFG & UCRXIFG));
c = UCA0RXBUF ;
printf("%c" , &c);
return UCA0RXBUF;
}
void terminal_write(char *info)
{
unsigned int i;
unsigned int len = strlen(info) ;
for(i=0;i<len;i++)
{
UCA0TXBUF=info[i];
__delay_cycles(10000);
}
}
void UART_open()
{
P1SEL |= BIT5 + BIT6;
//UART Settings
UCA0CTL1 |= UCSWRST;
UCA0CTL1 |= UCSSEL0 ; // ACLK
UCA0BR0=3; //UCA0BR0 = 3 ; //32Khz / 9600 –>> 3
UCA0BR1=0; //UCA0BR1=0; // BAUD 9600; ( UCABR1 * 256 ) + UCABR0 = UCABRx see "slau259e.pdf"
UCA0MCTL=UCBRS0 + UCBRS1 ; // see "slau259e.pdf" page 602 //
//UCA0MCTL =| BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0 |
// |------- UCBRFx --------------|----UCBRSx----------|UCOS16|
// for 9600 baudrate at 32kHz UCBRFx = 0 , UCBRSx = 3 , UCOS16 = 0
// | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
// 0b00000110 = 0x06 = 6
UCA0CTL1 &=~ UCSWRST;//
// UCA0CTL1 |= UCDORM;
}
void UART_close()
{
P1SEL &= ~(BIT5 + BIT6);
P1DIR |= BIT5 + BIT6;
P1OUT &= ~(BIT5 + BIT6);
UCA0CTL1 |= UCSWRST;
UCA0CTL1 &=~ UCDORM;
}
char* String_int(int data)
{
char* ret_data;
ret_data = ltoa(data , buffer_0 , 10 );
return ret_data;
}
我的代码有什么问题?我总是将 UCRXIFG 读为“0”。所以'terminal_read'函数总是卡在这条线上。
解决方案
由于您在terminal_read()函数中轮询中断标志,因此您不需要使用UCA0IE |= UCRXIE;启用中断。因为这将导致 CPU 转到您的代码未提供的中断向量。相反,删除UCA0IE |= UCRXIE; 并继续投票。
此外,仅当您连接了 JTAG 调试器时, printf()才会转到调试窗口的终端,否则可能会卡住。我同意彼得的观点,如果您没有附加调试器,它可能会卡在这里。尝试将其移除并更换为 LED 闪光灯,这样您就知道terminal_read()没有卡住。
推荐阅读
- python - Python tkinter 防止颜色框在它应该被调用之前被调用
- wordpress - Woocommerce 角色:shop_manager > create_users - 角色下拉列表
- machine-learning - 在机器学习中使用 Scikit 对邮政编码进行特征散列
- django - 从另一个容器构建弹性搜索索引
- c# - 长时间调用我的 DownloadFile 方法抛出 WebException
- r - 如何使用 while 循环根据现有变量创建虚拟变量?
- javascript - TypeError:无法读取未定义的多个表单组的属性“setValue”
- entity-framework-core - 当 DATETIME 包含毫秒时,DbContext Remove 生成 DbUpdateConcurrencyException
- python - 如何修复 Pyinstaller 错误:无法执行脚本
- python - bounds IndexError:元组索引超出范围