我將以下代碼燒錄到基本上通過微控制器的UCA0串行模塊在每次中斷時發送0xc5字符的器件上。出於某種原因,當我在示波器上觀察引腳3.4時看不到輸出。使用MSP430F5438A微控制器通過UART發送數據
#include "msp430x54xA.h"
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
//P3IN = 0x08; // P3.5 RXD input
P3OUT = 0x10; // P3.4 TXD output
P3SEL = 0x30; // P3.4,5 = USCI_A0 TXD/RXD
UCA0CTL1 |= UCSWRST; // **Put state machine in reset**
UCA0CTL1 |= UCSSEL_1; // CLK = ACLK
UCA0BR0 = 0x03; // 32kHz/9600=3.41 (see User's Guide)
UCA0BR1 = 0x00; //
UCA0MCTL = UCBRS_3+UCBRF_0; // Modulation UCBRSx=3, UCBRFx=0
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt
__bis_SR_register(LPM3_bits + GIE); // Enter LPM3, interrupts enabled
__no_operation(); // For debugger
}
// Echo back RXed character, confirm TX buffer is ready first
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{
UCA0TXBUF = 0xc5;
}
的代碼是這裏的代碼稍加修改的版本:https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/166345
爲什麼我看不到相應的引腳輸出?
編輯以添加新的代碼,而不必中斷:
#include "msp430x54xA.h"
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
//P3IN = 0x08; // P3.5 RXD input
P3OUT = 0x10; // P3.4 TXD output
P3SEL = 0x30; // P3.4,5 = USCI_A0 TXD/RXD
UCA0CTL1 |= UCSWRST; // **Put state machine in reset**
UCA0CTL1 |= UCSSEL_1; // CLK = ACLK
UCA0BR0 = 0x03; // 32kHz/9600=3.41 (see User's Guide)
UCA0BR1 = 0x00; //
UCA0MCTL = UCBRS_3+UCBRF_0; // Modulation UCBRSx=3, UCBRFx=0
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
while (1) {
UCA0TXBUF = 0xc5;
__delay_cycles(25000000);
}
}
從數據表中使用的寄存器的總結:
什麼你在做什麼來提高中斷? –
,直到你有它的工作不使用中斷。一次走一步,在跑步之前走路。首先嚐試TX,只是爆炸的東西。確認你有正確的設置/速度。然後從一個愚蠢的終端tx,看到rx通過回顯它的作用。然後輪詢中斷並清除它並完全理解它,最後將中斷啓用到內核中。 –
你有什麼部分完成? –