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

 
 
> Интересное поведение EMAC на LPC17xx
Rst7
сообщение Jun 15 2011, 11:40
Сообщение #1


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Очень занятное поведение флага INTSTATUS_bit.RXDONEINT обнаружилось.

Разрешено только прерывания RXDONEINT. Там такой код:
CODE
void Ethernet_IRQHandler(void)
{
  UREG i='0';
  do
  {
    INTCLEAR=1UL<<3; //RxDoneInt
    i++;
  }
  while(INTSTATUS_bit.RXDONEINT);
  usart0_txc(i);
  NVIC_ClrPend(NVIC_ETHR);
  NVIC_SetPend(NVIC_RIT); //Ñòàðòóåì RIT_IRQHandler
}


Неспеша кормлю девайсу по одному пакету (дабы быть уверенным, что никакого переполнения не происходит). В результате в консоль сыпется:

CODE
122212112121121112122222222112112211212222222121111....


Пуристы для тестов могут заменить usart0_txc на ногодрыг и наблюдать осциллографом тот же результат - импульсов то 1, то 2.

Если бы просто сделать
CODE
void Ethernet_IRQHandler(void)
{
  INTCLEAR=1UL<<3; //RxDoneInt
  NVIC_ClrPend(NVIC_ETHR);
  NVIC_SetPend(NVIC_RIT); //Ñòàðòóåì RIT_IRQHandler
}

то этот код часто (а то и вообще всегда) вызывается 2 раза - не сбрасывается флаг RxDoneInt, соответственно, сброс соответствующего бита в NVIC не помогает - не снят изначальный флаг, т.е. происходит опять поднятие флага в NVIC и последующее прерывание. Правда, на второй заход сброс таки происходит.

Вот такой код вроде (ну ибо на обозримом отрезке времени мне не удалось наблюдать двойной вызов) всегда вызывается один раз:
CODE
void Ethernet_IRQHandler(void)
{
  INTSTATUS;
  __no_operation();
  __no_operation();
  __no_operation();
  __no_operation();
  __no_operation();
  __no_operation();
  INTCLEAR=1UL<<3;//RxDoneInt
  NVIC_ClrPend(NVIC_ETHR);
  NVIC_SetPend(NVIC_RIT); //Ñòàðòóåì RIT_IRQHandler
}


Ересь какая-то в общем. Другие биты не проверял.

Есть у кого какие мысли?

В общем-то такое поведение и не особо страшно, но уж очень стремно biggrin.gif


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Rst7   Интересное поведение EMAC на LPC17xx   Jun 15 2011, 11:40
- - VslavX   Цитата(Rst7 @ Jun 15 2011, 14:40) Очень з...   Jun 15 2011, 12:05
- - Rst7   QUOTE Мне кажется что у него какой-то внутренний с...   Jun 15 2011, 12:41
|- - VslavX   Цитата(Rst7 @ Jun 15 2011, 15:41) Так тут...   Jun 15 2011, 14:13
- - aaarrr   А если dsb вставить после записи INTCLEAR?   Jun 15 2011, 13:00
- - GetSmart   Цитата(Rst7 @ Jun 15 2011, 16:40) Разреше...   Jun 15 2011, 13:27
- - alag57   Цитатаwhile(INTSTATUS_bit.RXDONEINT); Посмотрите с...   Jun 15 2011, 13:46
- - Rst7   QUOTE А если dsb вставить после записи INTCLEAR? ...   Jun 15 2011, 14:04
- - Rst7   QUOTE Не совсем то же самое - Вы цупите INTCLEAR. ...   Jun 15 2011, 14:22
- - gladov   Цитата(Rst7 @ Jun 15 2011, 15:40) Кодvoid...   Jun 16 2011, 04:29
- - andrewlekar   Я в LPC1768 не смог победить их работу с прерывани...   Jun 16 2011, 05:32
- - Rst7   QUOTE поэтому есть лишь догадка Я так тоже думал....   Jun 16 2011, 05:56
- - andrewlekar   ЦитатаА что его побеждать? Оно работает. А у меня ...   Jun 17 2011, 04:22
|- - Slowhan   Люди, а каких вы скоростей на Lpc17 достигаете по ...   Jul 21 2011, 13:30
- - Rst7   QUOTE Люди, а каких вы скоростей на Lpc17 достигае...   Jul 21 2011, 14:37
- - Vitaliy_ARM   Цитата(Rst7 @ Jul 21 2011, 18:37) Смотря ...   Jul 28 2011, 13:15


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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 14:49
Рейтинг@Mail.ru


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