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.

[参考译文] CCS/MSP432P401R:示例"具有12MHz BRCLK&quot的PC回波;不从中断返回?

Guru**** 2609955 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/660113/ccs-msp432p401r-example-pc-echo-with-12mhz-brclk-does-not-return-from-interrupt

部件号:MSP432P401R

工具/软件:Code Composer Studio

大家好,

我正在使用演示"UART_PC_ECHO_12MHz_brclk.c"。 我只向主环路添加了一个命令,用于将模具(0xff)发送到UART。

它工作正常,我运行程序,并且我在计算机上不断收到值"0xff"。 当我通过计算机发送一些数据时,程序进入Rx_UART的中断例程,它返回通过TX_UART接收的值,但不返回到主例程。 它陷入我不理解的循环中:

有人能更好地解释我为什么不能回到主要程序吗? 我忘了一些旗帜吗?

遵循完整代码:

/* DriverLib包括*/
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>

/*标准包括*/
#include <stdint.h>
#include <stdbool.h>

//![简单UART配置]
/* UART配置参数。 这些是的配置参数
*使eUSCI成为UART模块,以9600波特率运行。 这些
*数值是使用TI提供的在线计算器计算的
*在:
*software-dl.ti.com/.../index.html
*/
const eUSI_UART_Config uartConfig =

EUSCI_A_UART_CLOCKSOURCE_SMCLK,// SMCLK时钟源
78,// BRDIV = 78
2,// UCXBRF = 2
0,// UCXBRS = 0
EUSCI_A_UART_NO_PARity,//无奇偶校验
EUSCI_A_UART_LSB优先,// LSB优先
EUSCI_A_UART_ONE_STOP_BIT,//一个停止位
EUSCI_A_UART_MODE,// UART模式
EUSCI_A_UART_ORTS_Ooversampling_BAUDRATE_generation // Oversampling
};
//![简单UART配置]

内部主(无效)

/*正在停止WDT */
MAP_WDT_A_HoldTimer();

/*在UART模式下选择WFP 1.2 和WFP 1.3 */
MAP_GPIO设置外围模块功能输入引脚(GPIO_PORT_P1,
GPIO _PIN1 | GPIO _PIN2 | GPIO _PIN3,GPIO主要模块功能);

/*将DCO设置为12MHz */
cs_setDCOCenteredFrequency (CS_DCO_Frequency_12);

//![简单UART示例]
/*配置UART模块*/
MAP_UART_INITModule (EUSCI_A0_BASE,&uartConfig);

/*启用UART模块*/
MAP_UART_enableModule (EUSCI_A0_BASE);

/*启用中断*/
MAP_UART_enableInterrupt (EUSCI_A0_BASE,EUSCI_A_UART_receive中断);
MAP_Interrupt_enableInterrupt (INT_EUSCIA0);
MAP_Interrupt_enableSleepOnIsrExit();
MAP_Interrupt_enableMaster();
//![简单UART示例]

同时(1)

MAP_UART_ESDLData(EUSI_A0_base, 0xff);
// map_pcm_gotoLPM0();
}
}

/* ESCI A0 UART ISR -将数据回波到PC主机*/
void EUSCIA0_IRQHandler (void)

UINT32_t status = MAP_UART_getEnabableInterruptStatus(EUSSCI_A0_base);

MAP_UART_CLEARInterruptFlag (EUSCI_A0_BASE,状态);

IF (状态和EUSCI_A_UART_receive中断标志)

MAP_UART_TEH数据(EUSI_A0_base, MAP_UART_receiveData(EUSSCI_A0_base);
}

}

欢迎您提供任何帮助! 谢谢你。

如果您需要更多信息,请告诉我。 我感谢你的评论。

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

    将,

    代码的编写方式是设备在ISR退出时返回休眠状态。 进入while (1)循环之前,代码中的以下行会启用此功能。

    MAP_Interrupt_enableSleepOnIsrExit(); 

    因此,当设备执行ISR时,您有一个设置,可以在ISR退出后启用休眠,然后将设备发送到休眠状态。  

    在ISR退出时不要启用睡眠,您将按预期操作。  

    您可以使用以下功能来确保这一点:

    interrupT_disableSleepOnIsrExit(); 

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

    Wakefield,

    我这样做了,现在程序按我需要的方式运行。

    感谢您的帮助! 这对我来说非常有价值。

    此致。