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.

[参考译文] MSPM0C1104:GPIO 软件 UART

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1367372/mspm0c1104-gpio-sw-uart

器件型号:MSPM0C1104

工具与软件:

您好!  
我正在使用 MSPM0C1104、只有一个 UART 可用、因此我需要制作 GPIO SW UART。 对于该计时器中断、使用 GPIO UART、因为 GPIO 引脚是异步的。 现在、在同一个项目中、软件 GPIO UART 和 UART0已经可用。
现在、我对 Uart0使用轮询方法、对 SW UART 使用计时器中断。 但在 while 循环中、如果两个 UART 都处于活动状态、则硬件 UART 工作、而 SW GPIO UART 仅在 while 循环中没有其他代码时工作。  
您能否解释一下如何继续执行此操作、并在 while 循环中将数据发送到两个 UART。

int main (空)
{
SYSCFG_DL_init ();

/*
*如果 SW 为开路、则关闭 LED;如果 SW 为闭合、则打开 LED。
*默认情况下 LED 会关闭。
*/

NVIC_EnableIRQ (GPIO_UART_INT_IRQN);
NVIC_EnableIRQ (TIMER_0_INST_INT_IRQN);
currentState = RX_STATE;
TX_DATA_buff = 0x21;
SEND_FLAG = 0;

unsigned char arr[]={0x11、0x22、0x77、0x44、0x66、0x88、0x77、0x77、0x76、0x76、0x76};//OpenLid;

while (1){

__ WFI ();
if (send_FLAG ==1)
{
tempByte = TX_DATA_buff << 1;//存储数据字节并添加起始位
tempByte >= 0x0200;//添加停止位
SEND_FLAG = 0;
DL_GPIO_setPins (GPIO_UART_PORT、GPIO_UART_SW_TX_PIN);
DL_GPIO_initDigitalOutputFeatures (GPIO_UART_SW_TX_IOMUX、
DL_GPIO_INVERRITY_DISABLE、DL_GPIO_resistor_pull_up、
DL_GPIO_DRIVE_STRENGTING_LOW、DL_GPIO_HIZ_DISABLE);
DL_GPIO_enableOutput (GPIO_UART_PORT、GPIO_UART_SW_TX_PIN);
Timer_init();
currentState = TX_STATE;

否则{
unsigned char arr[]={0x11、0x22、0x77、0x44、0x66、0x88、0x77、0x77、0x76、0x76、0x76};//OpenLid;
uart_packet_size = sizeof (arr)/ sizeof (arr[0]);
UART_Write_Buffer (arr、UART_packet_size);      //此函数用于将数据发送到工作正常的 UART。
DL_GPIO_togglePins (GPIO_LEDS_PORT、
GPIO_LEDS_USER_LED_1_PIN | GPIO_LEDS_USER_TEST_PIN);

 delay_cycles (1200000);



其他情况下才正常工作。 如果我注释 else 条件、则仅当条件 SW UART 正在发送数据时。
如何进行此操作????

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

    您好 Harshita、

    有一些点需要你注意,检查和做:

    1)。 __WFI ()意味着 MCU 将进入低功耗模式、程序将卡在此处、直到发生中断。

    2)。 如果您不希望程序在处理中断后再次进入低功耗模式并希望程序继续执行以下语句,请添加以下指令:DL_SYSCTL_disableSleepOnExit ()。

    3)。 检查逻辑、当您的程序执行"if"和"else"时、中断是否会发生。

    4)。 send_flag 对于您的程序似乎非常重要、我认为您可以检查 send_flag 的逻辑、无论它是否在所需的时间点设置。

    5). 尝试分别测试 UART0和 SW UART。

    此致、

    K·扬茨