OlegALL 0 14 июля, 2015 Опубликовано 14 июля, 2015 · Жалоба Проблема в теме. Обсуждение здесь: http://caxapa.ru/609239.html Помогите Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mcheb 0 14 июля, 2015 Опубликовано 14 июля, 2015 (изменено) · Жалоба Сначала надо установить сброс УАРТа потом его включить Изменено 14 июля, 2015 пользователем mcheb Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
OlegALL 0 14 июля, 2015 Опубликовано 14 июля, 2015 · Жалоба Что за сброс? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mcheb 0 14 июля, 2015 Опубликовано 14 июля, 2015 · Жалоба Что за сброс? UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine** Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
OlegALL 0 15 июля, 2015 Опубликовано 15 июля, 2015 · Жалоба UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine** не помогло Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yuri_t 0 16 июля, 2015 Опубликовано 16 июля, 2015 · Жалоба Заработал ли UART ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Abell 0 16 июля, 2015 Опубликовано 16 июля, 2015 · Жалоба Обсуждение читать там, а ответы давать здесь? Вот ключевая фраза: Причём работало раньше всё нормально, принимались 14 байт, а в один момент работать перестало. Значит, что-то пошло не так :laughing: Уход частоты, уровней и прочее, в том числе со стороны передатчика тоже. В общем, все, не касающееся кода - его ведь не меняли, пока все работало нормально, верно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
OlegALL 0 16 июля, 2015 Опубликовано 16 июля, 2015 · Жалоба Обсуждение читать там, а ответы давать здесь? Вот ключевая фраза: Значит, что-то пошло не так :laughing: Уход частоты, уровней и прочее, в том числе со стороны передатчика тоже. В общем, все, не касающееся кода - его ведь не меняли, пока все работало нормально, верно? Да, загрузил версию, которая работала. Сейчас не работает. 2 байта принимаются через раз Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yuri_t 0 16 июля, 2015 Опубликовано 16 июля, 2015 · Жалоба Да, загрузил версию, которая работала. Сейчас не работает. 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. Переходим к реальному проекту Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
OlegALL 0 16 июля, 2015 Опубликовано 16 июля, 2015 · Жалоба Ну тогда подключаем "тяжёлую артиллерию" 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. Переходим к реальному проекту Спасибо. Передача-то работает нормально. По поводу кварца - у меня 32 кГц. Что, мало? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Abell 0 16 июля, 2015 Опубликовано 16 июля, 2015 · Жалоба По поводу кварца - у меня 32 кГц. Что, мало? 32768 Гц ? UCA0BR0 = 0x03; // 32k/9600 - 3.41 а MCLK не от часового кварца пилит? может банально не успевает? - Nikolay801_ Но - раньше все работало? Что изменилось? Кто предает эти байты, которые не принимаются? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
OlegALL 0 16 июля, 2015 Опубликовано 16 июля, 2015 · Жалоба 32768 Гц ? Но - раньше все работало? Что изменилось? Кто предает эти байты, которые не принимаются? Да 32768. Общается с МК программа верхнего уровня. Раньше работало, но немного подглючивало, в целом работало в общем. 2 байта не принимаются от терминала PCOMM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Abell 0 16 июля, 2015 Опубликовано 16 июля, 2015 · Жалоба Да 32768.... Раньше работало, но немного подглючивало, в целом работало в общем. Немного подглючивало - значит, не работало. Частота кварца крайне низкая :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
agregat 0 16 июля, 2015 Опубликовано 16 июля, 2015 · Жалоба Скорее всего процессор был частично испорчен в процессе экспериментов и скорее всего надо просто заменить проц и приемопередатчик... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
OlegALL 0 16 июля, 2015 Опубликовано 16 июля, 2015 · Жалоба Скорее всего процессор был частично испорчен в процессе экспериментов и скорее всего надо просто заменить проц и приемопередатчик... Такое может быть, что просто уарт испортился? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться