|
прерывания по фронту(edge sensitive) |
|
|
|
Oct 20 2012, 13:50
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672

|
Прошу прощения за терминологию: русскую или забыл или не знал. Работаю с LPC1768. Пишу HAL- hardware abstraction layer (не знаю перевод). К своему ужасу обнаружил, что UART(перевод?) генерирует прерывания по фронту: если "Пустои передающий буфер", например, было замаскировано, то после снятия маски прерывание потеряно, даже если условие - буфер, по прежнему, пустой сохранилось. Сильно подозреваю, что то же ждет меня с другой переферией. Хочу услышать ваши советы. 1. Зачем Phillips так делает? В чем преимущества? Чем просто маски недостаточно? 2. Способы борьбы. Вдруг узнаю что-то, чего еще не знаю. Учтите, у меня за плечами более 30 лет опыта работы в СССР и США 3. Другой М3, например, Atmel SAM3... или что-то подобное. Предварительный обзор, сделаный до меня, рекомендавал NXP за лучший интерфейс с периферией. Кстати, на М3 мы переключились после провала использовать NIOS-II в среде ALTIUM TASKING. Их порт ни в какие ворота не лезит: все дырявое и корявое, хотя на бумаге все прекрасно...
Спасибо.
Сообщение отредактировал pitt - Oct 20 2012, 13:54
--------------------
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 26)
|
Oct 20 2012, 14:37
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(pitt @ Oct 20 2012, 16:50)  К своему ужасу обнаружил, что UART(перевод?) генерирует прерывания по фронту: если "Пустои передающий буфер", например, было замаскировано, то после снятия маски прерывание потеряно, даже если условие - буфер, по прежнему, пустой сохранилось. Сильно подозреваю, что то же ждет меня с другой переферией. Хочу услышать ваши советы. 1. Зачем Phillips так делает? В чем преимущества? Чем просто маски недостаточно? Из вашего поста непонятно, что вас интересует. UART или edge sensitive? Цитата(pitt @ Oct 20 2012, 16:50)  3. Другой М3, например, Atmel SAM3... или что-то подобное. Наверное все Cortex-ы имеют ошибки-недостатки. Зачем переходить на другой? Цитата(pitt @ Oct 20 2012, 16:50)  Предварительный обзор, сделаный до меня, рекомендавал NXP за лучший интерфейс с периферией. Интересно, чем это интерфейс от NXP лучше, чем другие?
|
|
|
|
|
Oct 20 2012, 15:51
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672

|
Меня UART НЕ интересует. Это просто удобный и понятный объект для обсуждения. Мой первый вопрос - попытка понять зачем и почему используется фронт, а не уровень. Не вижу никаких преимуществ, кроме недостатков. Может кто-то знает то, что я пока не знаю?
Прерывание по фронту, в том виде как оно есть, вызывает у меня серьезную изжогу, и потому, пока не поздно, ищу возможную альтернативу, а по сему, так как "все Cortex-ы имеют ошибки-недостатки" стараюсь не наступить на грабли, обтоптанные кем-то до меня. Например, STM32 имеет корявый I2C, а вот LPC в этом отношении нареканий не имеет. У меня несколько I2C devices, так что это серьезный довод. Мне нужен простой и надежный CAN и Ethernet., остальная перефирия не столь болезненна.
Не знаю точно, но предполагаю, что примеры, которые входят в состав eval-kit(а как по-русски?) легче сочетаются с документацией и более прозрачне для ЕЕ(элетронщики?), которые имеют первый голос при выборе микроконтроллера. Насколько я осведомлен, они тестируют эвал-киты инициализируя периферию(по-видимому, NXP оказался самым простым, удобным, понятным...) и на том удовлетворяются. Я embedded SOFTWARE инженер и слово SOFTWARE выделил и повторил не случайо. Электрики пишут и довольствуются кодом, а я разрабатываю программное обеспечение, а не код. Разница существенная и тема для другого отдельного топика, так что, пожалуйста, давайте не будем здесь ее обсуждать.
Сообщение отредактировал pitt - Oct 20 2012, 15:52
--------------------
|
|
|
|
|
Oct 20 2012, 16:23
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(pitt @ Oct 20 2012, 18:51)  Мой первый вопрос - попытка понять зачем и почему используется фронт, а не уровень. Не вижу никаких преимуществ, кроме недостатков. Может кто-то знает то, что я пока не знаю? В NXP считают иначе: Цитата • Each port pin can be programmed to generate an interrupt on a rising edge, a falling edge, or both. • Edge detection is asynchronous, so it may operate when clocks are not present, such as during Power-down mode. With this feature, level triggered interrupts are not needed. Прерывания по уровню на входе нет, только по фронтам. Цитата(pitt @ Oct 20 2012, 18:51)  Прерывание по фронту, в том виде как оно есть, вызывает у меня серьезную изжогу, и потому, пока не поздно, ищу возможную альтернативу, а по сему, так как "все Cortex-ы имеют ошибки-недостатки" стараюсь не наступить на грабли, обтоптанные кем-то до меня. Почему "Прерывание по фронту, в том виде как оно есть, вызывает у меня серьезную изжогу"? Что с ними не так?
|
|
|
|
|
Oct 20 2012, 16:41
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672

