Цитата(OlegALL @ Jul 16 2015, 09:52)
Да, загрузил версию, которая работала. Сейчас не работает. 2 байта принимаются через раз
Ну тогда подключаем "тяжёлую артиллерию"
0. Создаем отдельный тестовый проект
1. Програмируем UART на 9600 бит/сек (формат 8 бит 1 старт 1 стоп, без Automatic baud rate detection)
RX/ ТХ прерывания- запрещены) согласно MSP430F41x2_Code_Examples (TI file slac288e.zip)
При это рабоч частота проц и периферии должна быть >= 1 MHZ
2. Сначала проверяем передачу (не прием !)
Пример кода
Код
const char str_to_send[] = "Str to send\r\n";
int len = strlen((char*)str_to_send);
int i;
for(;;)
{
for(i=0; i < len; i++)
{
while(!(IFG2&UCA0TXIFG));
UCA0TXBUF = str_to_send[i];
}
delay_1_sec();
}
Подключаем стандартный Windows/Linux serial port терминал и убеждаемся в правильности передачи.
Если передача не проходит или искажена, с помощью осц проверяем форму и длительность импульсов,
а так же формат(8 бит 1 стоп 1 старт)
3. Если передача работает, то проверяем прием
3.1 Разрешаем RX interrupts
3.2 Пример кода обработчика
Код
// Globals
volatile int rx_val = 0;
volatile int rx_cnt_ok = 0;
volatile int rx_cnt_bad = 0;
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCIA0RX_ISR (void)
{
rx_val = UCA0RXBUF;
if((UCA0STAT & (UCFE | UCOE )) != 0)
{
rx_cnt_bad++;
}
else
{
rx_cnt_ok++;
if(rx_cnt_ok >= 14)
rx_val++; // Just to make the compiler happy
}
}
3.3 Ставим breakpoints на rx_cnt_bad++ и на rx_val++;
3.4 С терминала посылаем строки типа "1234567890123456"
и убеждаемся что символы принимаются и ошибок нет
4. Переходим к реальному проекту