主题中讨论的其他器件:MSP430FR5994、 MSP430FR5969
工具/软件:Code Composer Studio
您好!
我在 TIREX 上找不到 MSP430FR5994的 UART 示例、因此我将使用 MSP430FR5969的示例。
代码(附在下面)与示例相同、但有一点变化、即它将始终回显(而不是像原始示例中那样"反向回显")。
该示例工作正常。 我通过 launchpad 在使用 USB 连接到 PC 时创建的 COM 端口看到 UART 数据。
一直都很棒
但出于某种原因、从从从 PC 发送字符到看到字符返回、我有一秒的延迟。
为什么? 如何使其立即运行、以便立即返回字符?
(对于其他器件、我会立即看到返回的 char、因此我想我的其他硬件也可以。)
我在代码处没有看到任何延迟环路或类似的东西...
代码:
/*-版权所有-、BSD *版权所有(c) 2017、德州仪器(TI)公司 *保留所有权利。 * * 只要 符合以下条件*、允许以源代码和二进制形式重新分发和使用: * *源代码的重新分发必须保留上述版权 声明*、此条件列表和以下免责声明。 * ***二进制形式的再发行必须在 *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。 * ***未经 事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。 * *本软件由版权所有者和贡献者"按原样"提供 *、 不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或 *贡献者都不对任何直接、间接、偶然、特殊、 *模范、 或相应的损害(包括但不限于 *采购替代产品或服务;丧失使用、数据或利润; *或业务中断)、但出于任何责任理论 、*无论是在合同中、严格责任还是由于 使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他) 、*即使已获悉可能会发生此类损坏。 *--/版权--*//********* //! 使用 EUSCI_A_UART_init API 的 EUSCI_A0外部环回测试//! //! 说明:此演示将 TX 连接到 MSP430 UART 的 RX //! 示例代码显示了寄存器// !的正确初始化 以及用于接收和发送数据的中断。 //! //! ACLK = BRCLK = 32.768kHz、MCLK = SMCLK = DCO =~1MHz //! //! //! 在 MSP430FR5969中进行了测试 //! -------- //! RST -| P2.0/UCA0TXD|--| //! | || //! | || //! | P2.1/UCA0RXD|--| //! | | //! //! 此示例使用以下外设和 I/O 信号。 您必须 //! 查看这些内容并根据您自己的董事会需要进行更改: //! - UART 外设 //! - GPIO 端口外设(用于 UART 引脚) //! - UCA0TXD //! - UCA0RXD //! //! 此示例使用以下中断处理程序。 要使用此示例 //! 在您自己的应用程序中、您必须将这些中断处理程序添加到 您的//! 矢量表。 //! - USCI_A0_Vector。 // #include "driverlib.h" uint16_t i; uint8_t RXData = 0、TXData = 0; uint8_t check = 0; void main (void) { //停止看门狗 WDT_A_HOLD (WDT_A_base); // LFXT 设置 //将 PJ.4和 PJ.5设置为主模块功能输入。 /* *选择端口 J *将引脚4、5设置为输入主模块功能 LFXT。 * GPIO_setPeripheralModuleFunctionInputPin ( GPIO_PORT_PJ、 GPIO_PIN4 + GPIO_PIN5、 GPIO_PRIMARY_MODULE_FUNCTION ); //将 DCO 频率设置为1MHz CS_setDCOFreq (CS_DCORSEL_0、CS_DCOFSEL_0); //将外部时钟频率设置为32.768KHz cs_setExternalClockSource (32768、0); //set ACLK=LFXT CS_initClockSignal (CS_ACLK、CS_LFXTCLK_select、CS_Clock_divider); //set SMCLK = DCO、分频器为1 CS_initClockSignal (CS_SMCLK、CS_DCOCLK_select、CS_Clock_divider); //set MCLK = DCO、分频器为1 CS_initClockSignal (CS_MCLK、CS_DCOCLK_select、CS_Clock_divider); //Start XT1、无超时 CS_TurnOnLFXT (CS_LFXT_DRIVE_0); //配置 UART 引脚 //将 P2.0和 P2.1设置为辅助模块功能输入。 /* *选择端口2D *将引脚0、1设置为输入次级模块功能(UCA0TXD/UCA0SIMO、UCA0RXD/UCA0SOMI)。 * GPIO_setPeripheralModuleFunctionInputPin ( GPIO_PORT_P2、 GPIO_PIN0 + GPIO_PIN1、 GPIO_secondary 模块功能 ); /* *禁用 GPIO 上电默认高阻抗模式以激活 *先前配置的端口设置 * PMM_unlockLPM5 (); //配置 UART EUSCI_A_UART_initParam param ={0}; param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_ACLK; param.clockPrescalar = 3; param.firstModReg = 0; param.secondModReg = 92; param.parity = EUSCI_A_UART_NO_parity; param.msborLsbFirst = EUSCI_A_UART_LSB_FIRST; param.numerofStopBits = EUSCI_A_UART_Oe_STOP_BIT; param.uartMode = EUSCI_A_UART_MODE; param.oversaming= EUSCI_A_UART_LOW_FREQUENCY BAUDRATE_generation; if (STATUS_FAIL = EUSCI_A_UART_init (EUSCI_A0_BASE、¶m)){ 返回; } EUSCI_A_UART_ENABLE (EUSCI_A0_BASE); EUSCI_A_UART_clearInterrupt (EUSCI_A0_BASE、 EUSCI_A_UART_receive_interrupt); //启用 USCI_A0 RX 中断 EUSCI_A_UART_enableInterrupt (EUSCI_A0_BASE、 EUSCI_A_UART_receive_interrupt); //启用中断 _enable_interrupt (); while (1) { TXData = RXData; //增加 TX 数据 //将数据加载到缓冲区中 EUSCI_A_UART_transmitData (EUSCI_A0_BASE、 TXData); while (check!= 1); Check = 0; } } //********* // ////这是 USCI_A0中断矢量处理例程。 //// ********* #if defined (__TI_Compiler_version__)|| defined (__IAR_systems_icc_) #pragma vector=USCI_A0_vector __interrupt #elif defined (__GNU__) __attribute__(interrupt (USCI_A0_vector))#endif void USCI_A0_ISR __interrupt #elt #elif defined (__GTIC_属性_(UCA_UCI_IN_IN_INTRIF_IN_IN_INTRIBUCI_IN_UCAINTRIEL )(UCA0_INTRUCAINTR USCI_NONE 案例:中断; USCI_UART_UCRXIFG 案例: RXData = EUSCI_A_UART_receiveData (EUSCI_A0_BASE); 支票=1; 中断; 案例 USCI_UART_UCTXIFG:中断; 案例 USCI_UART_UCSTTIFG:中断; 案例 USCI_UART_UCTXCPTIFG:break; } }
谢谢。
