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

 
 
 
Reply to this topicStart new topic
> DBGU 115200 и PIT
nachinayuschiy
сообщение Jul 4 2009, 22:43
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 11-09-08
Пользователь №: 40 123



Здравствуйте. У меня возникла следующая проблема.
У меня в проекте настроен PIT для целей RTOS (период - 1 мс)
Так же мне нужно сконфигурировать DBGU на частоту 115200.

Код
__arm void Handler(void) {
    
    unsigned long status;
    unsigned long status_dbgu;    
    
      status = AT91C_BASE_PITC->PITC_PISR;
      status_dbgu = AT91C_BASE_DBGU->DBGU_CSR;

      
      if (status_dbgu & AT91C_US_RXRDY) {
        AT91C_BASE_DBGU->DBGU_RHR;
        zzz_cnt++;
      }
            
      if(status & AT91C_PITC_PITS)
      {  
        AT91C_BASE_AIC->AIC_IVR  = 0;                              
    
        status                   = AT91C_BASE_PITC->PITC_PIVR;
        (void)status;                                              
        
        OSTimeTick();      
      }  
  }


В общем если DBGU настроить на 9600, то при отправке в порт 2800 байт, переменная zzz_cnt становиться равна как и должна 2800.
Но вот если я конфигурирую на 115200, то после отправки 2800 байт, переменная равна 179-182 байта. В чем может быть причина данного глюка?
Помогите решить данную проблему. Заранее благодарен.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 4 2009, 22:58
Сообщение #2


Гуру
******

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



Чтобы принимать поток 115200, латентность прерывания DBGU должна быть меньше 87мкс. Вы уверены, что она обеспечивается?
Go to the top of the page
 
+Quote Post
nachinayuschiy
сообщение Jul 4 2009, 23:00
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 11-09-08
Пользователь №: 40 123



Код
__arm void Handler(void) {
    
    unsigned long status;
    unsigned long status_dbgu;    
    
      status = AT91C_BASE_PITC->PITC_PISR;
      status_dbgu = AT91C_BASE_DBGU->DBGU_CSR;

      
      if (status_dbgu & AT91C_US_RXRDY) {
        AT91C_BASE_DBGU->DBGU_RHR;
        zzz_cnt++;
      }            

  }


Обеспечивает. Вот такой вот код успешно работает.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 4 2009, 23:06
Сообщение #4


Гуру
******

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



Цитата(nachinayuschiy @ Jul 5 2009, 03:00) *
Обеспечивает. Вот такой вот код успешно работает.

Если такой код успешно работает, то предыдущий, очевидно, не обеспечивает. Т.е. OSTimeTick() выполняется слишком долго.
Go to the top of the page
 
+Quote Post
nachinayuschiy
сообщение Jul 4 2009, 23:18
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 11-09-08
Пользователь №: 40 123



Тогда прямо в этой теме хочу спросить. Если таким образом данные принимать не получиться. Тогда остаеться PDC. Хочу спросить.
В общем когда я заношу данные в RCR и RNCR. И допустим счетчик RCR досчитал но нуля, и начал считать RNCR и в это время счетчик RCR снова установить, то по завершению счета RNCR счет возобновиться снова с RCR?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 4 2009, 23:23
Сообщение #6


Гуру
******

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



У DBGU, увы, нет PDC. Когда RCR досчитает до нуля, он будет перезагружен из RNCR, т.е. устанавливать нужно будет каждый раз RNCR.
Go to the top of the page
 
+Quote Post
nachinayuschiy
сообщение Jul 4 2009, 23:27
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 11-09-08
Пользователь №: 40 123



Вот только не пойму как его нет... Если я его в своей программе использую smile.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 4 2009, 23:31
Сообщение #8


Гуру
******

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



Может, я чего упустил? Процессор какой?
Go to the top of the page
 
+Quote Post
nachinayuschiy
сообщение Jul 4 2009, 23:32
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 11-09-08
Пользователь №: 40 123



SAM7S256
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 4 2009, 23:35
Сообщение #10


Гуру
******

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



Да, что-то у меня заклинило. Ну, тем лучше для вас.
Go to the top of the page
 
+Quote Post
nachinayuschiy
сообщение Jul 5 2009, 00:42
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 11-09-08
Пользователь №: 40 123



В общем если я вас правильно понял, что для того что бы PDC сделать непрерывным, нужно выставить RCR и RNCR, а затем после выполнения прерывания ENDRX постоянно менять RNCR. Правильно я размышляю?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 5 2009, 01:44
Сообщение #12


Гуру
******

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



Да, правильно. К сожалению, у DBGU нет прерывания по таймауту, что несколько усложняет жизнь.
Go to the top of the page
 
+Quote Post
nachinayuschiy
сообщение Jul 5 2009, 06:44
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 11-09-08
Пользователь №: 40 123



А какое ещё прерывание по таймеру? В PDC вроде никаких прерываний по таймеру нет smile.gif Что-то я запутался, буду разбираться smile.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 5 2009, 12:06
Сообщение #14


Гуру
******

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



Прерывание не у PDC, а у UART'а. Если данные кончатся, а приемный буфер будет заполнен не до конца, то в случае DBGU никаких событий сгенерировано не будет. У нормального UART'а при этом можно сгенерировать прерывание по таймауту.
Go to the top of the page
 
+Quote Post
nachinayuschiy
сообщение Jul 5 2009, 14:26
Сообщение #15


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 11-09-08
Пользователь №: 40 123



С этим согласен. DBGU обрезали до безобразия )
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 28th June 2025 - 11:35
Рейтинг@Mail.ru


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