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/MSP430G2553:发送中断在没有发送的情况下被触发

Guru**** 2568585 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/781850/ccs-msp430g2553-transmit-interrupt-being-triggered-without-transmitting

器件型号:MSP430G2553

工具/软件:Code Composer Studio

如果我搞砸了,我就会在这里发表第一篇文章,很抱歉。

我来自 Arduino 背景、因此许多较低级的功能对我来说都是全新的。 我一直在使用一些代码示例并对其进行修改、以尝试了解如何通过虚拟 COM 端口发送和接收命令字符串和数据。

我有以下代码:

#include "msp430g2553.h"
#include 
#include 

char outputstring[7]="test\r\n";
char inputbuffer[5];
char cmdwore[5];
char rxchar;

unsigned int i = 0;
unsigned int rxindex = 0;
unsigned int cmdflag = 0;

void main (void)
{
WDTCTL = WDTPW + WDTHOLD;//停止看门狗/--------------

配置时钟--- //

DCOCTL = 0; //选择最低 DCOx 和 MODx 设置
BCSCTL1 = CALBC1_1MHZ;//设置范围
DCOCTL = CALDCO_1MHZ;//设置 DCO 阶跃+调制

/--- 配置 LED 的--- //

P1DIR |= BIT0 + BIT6;// P1.0和 P1.6输出
P1OUT &=~BIT0 + BIT6;// P1.0和 P1.6 = 0

/--- 设置 P1.1和 P1.2的 UART 功能--- //

P1SEL |= BIT1 + BIT2;// P1.1 UCA0RXD 输入
P1SEL2 |= BIT1 + BIT2;// P1.2 UCA0TXD 输出

/--- 配置 UART (USCI_A0)--- //

UCA0CTL1 |= UCSSEL_2 + UCSWRST;// USCI 时钟= SMCLK、USCI_A0禁用
UCA0BR0 = 104; //数据表表中的104 -
UCA0BR1 = 0; //-选择波特率=9600、clk = SMCLK
UCA0MCTL = UCBRS_1; //数据表中的调制值= 1
UCA0CTL1 &=~UCSWRST; //清除 UCSWRST 以启用 USCI_A0

//--- 使能中断--- //

IE2 |= UCA0TXIE; //启用发送中断
IE2 |= UCA0RXIE; //启用接收中断


_BIS_SR (LPM0_Bits + GIE);

}

#pragma vector = USCIAB0TX_vector
__interrupt void TransmitInterrupt (void)
{
if (i < sizeof (inputbuffer))(如果(i < sizeof (inputbuffer))
{
UCA0TXBUF = inputbuffer[i++];
}
其他
{
cmdflag = 0;
I=0;
}
}

#pragma vector = USCIAB0RX_vector
__interrupt void ReceiveInterrupt (void)
{
rxchar = UCA0RXBUF;
inputbuffer[rxindex++]= rxchar;
if (rxchar == 13)
{
cmdflag = 1;
}
IFG2 &=~UCA0RXIFG;
}

这似乎是触发的  

USCIAB0TX_VECTOR 

代码的目的是接收一个命令字、将其放入"inputbuffer"中、一旦收到字符13、它应该会发出"cmdflag"、以便主循环可以再次开始传输它。
我已经取出了其中的一些代码来尝试计算正在发生的情况、我在发送中断中放置了一个断点、它似乎一直在关闭。

我确信我错过了一些非常明显的东西、因为我对所有这些都很陌生。 如果有任何帮助、我们将不胜感激!

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

    当 USCI 退出复位时、UCA0TXIFG 会自动置位[参考用户指南(SLAU144J)第15.3.1和15.4.13]节。 这是一项功能。

    仅当您有要发送的内容(就像您在这里一样)时才打开 TXIE。 发送完成后关闭 TXIE。

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

    非常感谢。