Я не получаю вывод на серийный MSP430 F5438A
У меня есть плата MSP430 F5438A, и я должен создать проект, в котором одной из моих целей является передача и получение строки по UART, например, я открываю Tera Term, устанавливаю скорость передачи в 9600 и, если я записываю что-то вроде "Привет", мне нужно отправить это обратно в окно TeraTerm. Я также использовал осциллограф, и значение RX всегда вниз (0). Вот код, который я написал:
Сначала я установил часы и код для UART. Если я прокомментирую то, что находится внутри while(1), код никогда не войдет в часть прерывания.
void mClock()
{
P1DIR = BIT0;
P11DIR |= 0x07; // Output P11.0,P11.1,P11.2
P11SEL |= 0x07; // Peripheral Output
UCSCTL3 |= SELREF_REFO; // REFOCLK
UCSCTL4 |= SELM_MCLK; // MCLK - DCOCLK
UCSCTL5 |= DIVM_MCLK; // DIVIDER - 2
__bic_SR_register(SCG0); // Disable the FLL control loop
UCSCTL0 = 0x1810; // lowest bit counter(dco-24,mod-16)
UCSCTL1 = 0x0050; // DCORSEL 0101
UCSCTL2 = FLLD_N; // Set MCLK to 8.33 Mhz and SMCLK to 1.04 Mhz and ACLK to 32 Khz
__bic_SR_register(SCG0); // Enable the FLL control loop
}
void stringUart()
{
P3SEL = 0x30; // USCI_A0 TXD/RXD P3.4,5
UCA0CTL1 |= UCSWRST; // **Put state machine in reset**
UCA0CTL1 |= UCSSEL__ACLK; // AMCLK
UCA0BR0 = 3; // 32khz - 9600 baud
UCA0BR1 = 0;
UCA0MCTL |= UCBRS_3 + UCBRF_0; // Modulation UCBRSx=3, UCBRFx=0
UCA0CTL1 &= UCSWRST; // USCI released for operation
UCA0IE |= UCRXIE; // USCI Receive Interrupt Enable
__bis_SR_register(GIE); // Interrupts enabled
while(1)
{
while (!(UCA0IFG&UCTXIFG));
for (i = 0; i < sizeof(data); i++)
UCA0TXBUF = data[i];
UCA0TXBUF = UCA0RXBUF;
while (UCA0IFG&UCRXIFG);
char(data) = UCA0RXBUF;
}
}
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{
switch(__even_in_range(UCA0IV,0x18))
{
case 0x00: // Vector 0 - no interrupt
break;
case 0x02: // Vector 2: UCRXIFG
if (UCA0RXBUF == 'u') // 'u' received?
{
i = 0;
UCA0IFG |= UCTXIFG; // Enable USCI_A0 TX interrupt
UCA0TXBUF = data[i++];} // TX -> RXed character
break;
case 0x04:
{ UCA0TXBUF = data[i++]; // TX next character
if (i == sizeof data - 1) // TX over?
UCA0IFG &= ~UCTXIFG;
}
break; // Vector 4: UCTXIFG
default: break;
}
Проблема в том, что я ничего не получаю на TeraTerm, а флаг RX всегда выключен. Спасибо цезарь