Я не получаю вывод на серийный 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 всегда выключен. Спасибо цезарь

0 ответов

Другие вопросы по тегам