Other Parts Discussed in Thread: MSP430F2132, MSP430FR2476, LP-MSP430FR2476
主题中讨论的其他器件:MSP430F2132、
您好!
我正在将一个软件项目从 MSP430F2132移动到 MSP430FR2476、而我的 UART 似乎不工作。 当我向 UCA0TXBUF 写入数据时、它不会显示出使用逻辑分析仪从引脚发出的数据。 发送到 RX 引脚的数据也不会触发中断、尽管 TX 中断确实会被触发。
从 OutOfBox _LP-MSP430FR2476示例代码开始、我将使用 msp430fr267x_euscia0_UART_1.c 作为指南(dev.ti.com/.../node
以下是我的更新的初始化函数:
UART_TX_PORT = GPIO_PORT_P2 UART_RX_PORT = GPIO_PORT_P2 UART_TX_PIN = GPIO_PIN6 UART_RX_PIN = GPIO_PIN5
//停止看门狗计时器 WDT_A_HOLD (WDT_A_BASE);
void UART_Init (void){ //初始化与 UART 相关的变量 txComplete = false; remaindingCurrentCmdTxLenBytes = 0; 命令字节已配置= 0; 命令字节已配置= 0; //设置用于传入数据字节 的循环缓冲器字节(字节为字节); 字节 为 OutFunctionRd = 0;//从 LP-MSP430FR2476_Software_Examples/ Firmware/Source/Source/OutputUART_Index_OutputUARTxD_ENTRFUNT 中的 E/ INTRIP_INTRFUNT_INTRIP_INTRFUNT_ENTRIP_OUTHRT_OUTPUT_OUTPUT_OUTPUT_IN_OUTPUT_IN_OUT_OUTPUT_OUTPUT_IN_OUTPUT_OUT_OUTPUT_OUTPUT_OUT_UART_OUTPUT_OUTPUT_OUT_OUTPUT_OUTPUTTO UART_SELECT_FUNCTION); //配置 eUSCI UART @115200波特、8M // software-dl.ti.com/.../index.html EUSCI_A_UART_initParam param ={0}; param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK; param.clockPrescalar = 4; param.firstModReg = 5; param.secondModReg = 85; param.param.param.param_a_uart_no_param.msborLsbartst = eUSCI_A_uart_lSB_first; param.numberofStopBits = eUSCI_A_uart_one_stop_bit; param.uartMode = eUSCI_a_uart_mode; param.oversam采样= eUSCI_uart_uart_uart_uart_uart_mode;param.oversam_uart_uart_uart_generation if (STATUS_FAIL = EUSCI_A_UART_init (EUSCI_A0_BASE、¶m) ){ 返回; } EUSCI_A_UART_ENABLE (EUSCI_A0_BASE); //启用 UART 中断 EUSCI_A_UART_enableInterrupt (EUSCI_A0_BASE、 EUSCI_A_UART_Transmit 中断|//启用发送中断* EUSCI_A_UART_receive_interrupt );//接收中断启用* }
//禁用全局中断 __BIC_SR_register (GIE); //禁用并清除所有挂起的中断 SFRIE1 =( WDTIE__DISABLE | /*禁用看门狗定时器中断*/ OFIE__DISABLE | /*禁用振荡器故障中断*/ VMAIE_DISABLE | /*禁用空存储器访问中断*/ NMIIE__disable | /*禁用 NMI 引脚中断*/ JMBINIE__DISABLE |/*禁用 JTAG 邮箱输入中断* JMBOUTIE__DISABLE);//禁用 JTAG 邮箱输出中断*/ SFRIFG1 =(WDTIFG_0 | /*看门狗定时器无中断挂起*/ OFIFG_0 | /*振荡器故障无中断挂起*/ VMAIFG_0 | /*空存储器访问无中断挂起*/ NMIIFG_0 | /* NMI 引脚无中断挂起*/ JMBINIFG_0 | /* JTAG 邮箱输入无中断挂起*/ JMBOUTIFG_0);// JTAG 邮箱输出无中断挂起*// 启用全局中断 __bis_SR_register (GIE);
如上述注释中所述、我在此处的计算器(http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSP430BaudRateConverter/index.html)中使用 EUSCI、8MHz 时钟(我使用逻辑分析仪检查)和11520bps、获得了时钟预分频器、firstModReg 和 secondModReg 的值。 它们也似乎与用户指南 slau445i 表22-5中的值匹配:
BRCLK 波特率 UCOS16 UCBRx UCBRFx UCBRSx
8000000 115200 1 4 5 0x55
在将这些函数的功能与 UART_01示例进行比较时、我唯一发现缺少的内容是此行:
SYSCFG3|=USCIA0RMP;
我认为这对于我的引脚分配是不必要的...
以下是我的中断代码:
#if defined (__TI_Compiler_version__)|| defined (__IAR_systems_icc_) #pragma vector=EUSCI_A0_Vector __interrupt void EUSCI_A0_ISR (void) #Elif defined (__GNU__) void __attribute__(interrupt (interrupt (EUSCI_A1_vector)))#EUSCI_A0 Compiler #void ! #endif { switch (__evo_in_range (UCA0IV、UCIV_UCTXCPTIFG)){ 案例 UCIV__UCRXIFG:{/*中断源:接收缓冲区已满;中断 标志:UCRXIFG;中断优先级:最高*/ //检测到 RX 中断、因此将新字节存储在循环缓冲区中 ByteBuffer[byteIndex]= UCA0RXBUF; 字节索引 xWR+= 1; bytexWr &= 0x07; 中断; } 案例 UCIV__UCTXIFG:{//中断源:发送缓冲区为空; 中断标志:UCTXIFG */ //如果消息未完全传输,则发送下一个字节 if (commandBytesTxed <= remainingCurrentCmdTxLenBytes){ //将下一个字节放置在 TX 缓冲区中 UCA0TXBUF = currentCmdTx[commandBytesTxed+]]; } 否则{ //设置 TX 完成标志 txComplete =真; //清除 TX 中断 UCA1IFG &=~UCTXIFG_1; } 中断; } 默认值: 中断; } }
请告诉我、如果有任何问题立即出现、或者如果您有一些想法、我可以尝试、谢谢!