реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Прием передача по USARTу
Redaer
сообщение Jul 20 2006, 08:50
Сообщение #31


Участник
*

Группа: Новичок
Сообщений: 19
Регистрация: 12-07-06
Пользователь №: 18 762



Можно тоже вопрос?
Через USART1 пытаюсь организовать прием/отправку байт(ну вобщем как по теме)

Вот собсно сам код процедуры

Код
void AT91F_US_Get(void) {
  char inCh, outCh;
  AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, LED_MASK);
  AT91F_PIO_SetOutput(AT91C_BASE_PIOA, LED_MASK);

while (!AT91F_US_RxReady(AT91C_BASE_US1));
        inCh = (AT91C_BASE_US1->US_RHR) & 0x1FF;
        outCh = inCh;
        AT91C_BASE_US1->US_THR = outCh & 0x1FF;
}


В main() крутится цикл

Код
while(1) AT91F_US_Get();


Проблема в том, что отсылая, к примеру, 12 одинаковых байт через Comtest на USART1, обратно получаю неопределенное количество(8, 10, 9, очень редко 12). Даже если отсылаю по одному байту, то не всегда срабатывает ответ... Не могу найти причину...

З.Ы. Использую обработчик прерываний, который предоставил beer_warrior

Сообщение отредактировал Redaer - Jul 20 2006, 08:53
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 20 2006, 08:59
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Redaer @ Jul 20 2006, 12:50) *
З.Ы. Использую обработчик прерываний, который предоставил beer_warrior

Чьих прерываний? У Вас случайно основная программа с прерыванием за данные не дерутся?
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jul 20 2006, 09:49
Сообщение #33


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
Использую обработчик прерываний, который предоставил beer_warrior

Стоп-стоп.
1.В какой среде вы пишете? Как оформлено прерывание.
2.Вы одновременно пытаетесь пользоваться и прерыванием и поллом флажка. В чем логика.

ЗЫ Полный код желателен.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
Redaer
сообщение Jul 20 2006, 10:56
Сообщение #34


Участник
*

Группа: Новичок
Сообщений: 19
Регистрация: 12-07-06
Пользователь №: 18 762



Пытаюсь прогать в IAR...
Прочитал всю тему и возникла просьба...
beer warrior, не могли бы Вы выложить, в дополнение к USARTinterrupt и InitUSART, ещё и процедуры отправки и получения данных... Ну тупо не получается у меня...
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jul 20 2006, 11:29
Сообщение #35


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Ну что вам сказать... Весь код присутвует в ветке.Работа ведеться по PDC. Пока PDC включен все принятые символы падают в буфер на который он указывает. По достижении длины буфера ставиться флаг ENDRX, срабатывает прерывание, и там уже или подставляется следующий буфер или обрабатываеться текущий.
Для передачи заполняеться буфер, ставится его длина.С этого момента он живет своей жизнью до момента обнуления счетчика.
Тогда ставится флаг ENDTX. Вобщем все как у восьмибитников, только передача не побайтная, а сразу буферами.
Еще раз просмотрите пост №12.

PS
1.В ИАРе функция прерывания объявляется по-своему.
2.Избегайте lib_SAM64.h там полно ошибок.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th August 2025 - 22:32
Рейтинг@Mail.ru


Страница сгенерированна за 0.01461 секунд с 7
ELECTRONIX ©2004-2016