This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP432P401M:中断生成的UART

Guru**** 2536040 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/581794/msp432p401m-interrupt-generated-uart

部件号:MSP432P401M

大家好,

   我正在使用MSP432P401M微控制器。 我想在TXBUF中传输0x55值。 该值是根据UART中断传输的。

我的代码是:-

包括"MSP432P401M.h"


void init_UART (void)

//配置UART引脚
P1->SEL0 |= BIIT2 | BIT3;//将2-UART引脚设置为辅助功能

//配置UART
EUSCI_A0->CTLW0 |= EUSCI_A_CTLW0_SWRST;//将eUSCI置于复位状态
EUSCI_A0->CTLW0 = EUSCI_A_CTLW0_SWRST | EUSCI_B_CTLW0_sel__SMCLK;//EUSCI_B_CTLW0_sel__ACLK;//在复位时保持eUSCI
// EUSCI_B_CTLW0_sel__SMCLK;//为SMCLK配置eUSCI时钟源

//波特率计算
//1200万/(16*9600)=9600= 78.125
//分数部分= 0.125
//用户指南表21-4:UCBRSx = 0x10
// UCBRFx = int ((78.125 78)*16)= 2
EUSCI_A0->BRW =78;// 1200万/16/9600</s>9600
EUSCI_A0->MCTLW =(2 << EUSCI_A_MCTLW_BRF_OFS)| EUSCI_A_MCTLW_OS16;

EUSCI_A0->CTLW0 &=~EUSCI_A_CTLW0_SWRST;//初始化eUSCI

EUSCI_A0->IFG &=~EUSCI_A_IFG_RXIFG;//清除eUSCI RX中断标志
// EUSCI_A0->IFG &=~EUSCI_A_IFG_TXIFG;
EUSCI_A0->IE |= EUSCI_A_IE_RXIE;//启用USI_A0 RX中断
//EUSCI_A0->IE |=EUSCI_A_IE_TXIE;

//从ISR退出时启用睡眠
SCB->SCR || SCB_SCR_SLEEPONEXIT_MSK;

//启用全局中断
//__enable_IRQ();


P1->DIR || BIT0;
P1->out &=~BIT0;


// EUSCI_A0->TXBUF=0x55;

//在NVIC模块中启用eUSCIA0中断
NVIC->ISER[0]=1<<(EUSICIA0_IRQn)和31);

}

// UART中断服务例程
void EUSCIA0_IRQHandler (void)


EUSCI_A0->TXBUF=0x55;


}

当我调试时,代码值0x55不在TXBUF中传输,这意味着不生成UART中断。当我在 主代码(void init_UART)中添加EUSCI_A0->TXBUF=0x55并且中断为comment out时,0x55值在TXBUF中传输。

为什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好Sayali:
    是否希望获得UART RX ISR,然后传输0x55 @9600波特率?
    如果0x55在主代码中传输,则表示您已正确配置UART,但未启用全局中断。 启用全局中断后,只需在UART ISR中放置一个断点,并检查当您从Tera Term /any terminal进行传输时,断点是否会被命中。


    此致,
    Vikas Chola