|
2 страниц
1 2 >
|
 |
Ответов
(1 - 17)
|
Dec 10 2009, 09:40
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 10-12-09
Из: Томск
Пользователь №: 54 174

|
Т.е. мне нужно постоянно читать и если frame без ошибок, то это то что мне нужно?
|
|
|
|
|
Dec 10 2009, 10:18
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 10-12-09
Из: Томск
Пользователь №: 54 174

|
Вот мой код И чего-то он не правильно работает...Данные в массиве появляются в рандомных местах while(1) { unsigned int status; status = m_pUSART0->US_CSR; m=0;
m_pUSART0->US_CR = AT91C_US_RSTSTA; //сброс битов Frame , Pare и т.д if((m_pUSART0->US_CSR&AT91C_US_FRAME)==0) //Если Frame=0, то // стоповых битов в низком уровне не детектировано { while(m<513) { input1=read_char_USART0(); // Читаем с UART buff2[m]=input1; // Запись в массив m++; } } }
Сообщение отредактировал vutang - Dec 10 2009, 10:37
|
|
|
|
|
Dec 10 2009, 11:13
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 10-12-09
Из: Томск
Пользователь №: 54 174

|
Ну если вы на AVR делали, то напишите что хоть в алгоритме неправильно.
Ок aaarrr, я так пробовал и у меня тоже самое получалось, но сейчас еще раз попробую.
unsigned int status; status = m_pUSART0->US_CSR; m=0; m_pUSART0->US_CR = AT91C_US_RSTSTA; //ñáðîñ áèòîâ RXBRK , Pare è ò.ä if((m_pUSART0->US_CSR&AT91C_US_RXBRK)!=0) //Åñëè RXBRK=1, òî íàéäåí îáðûâ ïðèåìà ò.å. Break { input1=read_char_USART0(); if(input1==0) { input1=read_char_USART0(); if(input1==0) { while(m<513) { input1=read_char_USART0(); // ×èòàåì ñ UART buff2[m]=input1; // Çàïèñü â ìàññèâ m++; } } } }
Ну вот как-то так.... и такая же ситуация
|
|
|
|
|
Dec 10 2009, 11:26
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 10-12-09
Из: Томск
Пользователь №: 54 174

|
Увы....но даже если убрать m_pUSART0->US_CR = AT91C_US_RSTSTA; То ничего не меняется((( Данные принимаются, и в массиве записываются по порядку но начало записи всегда разное.(
|
|
|
|
|
Dec 10 2009, 11:38
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(vutang @ Dec 10 2009, 14:26)  Увы....но даже если убрать m_pUSART0->US_CR = AT91C_US_RSTSTA; То ничего не меняется((( Да не надо убирать (как тогда статусы сбрасываться будут?), надо сделать грамотно, т.е.: 1. Прочитать один абзац о работе Receive Break (31.6.3.11). Обратить внимание на то, что на один break RXBRK генерируется два раза. 2. Почитать еррату. Убедится, что в timeguard не пишется 0. 3. Воспользоваться полученными знаниями для написания программы.
|
|
|
|
|
Dec 10 2009, 12:21
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 10-12-09
Из: Томск
Пользователь №: 54 174

|
Спасибо всем кто давал советы. Все заработало вот так:
m_pUSART0->US_CR = AT91C_US_RSTSTA; while(!(m_pUSART0->US_CSR&AT91C_US_RXBRK)==1) { while(!(m_pUSART0->US_CSR&AT91C_US_RXBRK)==1) { count++; if(count==2420) break; } if(count==2420) break; while(m<40) { Delay(55*4); input1=read_char_USART0(); buff2[m]=input1; m++; }
|
|
|
|
|
Dec 15 2009, 06:53
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 10-12-09
Из: Томск
Пользователь №: 54 174

|
Но он работает)
|
|
|
|
|
Dec 15 2009, 12:34
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 10-12-09
Из: Томск
Пользователь №: 54 174

|
Цитата(sergeeff @ Dec 15 2009, 10:18)  Код, построенный с программными задержками Delay(55*4) вызывает большие сомнения. Delay(55*4) это задержки между димерами = 4 мкс, но вообще и без нее тоже работает.
|
|
|
|
|
Dec 16 2009, 15:17
|

Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070

|
Цитата(aaarrr @ Dec 10 2009, 13:56)  Не нужно пытаться ловить break по Framing Error - у USART'а для этого есть событие RXBRK. И еррату почитайте. Еррату читать всегда полезно, особенно свежую.  В даташите ревизии J, выложенном на сайте атмела 15 декабря добавлена errata USART: RXBRK Flag error. Там описан случай, когда вместо RXBRK устанавливается framing error. P.S. Сам с этим случаем не сталкивался, так что не могу судить, подходит ли она под описанный случай или нет.
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|