|
UART не принимает больше одного байта. Контроллер MSP430F4152 |
|
|
|
Jul 14 2015, 09:45
|
Участник

Группа: Участник
Сообщений: 70
Регистрация: 30-11-10
Пользователь №: 61 275

|
Проблема в теме. Обсуждение здесь: http://caxapa.ru/609239.html Помогите
|
|
|
|
|
 |
Ответов
|
Jul 16 2015, 06:02
|

профессиональный дилетант
   
Группа: Участник
Сообщений: 866
Регистрация: 16-03-06
Из: Шебекино - Лысьва - Тюмень
Пользователь №: 15 292

|
Обсуждение читать там, а ответы давать здесь? Вот ключевая фраза: Цитата Причём работало раньше всё нормально, принимались 14 байт, а в один момент работать перестало. Значит, что-то пошло не так  Уход частоты, уровней и прочее, в том числе со стороны передатчика тоже. В общем, все, не касающееся кода - его ведь не меняли, пока все работало нормально, верно?
--------------------
Скоро дело сказывается, да не скоро сказка делается, или тише будешь - дальше уедешь...  
|
|
|
|
|
Jul 16 2015, 06:52
|
Участник

Группа: Участник
Сообщений: 70
Регистрация: 30-11-10
Пользователь №: 61 275

|
Цитата(Abell @ Jul 16 2015, 10:02)  Обсуждение читать там, а ответы давать здесь? Вот ключевая фраза: Значит, что-то пошло не так  Уход частоты, уровней и прочее, в том числе со стороны передатчика тоже. В общем, все, не касающееся кода - его ведь не меняли, пока все работало нормально, верно? Да, загрузил версию, которая работала. Сейчас не работает. 2 байта принимаются через раз
|
|
|
|
|
Jul 16 2015, 08:32
|
Частый гость
 
Группа: Свой
Сообщений: 163
Регистрация: 24-08-05
Пользователь №: 7 937

|
Цитата(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. Переходим к реальному проекту
|
|
|
|
|
Jul 16 2015, 09:53
|
Участник

Группа: Участник
Сообщений: 70
Регистрация: 30-11-10
Пользователь №: 61 275

|
Цитата(yuri_t @ Jul 16 2015, 12:32)  Ну тогда подключаем "тяжёлую артиллерию" 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 кГц. Что, мало?
|
|
|
|
|
Jul 16 2015, 10:21
|

профессиональный дилетант
   
Группа: Участник
Сообщений: 866
Регистрация: 16-03-06
Из: Шебекино - Лысьва - Тюмень
Пользователь №: 15 292

|
Цитата(OlegALL @ Jul 16 2015, 12:53)  По поводу кварца - у меня 32 кГц. Что, мало? 32768 Гц ? Цитата UCA0BR0 = 0x03; // 32k/9600 - 3.41 Цитата а MCLK не от часового кварца пилит? может банально не успевает? - Nikolay801_ Но - раньше все работало? Что изменилось? Кто предает эти байты, которые не принимаются?
--------------------
Скоро дело сказывается, да не скоро сказка делается, или тише будешь - дальше уедешь...  
|
|
|
|
|
Jul 16 2015, 10:48
|
Участник

Группа: Участник
Сообщений: 70
Регистрация: 30-11-10
Пользователь №: 61 275

|
Цитата(Abell @ Jul 16 2015, 14:21)  32768 Гц ?
Но - раньше все работало? Что изменилось? Кто предает эти байты, которые не принимаются? Да 32768. Общается с МК программа верхнего уровня. Раньше работало, но немного подглючивало, в целом работало в общем. 2 байта не принимаются от терминала PCOMM.
|
|
|
|
Сообщений в этой теме
OlegALL UART не принимает больше одного байта. Контроллер MSP430F4152 Jul 14 2015, 09:45 mcheb Сначала надо установить сброс УАРТа потом его вклю... Jul 14 2015, 11:35 OlegALL Что за сброс? Jul 14 2015, 11:53 mcheb Цитата(OlegALL @ Jul 14 2015, 15:53) Что ... Jul 14 2015, 13:20  OlegALL Цитата(mcheb @ Jul 14 2015, 17:20) КодUCA... Jul 15 2015, 06:06 yuri_t Заработал ли UART ? Jul 16 2015, 04:44 agregat Скорее всего процессор был частично испорчен в про... Jul 16 2015, 11:40 OlegALL Цитата(agregat @ Jul 16 2015, 15:40) Скор... Jul 16 2015, 12:06  Abell Цитата(OlegALL @ Jul 16 2015, 15:06) Тако... Jul 16 2015, 12:42  agregat Цитата(OlegALL @ Jul 16 2015, 15:06) Тако... Jul 17 2015, 10:51 Obam Если настройки USCI соответствуют приведённым в ht... Jul 16 2015, 13:29 OlegALL Цитата(Obam @ Jul 16 2015, 17:29) Если на... Jul 17 2015, 07:43  Abell Цитата(OlegALL @ Jul 17 2015, 10:43) Скор... Jul 17 2015, 08:05   OlegALL Цитата(Abell @ Jul 17 2015, 12:05) На сто... Jul 17 2015, 09:46 Obam При настройке УАПП, мне в своё время, очень понрав... Jul 17 2015, 09:59 Abell И что не получилось, какие симптомы, можно подробн... Jul 17 2015, 10:06 OlegALL Всё работает, неправильно сделал инициализацию. Сп... Jul 27 2015, 06:01
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|