大家好、团队、
我们正在处理 我提到的地址位多处理器格式(slau445i)部分 22.3.2.我有一个问题,就是它不能按我的预期工作。
我通过设置 MARK 和 NONE、使用通过终端发送的实时数据测试了代码。 当我从实数项设置 NONE 发送字节时、它会进入 ISR (实际上中断不应上升)、也会进入 IF 条件、同样的情况是通过设置标记(第9位、这里应该上升中断)发生。 为什么会发生这样的情况、我的配置出错了吗? 下面是我正在尝试的代码。 有人能帮我解决"地址位多处理器格式 "问题吗? 我非常感谢您通过示例完成此操作。
int main (void)
{
静态常量 uint8_t True = 1;
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
clock_setup();
Initialize_GPIO();
data_transfer_switch();
Initialize_UART();
while (真)
{
if ((in_ptr)!=(out_ptr))
{
UCA0TXBUF = array[OUT_PTR];
OUT_PTR++;
OUT_PTR &= 0x0F;
}
}
void initial_uart()
{
UCA0IFG &=~UCTXIFG;//禁用增强型通用串行通信接口(eUSCI)
//进行 UART 配置
//配置 UART 引脚
P1SEL0 |= BIT6 | BIT7; //将2个 UART 引脚设置为第二个功能
//配置 UART
UCA0CTLW0 |= UCSWRST;//将增强型通用串行通信接口置于复位状态
UCA0CTLW0 |= UCTXADDR_1;
UCA0CTLW0 |= UCDORM_1;
UCA0CTLW0 |= UCSSEL_SMCLK; //时钟源选择为 SMCLK
UCA0CTLW0 |= UCMODE_2;
//波特率计算
UCA0BR0 =波特率整数; // 24000000/1000000 = 24.0
UCA0MCTLW =波特率_分数;// 24000000/1000000 - INT (24000000/1000000)= 0
UCA0CTLW0 &=~UCSWRST;//初始化增强型通用串行通信接口(eUSCI)
UCA0IE |= UCRXIE; //启用 USCI_A0接收中断
_bis_SR_register (GIE); //进入 UART 中断服务例程
}/******
UART ISR ***** /
#if defined (__TI_Compiler_version__)|| defined (__IAR_systems_icc_)
#pragma vector=USCI_A0_vector
__interrupt void USCI_A0_ISR (void)
#Elif defined (__GNU__)
void __attribute__(interrupt (USCI_A1_vector)#USCI_A0
编译器#A0)(void)#USCI_A0!
#endif
{
开关(__evo_in_range (UCA0IV、USCI_UART_UCTXCPTIFG))
{
USCI_NONE 案例:
中断;
USCI_UART_UCRXIFG 案例:
while (!(UCA0IFG & UCTXIFG));
状态=(UCA0STATW 和 UCADDR);
if (状态)
{
array[IN_PTR]= UCA0RXBUF;
IN_PTR++;
IN_PTR &= 0x0F;
}
中断;
USCI_UART_UCTXIFG 案例:
中断;
USCI_UART_UCSTTIFG 案例:
中断;
USCI_UART_UCTXCPTIFG 案例:
中断;
默认值:
中断;
}
}
