工具/软件:
我尝试对 MSP430FR59941进行编程、以使用 ISR 通过 UART0发送和接收消息。 我将放弃等效于每一个其他字符、只接收一半的消息。
我将波特率设置为9600。 我看了示波器上的通信、只有一点点噪音。 我不确定该如何进行调试。
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.
工具/软件:
我尝试对 MSP430FR59941进行编程、以使用 ISR 通过 UART0发送和接收消息。 我将放弃等效于每一个其他字符、只接收一半的消息。
我将波特率设置为9600。 我看了示波器上的通信、只有一点点噪音。 我不确定该如何进行调试。
// UART RX ISR
#if Defined (__TI_COMPILER_VERSION__)|| Defined (__IAR_SYSTEM_ICC__)
pragma vector=EUSCI_A0_vector
__中断无效 EUSCI_A0_ISR (void)
#elif defined (__GNUC__)
void _attribute__((interrupt (USCI_A0_vector)) USCI_A0_ISR (void)
#else
错误:不支持编译器!
#endif
{
switch (__even_in_RANGE (UCA0IV、USCI_UART_UCTXCPTIFG)){
case USCI_NONE:中断;
case USCI_UART_UCRXIFG:
if (!message_ready){
receivedChar = UCA0RXBUF;
if (receivedChar ='\n'|| BUFFER_INDEX >= MAX_BUFFER_SIZE -1){
Message_ready =1;
uart_send_string (rx_buffer);
Buffer_index = 0;
}其他{
RX_BUFFER[BUFFER_INDEX++]= receivedChar;
//uart_send_string (rx_buffer);
}
}
休息;
默认值:中断;
}
}
1) > uart_send_string (rx_buffer);
看不见我怀疑这需要很长时间(几毫秒)、在此期间、所有 Rx 字节都会丢失(溢出)。 我建议您将其移至 main()。
2)更一般地说、只要 MESSAGE_READY = 1、Rx 字节就会被丢弃(忽略)。 我建议 main()尽快检索 rx_buffer[]的内容并设置 message_ready=0。 它有1ms (9600bps)的时间来完成此操作、这实际上是一个并非不合理的时间量。
她似乎知道自己在做什么。 当我从 ISR 开始跳闸所有逻辑时、似乎不太频繁。
这就是 ISR 例程中的所有内容、似乎在 LaunchPad 上运行良好。 每隔一段时间我都会想念一个角色,但现在似乎更一致。
我将在应用中的微控制器上进行编程、以验证它现在是否正常工作。
// UART RX ISR
#if Defined (__TI_COMPILER_VERSION__)|| Defined (__IAR_SYSTEM_ICC__)
pragma vector=EUSCI_A0_vector
__中断无效 EUSCI_A0_ISR (void)
#elif defined (__GNUC__)
void _attribute__((interrupt (USCI_A0_vector)) USCI_A0_ISR (void)
#else
错误:不支持编译器!
#endif
{
switch (__even_in_RANGE (UCA0IV、USCI_UART_UCTXCPTIFG)){
case USCI_NONE:中断;
case USCI_UART_UCRXIFG:
receivedChar = UCA0RXBUF;
RX_BUFFER[BUFFER_INDEX++]= receivedChar;
休息;
默认值:中断;
}
}
它似乎每隔一个字节。
我想知道 MCLK 和位时钟之间的关系。 如果您将时钟系统保留为时钟系统上电默认、 MCLK 将为1MHz。 这似乎足够快,但有时它不是。 更改为8MHz 与设置 DIVM=0一样简单。
除非您保护主例程中通过禁用中断来更改 BUFFER_INDEX 的代码、否则您的缓冲代码会出现问题。
我当时使用的是1MHz。 将时钟更改为8MHz 的语法是什么? 我还清理了 ISR、似乎对我有很大帮助。 它在 LaunchPad 上的工作方式相当一致、但当我将其刻录到板载应用程序时、我尝试发送的15个字符中似乎缺失了2个字符。 在示波器上、传入的 UART 确实有一些噪声。 但我不确定是什么导致了损耗。
这是我的 ISR
// UART RX ISR
#if Defined (__TI_COMPILER_VERSION__)|| Defined (__IAR_SYSTEM_ICC__)
pragma vector=EUSCI_A0_vector
__中断无效 EUSCI_A0_ISR (void)
#elif defined (__GNUC__)
void _attribute__((interrupt (USCI_A0_vector)) USCI_A0_ISR (void)
#else
错误:不支持编译器!
#endif
{
switch (__even_in_RANGE (UCA0IV、USCI_UART_UCTXCPTIFG)){
case USCI_NONE:中断;
case USCI_UART_UCRXIFG:
receivedChar = UCA0RXBUF;
RX_BUFFER[BUFFER_INDEX++]= receivedChar;
休息;
默认值:中断;
}
}
示例 msp430fr599x_cs_01.c 演示了将 S/MCLK 设置为8MHz。 您可能只需直接复制/粘贴代码即可。
https://dev.ti.com/tirex/explore/node?node=A__ADtHzr9Ec707pVOoi2fkQw__msp430ware__IOGqZri__LATEST