|
Если речь идет о внешнем прерывании, то я двумя руками "ЗА". Я могу сам определить что именно является событием: уровень или фронт, а если фронт, то какой и сам себе барин! А если, как в примере с UART то, извините, изжога. Вот пример. Есть обработчик ТХ interrupt. Есть несколько приложений, которые хотят им воспользоваться. Если мы имеем прерывание по уровню, то если буфер пустой и прерывание разрешено(размаскировано), то все, что должно сделать приложение - разрешить прерывание(убрать маску). Если маска уже убрана т.е. посылка идет, то это дело обработчика завершить посылку одного буфера, найти следущий и т.д., а если больше данных для пересылки - нет, замаскировать прерывание. Интерфейс просой и надежный. Если мы имеем дело с прерыванием по фронту, то маскировать прерывание нельзя - оно может быть потеряно, так как если в момент, когда буфер освободился(ФРОНТ) была маска, а когда маска была снята, то несмотря на то, что буфер-то пустой у нас нет фронта! Вот вам и изжога! Теперь приложение должно найти способ как инициировать прерывания. Тут сразу нужны mutexы и прочие накладные расходы, а вот зачем, когда можно все так просто... Я не хочу долго распространяться о деталях. Если Вы подумаете, то разберетесь сами, а если нет, то поверьте мне и извиняйте дядьку... Кстати, представьте себе что контролеер прерываний работал бы по фронту!!! Какая бы это была трагедия.
--------------------
|
|
|
|
|
Oct 20 2012, 18:47
|
self made
   
Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795

|
Цитата(pitt @ Oct 20 2012, 12:41)  Если маска уже убрана т.е. посылка идет, то это дело обработчика завершить посылку одного буфера, найти следущий и т.д., а если больше данных для пересылки - нет, замаскировать прерывание. А зачем его вообще маскировать? Нету данных, буфер пустой, так и прерывание возникнуть не можеть. Чего вы маскированием добиваетесь. Вообще проблемы не вижу, что вас так напрягает?
|
|
|
|
|
Oct 20 2012, 19:00
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672

|
Цитата(ar__systems @ Oct 20 2012, 14:47)  А зачем его вообще маскировать? Нету данных, буфер пустой, так и прерывание возникнуть не можеть. Чего вы маскированием добиваетесь. Вообще проблемы не вижу, что вас так напрягает? Ответ посмотрите выше! Если прерывание по фронту, то Вы совершенно правы, но когда данные есть, а фронта нет, что тогда(суть проблемы!!!)? Если по уровню, то из прерывания невозможно выйти если не замаскировать.
--------------------
|
|
|
|
|
Oct 20 2012, 19:29
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672

|
Цитата(_Артём_ @ Oct 20 2012, 15:27)  Нелегко увидеть проблему, если её нет. Особенно если смотреть в другую сторону...
--------------------
|
|
|
|
|
Oct 21 2012, 13:32
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672

|
Цитата(pitt @ Oct 20 2012, 09:50)  Прошу прощения за терминологию: русскую или забыл или не знал. Работаю с LPC1768. Пишу HAL- hardware abstraction layer (не знаю перевод). К своему ужасу обнаружил, что UART(перевод?) генерирует прерывания по фронту: если "Пустои передающий буфер", например, было замаскировано, то после снятия маски прерывание потеряно, даже если условие - буфер, по прежнему, пустой сохранилось. Сильно подозреваю, что то же ждет меня с другой переферией. Хочу услышать ваши советы. 1. Зачем Phillips так делает? В чем преимущества? Чем просто маски недостаточно? 2. Способы борьбы. Вдруг узнаю что-то, чего еще не знаю. Учтите, у меня за плечами более 30 лет опыта работы в СССР и США 3. Другой М3, например, Atmel SAM3... или что-то подобное. Предварительный обзор, сделаный до меня, рекомендавал NXP за лучший интерфейс с периферией. Кстати, на М3 мы переключились после провала использовать NIOS-II в среде ALTIUM TASKING. Их порт ни в какие ворота не лезит: все дырявое и корявое, хотя на бумаге все прекрасно...
Спасибо. Должен ли я с сожалением констатировать, что все три мои вопроса остались без ответа? Будет жаль. Кстати, вот более подробное описание проблемы http://electronix.ru/forum/index.php?showtopic=106139
Сообщение отредактировал pitt - Oct 21 2012, 16:15
--------------------
|
|
|
|
|
Oct 21 2012, 18:29
|
Знающий
   
Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725

|
Цитата(pitt @ Oct 20 2012, 15:50)  Прошу прощения за терминологию: русскую или забыл или не знал. Работаю с LPC1768. Пишу HAL- hardware abstraction laye ... Другой М3, например, Atmel SAM3... или что-то подобное. С LPC1xxx не работал, есть опыт с STM32F, SAM3 и EFM32. У них прерывания работают "по уровню": если разрешить прерывание по, например, TX для UART еще ДО передачи, то, обнаружив флаг TX, система вызовет прерывание. Если LPC1xxx действительно ведет себя по-другому, - это большая проблема для... NXP, поскольку лучше выбирать процессоры, которые ведут себя в таком вопросе как большинство.
|
|
|
|
|
Oct 21 2012, 19:05
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(KnightIgor @ Oct 21 2012, 21:29)  С LPC1xxx не работал, есть опыт с STM32F, SAM3 и EFM32. У них прерывания работают "по уровню": если разрешить прерывание по, например, TX для UART еще ДО передачи, то, обнаружив флаг TX, система вызовет прерывание. Если LPC1xxx действительно ведет себя по-другому, - это большая проблема для... NXP, поскольку лучше выбирать процессоры, которые ведут себя в таком вопросе как большинство. Ну не знаю, Cortex-M, как и все ... Цитата 34.4.2.9 Level-sensitive and pulse interrupts The processor supports both level-sensitive and pulse interrupts. Pulse interrupts are also described as edge-triggered interrupts.
|
|
|
|
|
Oct 21 2012, 20:34
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672

|
Цитата(KnightIgor @ Oct 21 2012, 14:29)  С LPC1xxx не работал, есть опыт с STM32F, SAM3 и EFM32. У них прерывания работают "по уровню": если разрешить прерывание по, например, TX для UART еще ДО передачи, то, обнаружив флаг TX, система вызовет прерывание. Если LPC1xxx действительно ведет себя по-другому, - это большая проблема для... NXP, поскольку лучше выбирать процессоры, которые ведут себя в таком вопросе как большинство. Поделитесь пожалуйста, проблемами SAM3. Про STM32F известно, что I2C кривой Спасибо Цитата(_Артём_ @ Oct 21 2012, 15:05)  Ну не знаю, Cortex-M, как и все ... В настоящий момент УТВЕРЖДАЮ, что LPC1768 UART THRE interrupt is edge sensitive, т.е по фронту. На основаниии предыдущего опыта ожидаю аналогичного поведения с CAN. Пожалуйста укажите процитированный документ иначе... Спасибо
--------------------
|
|
|
|
|
Oct 21 2012, 21:55
|
Знающий
   
Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725

|
Цитата(pitt @ Oct 21 2012, 22:34)  Поделитесь пожалуйста, проблемами SAM3. Принципиальных, кроме начальных проблем с поставками и старыми библиотеками, не вижу. Мне нравится концепция периферии SAM3, особенно PDA. А I2C там вообще делает все сам; SPI|I2S очень гибкий. SAM3U - пока единственный Cortex-M3 с High-Speed USB PHY. Цитата Про STM32F известно, что I2C кривой Верно лишь частично: интерфейс стабилен и работоспособен, если разобраться, на что нужно время. Он не кривой, он по-просту перемудренный (из-за двойной буферизации и особых случаев выдачи ACK/NACK) и не очень быстрый (1MHz появился лишь у F2xx|F4xx). STM еще не успел выдать "на гора" свою кривую синхронную библиотеку, как I2C уже летал у меня с использованием прерываний и DMA. В STM подкупает отличный "drop in replacement" по всей семье Cortex-Mx, доступность и цены: на правильно разведеную плату можно поставить как 1xx, так и вплоть до 4xx, хорошо скалируя производительность.
|
|
|
|
|
Oct 21 2012, 22:28
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672

|
Цитата(KnightIgor @ Oct 21 2012, 17:55)  Принципиальных, кроме начальных проблем с поставками и старыми библиотеками, не вижу. Мне нравится концепция периферии SAM3, особенно PDA. А I2C там вообще делает все сам; SPI|I2S очень гибкий. SAM3U - пока единственный Cortex-M3 с High-Speed USB PHY.
Верно лишь частично: интерфейс стабилен и работоспособен, если разобраться, на что нужно время. Он не кривой, он по-просту перемудренный (из-за двойной буферизации и особых случаев выдачи ACK/NACK) и не очень быстрый (1MHz появился лишь у F2xx|F4xx). STM еще не успел выдать "на гора" свою кривую синхронную библиотеку, как I2C уже летал у меня с использованием прерываний и DMA.
В STM подкупает отличный "drop in replacement" по всей семье Cortex-Mx, доступность и цены: на правильно разведеную плату можно поставить как 1xx, так и вплоть до 4xx, хорошо скалируя производительность. Спасибо. Атмел знаю по AVR а от STM получил discovery board и ... примеры кода написаны электриками, а не software professionals и поэтому наши электрики "забраковали".
--------------------
|
|
|
|
|
Oct 21 2012, 23:03
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(pitt @ Oct 22 2012, 01:28)  Атмел знаю по AVR Про АВР мы ту, наверное все знаем. Но АВР уже устарело. Цитата(pitt @ Oct 22 2012, 01:28)  а от STM получил discovery board и А мне не прислали...Ну и что? Цитата(pitt @ Oct 22 2012, 01:28)  ... примеры кода написаны электриками, а не software professionals и поэтому наши электрики "забраковали". А кто ж тогда писал примеры для LPC11? Индусские "электрики"? Или у STM ещё хуже?
|
|
|
|
|
Oct 21 2012, 23:16
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672

|
Цитата(_Артём_ @ Oct 21 2012, 19:03)  Про АВР мы ту, наверное все знаем. Но АВР уже устарело.
А мне не прислали...Ну и что?
А кто ж тогда писал примеры для LPC11? Индусские "электрики"? Или у STM ещё хуже? Старый конь борозды не потит: каждый наш продукт содержит несколько AVR8 и продолжаем под него писать! Мне неважно откуда электрики: их код видно издалека... <<Индусские "электрики">> не думают, а делают как им сказали.
--------------------
|
|
|
|
|
Oct 22 2012, 04:56
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(pitt @ Oct 21 2012, 19:32)  Должен ли я с сожалением констатировать, что все три мои вопроса остались без ответа? Будет жаль. По-моему - проблема выеденного яйца не стоит. Если при завершении передачи (нет больше данных для передачи) в ISR вы маскируете THRE, то потом, когда фоновая задача хочет записать новые даные для передачи, она делает следующее: 1. мьютекс/запрет прерываний. 2. проверка - THRE замаскировано(запрещено)? нет - переход к 5. 3. размаскируем THRE 4. заполняем TX fifo. 5. освобождение мьютекса/разрешение прерываний. Если при завершении передачи (нет больше данных для передачи) в ISR вы не маскируете THRE, а просто выходите из ISR (предварительно сбросив программный флаг "TX в процессе"), то потом, когда фоновая задача хочет записать новые даные для передачи, она делает следующее: 1. мьютекс/запрет прерываний. 2. проверяете флаг "TX в процессе". Если стоит - переход к 5. 3. уставливаем флаг "TX в процессе" 4. заполняем TX fifo. 5. освобождение мьютекса/разрешение прерываний.
|
|
|
|
|
Oct 22 2012, 07:57
|
Частый гость
 
Группа: Свой
Сообщений: 169
Регистрация: 10-11-05
Из: Воронеж
Пользователь №: 10 687

|
Цитата(KnightIgor @ Oct 22 2012, 10:54)  NXP выпендрился и избрал особый путь в генерации прерываний от флагов периферии для своих Cortex. Из моего опыта я вижу, что по крайней мере тут 1:3 не в пользу NXP в сравнении с другими тремя распространенными Cortex-Mx. Дело в том, что NXP взял за основу UART 16650. Именно эта архитектура в точности повторена в контроллерах NXP, а, как известно, на этой архитектуре десятилетиями работали компьютеры. Так что оба подхода: "классический микроконтроллерный" и от NXP имеют право на жизнь и тут еще можно поспорить какой вариант более классический и распространенный.
|
|
|
|
|
Oct 22 2012, 23:50
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672

|
Цитата(jcxz @ Oct 22 2012, 00:56)  http://electronix.ru/forum/index.php?showt...p;#entry1104736Можно и проще, и изящнее, и без мютекса! А проблема в самом наличии проблемы, где ее вообще не должно было быть! Цитата(gladov @ Oct 22 2012, 03:57)  Дело в том, что NXP взял за основу UART 16650. Именно эта архитектура в точности повторена в контроллерах NXP, а, как известно, на этой архитектуре десятилетиями работали компьютеры. Так что оба подхода: "классический микроконтроллерный" и от NXP имеют право на жизнь и тут еще можно поспорить какой вариант более классический и распространенный. А Вас не затруднит указать хотя бы одно преимущество подхода "от NXP"?
Сообщение отредактировал pitt - Oct 22 2012, 23:48
--------------------
|
|
|
|
|
Oct 24 2012, 06:05
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата(pitt @ Oct 20 2012, 17:51)  Не знаю точно, но предполагаю, что примеры, которые входят в состав eval-kit(а как по-русски?) легче сочетаются с документацией и более прозрачне для ЕЕ(элетронщики?), которые имеют первый голос при выборе микроконтроллера. Насколько я осведомлен, они тестируют эвал-киты инициализируя периферию(по-видимому, NXP оказался самым простым, удобным, понятным...) и на том удовлетворяются. Примеры, которые с eva-kit'ами, пишут не электронщики а индусы, причем самые что ни на есть software professionals, ну которые после "трехмесячных курсов переквалификации из погонщиков слонов в программисты"  Цитата Я embedded SOFTWARE инженер и слово SOFTWARE выделил и повторил не случайо. Электрики пишут и довольствуются кодом, а я разрабатываю программное обеспечение, а не код. Разница существенная и тема для другого отдельного топика, так что, пожалуйста, давайте не будем здесь ее обсуждать. Это уже на манечку похоже...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|