ftp27
@ftp27

Почему "падает" передача по SPI?

У меня имеется МК msp430f425 и WiFi модуль SPB-106. WiFi я пока не трогал, а только припаял проводки синхроимпульса и MISO к MISO; MOSI к MOSI. Так же припаял к CS от WiFi к I/O порту МК и послал туда нолик.

И подготовил такой нехитрый код:

#include "msp430.h"

void main( void )
{
  WDTCTL = WDTPW + WDTHOLD; //Выключаю Watch Dog Timer
      //ACLK = 32768 Гц
    while(FLL_CTL0 & 3 ); 
 // ======= Инициализация SPI =======    
     P1SEL = BIT6 + BIT7;   
    P2SEL = BIT1;         
    P2DIR |= BIT2;         
    
    P1DIR |= BIT4;        // CS от Вай фая
    P1OUT &= ~BIT4;       // 
    
  U0CTL = CHAR+SYNC+MM+SWRST; // 8-bit SPI Master **SWRST**
  U0TCTL = CKPH+SSEL1+STC; // SMCLK, 3-pin mode +SSEL0
  U0BR0 = 0x002; // SPICLK = SMCLK/2
  U0BR1 = 0x000;
  U0MCTL = 0x000;
  ME1 = USPIE0;                             // Module enable
  U0CTL &= ~SWRST;                          // SPI enable
  IE1 |= URXIE0;                            // Receive interrupt enable
  _EINT();                                  // Enable interrupts
    
// =================================  
 unsigned char trn_word[6] = "Hello!";
 
  while (1) {
    for (int i=0; i<6; i++) {
       while (!(IFG1 & UTXIFG0));
        TXBUF0 = trn_word[i];
    }
  }
 }



Смотрю на осциллограф и вижу такое
EOgmY806GZo.jpg


И такая характеристика постоянно повторяется. Если приглядеться, передается буква «H» и потом начинается следующая передача и что то падает. Как будто МК перезагружается, хотя WDT выключен.
  • Вопрос задан
  • 3896 просмотров
Решения вопроса 1
@pfalcon
Внимание вопрос — а зачем вы разрешаете прерывания модуля, если работаете через поллинг? Куда у вас уводит вектор соответствующего прерывания?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
POS_troi
@POS_troi
СадоМазо Админ, флудер, троль.
Я не работал с этим МК но вот вам из Атмеловских заначек

char* trn_word;
void Send (void)
{
        trn_word  = "Hello!"+0x00;
        while   (*trn_word != 0) 
        {
                TXBUF0  = *trn_word;
                while (!(IFG1 & UTXIFG0));
                trn_word++; 
        }
}


Кажется не ошибся, по памяти писал.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы