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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> AT90USB1287 не отрабатывает внешние прерывания, В чем дело?
fmdost
сообщение Aug 7 2008, 00:44
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 479
Регистрация: 8-05-07
Из: г. Ставрополь. Северный Кавказ. Россия
Пользователь №: 27 606



По уровню? То-есть если на порту INTx = 0, то застрянет в прерывании? Так и надо? (Код не смотрел).
Поставте по переходу в 0.
Go to the top of the page
 
+Quote Post
alux
сообщение Aug 7 2008, 05:00
Сообщение #17


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(Т.Достоевский @ Aug 7 2008, 03:44) *
если на порту INTx = 0, то застрянет в прерывании
Я уже говорил, что пробовал разные варианты (по фронту, спаду, по уровню). Не в этом дело. Читайте внимательно посты.

Цитата(SysRq @ Aug 7 2008, 02:20) *
Хм. Поставил под VirtualBox'ом на XPFundamentals себе IAR (30 дней триал) посмотреть что за зверь и за что его все любят smile.gif , собрал такой код:
.............
При отладке в AVRStudio прерывание работает правильно! В опциях проекта ничего не менял, кроме установки --cpu=usb1287.
Сделал то же самое (этот же пример кода, IAR v.5.11B, ubrof8) - не работает!!! Кто то из нас двоих не прав!
Go to the top of the page
 
+Quote Post
SysRq
сообщение Aug 7 2008, 05:53
Сообщение #18


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(alux @ Aug 7 2008, 09:00) *
Сделал то же самое (этот же пример кода, IAR v.5.11B, ubrof8) - не работает!!! Кто то из нас двоих не прав!



Проект: http://stream.ifolder.ru/7620130

*тут смайл, который руками разводит*
Go to the top of the page
 
+Quote Post
alux
сообщение Aug 7 2008, 09:01
Сообщение #19


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Проверить проект смогу вечером. Пока могу предположить две версии:
1) различия триальной и "вылеченной" версии IAR; (маловероятно)
2) вспомнил, что я раскомментировал определения PE0...PE7 в файле iousb1287.h; (более вероятно)
Это вызывало конфликт имени с PE1 (USART1). Я исправил PE1 на UPE1. Но, возможно, это еще на что-то повлияло. Надо проверить.
Go to the top of the page
 
+Quote Post
sKWO
сообщение Aug 7 2008, 10:12
Сообщение #20


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Цитата(alux @ Aug 7 2008, 12:01) *
Проверить проект смогу вечером. Пока могу предположить две версии:
1) различия триальной и "вылеченной" версии IAR; (маловероятно)

не моловероятно, а исключено.
вылеч версия 4.21А нормально компилит и всё работает на ура.
Проджект прикрепляю.

Цитата(SysRq @ Aug 7 2008, 02:20) *
[code]
#define INT6 6 // почему-то пришлось задать вручную; видимо, с IAR с разбегу не разобрался
#define INTF6 6 // почему-то пришлось задать вручную; видимо, с IAR с разбегу не разобрался

SysRq, это всё решается настройками прожекта
Project\Options, на закладке General Options находим System, и здесь ставим галочку
напротив Enable bit definitions in I\O-include file.
Прикрепленные файлы
Прикрепленный файл  1287.rar ( 13.29 килобайт ) Кол-во скачиваний: 28
 


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
alux
сообщение Aug 7 2008, 10:16
Сообщение #21


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(sKWO @ Aug 7 2008, 13:12) *
не моловероятно, а исключено.
вылеч версия 4.21А нормально компилит и всё работает на ура.
Остается версия номер 2.

PS. Если не трудно, проверьте эту версию у себя. Т.е. в файле iousb1287.h раскомментировать определения для PE0...PE7 и изменить PE1 на UPE1.
Go to the top of the page
 
+Quote Post
SysRq
сообщение Aug 7 2008, 14:08
Сообщение #22


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(alux @ Aug 7 2008, 14:16) *
...раскомментировать определения для PE0...PE7 и изменить PE1 на UPE1.
На этом тестовом коде эти изменения никак не отражаются, все работает.

--

Цитата(sKWO @ Aug 7 2008, 14:12) *
SysRq, это всё решается настройками прожекта
Благодарю! Этот пример выше был написан сильно с разбегу - за две минуты с момента установки IAR'а; сейчас я уже в курсе немного :)
Go to the top of the page
 
+Quote Post
alux
сообщение Aug 7 2008, 15:25
Сообщение #23


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(SysRq @ Aug 7 2008, 17:08) *
На этом тестовом коде эти изменения никак не отражаются, все работает.

У меня с этими изменениями все-равно не работает sad.gif . Остается еще одно различие: у меня AVRStudio v.4.13. Качаю последнюю v.4.14. Там пофиксено:
Код
7163: The simulator subscripts for AT90USB128/64 and AT90USB162/82 have been fixed.
Хотя, на мой взгляд, это вряд ли поможет. Ведь в железе не работает!

Цитата(sKWO @ Aug 7 2008, 13:12) *
вылеч версия 4.21А нормально компилит и всё работает на ура.
Проджект прикрепляю.
У меня ни этот проект (у Вас AVRStudio какой версии?)
Цитата(SysRq @ Aug 7 2008, 08:53) *
... ни этот проект НЕ РАБОТАЕТ!!!
Это было бы смешно, если б не было так печально. Почему у меня не работают прерывания?

PS. Проблема решилась установкой последней версии AVRStudio v4.14 build 589. По крайней мере в симуляторе уже стал вызываться обработчик внешнего прерывания.
Спасибо всем за помощь.
Go to the top of the page
 
+Quote Post
SysRq
сообщение Aug 7 2008, 18:17
Сообщение #24


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



А в железе? smile.gif

Сообщение отредактировал SysRq - Aug 7 2008, 18:18
Go to the top of the page
 
+Quote Post
alux
сообщение Aug 7 2008, 19:25
Сообщение #25


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(SysRq @ Aug 7 2008, 21:17) *
А в железе? smile.gif
Именно этот тестовый пример работает. smile.gif
А с моим большим проектом буду разбираться дальше...
Go to the top of the page
 
+Quote Post
alux
сообщение Aug 8 2008, 18:58
Сообщение #26


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Обработчик внешнего прерывания не вызывается из-за OS::Run();
Код
void main()
{
........................
  TCCR0B = 0x03;          // Start System Timer f_clk/64
  TIMSK0 |= (1<<TOIE0);   // Разрешить прерывания Timer0 по переполнению (OVF)
                          
  OS::Run();        // Период переполнения Timer0 при f_clk=7.3728 Mhz 2.222 ms
}

#pragma vector=INT6_vect
OS_INTERRUPT void INT6_ISR()
{
  OS::TISRW_SS ISRW;

  DISABLE_INT6;            // Prevent further external interrupts

  Int6.SignalISR();  

  PORTC |= (1<<BEEP);   // <<<<<<<<< Это для контроля входа в прерывание
}
А почему, не пойму никак. Раньше на Mega324P работало нормально... 05.gif

Этот вопрос скорее к отцам операционной системы scmRTOS.

PS. Проблема решилась опять-таки установкой последней версии scmRTOS v.3.05 smile.gif
Причина была скорее всего из-за следующего Bugfixes:
Код
EWAVR port: support for devices with more then 64 kbytes flash added in target assembler file.
Go to the top of the page
 
+Quote Post
alux
сообщение Sep 4 2008, 15:38
Сообщение #27


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Снова проблема с внешним прерыванием. На этот раз при входе в POWER_DOWN не выходит из него при нажатии на кнопку. Сигнал внешнего прерывания от клавиатурной матрицы 4х4 подключен через аноды диодов на PE6(INT6). Прерывание INT6 настроено на low level. Вот пример кода:
Код
// Sleep Functions
#define SELECT_IDLE         SMCR &= ~((1<<SM0)|(1<<SM1)|(1<<SM2)) // Idle mode
#define SELECT_ADC          SMCR |= (1<<SM0)                      // ADC Noise Reduction Mode
#define SELECT_POWERDOWN    SMCR |= (1<<SM1)                      // Macro to select powerdown sleep mode
#define SELECT_POWERSAVE    SMCR |= (1<<SM0)|(1<<SM1)             // Power Save Mode
#define SELECT_STANDBY      SMCR |= (1<<SM1)|(1<<SM2)             // Standby Mode
#define SELECT_EXT_STANDBY  SMCR |= (1<<SM0)|(1<<SM1)|(1<<SM2)    // Extended Standby Mode

#define SLEEP_ENABLE        SMCR |= (1<<SE)    // Set the SE (sleep enable) bit
#define SLEEP_DISABLE       SMCR &= ~(1<<SE)   // Clear the SE (sleep enable) bit


int main()
{
................................
  SLEEP_ENABLE;
  SELECT_IDLE;

__enable_interrupt();    // set the Global Interrupt Enable Bit
  
  TCCR0B = 0x03;        // Start System Timer f_clk/64
  TIMSK0 |= (1<<TOIE0);   // Разрешить прерывания Timer0 по переполнению (OVF)
                    // Период переполнения Timer0 при f_clk=7.3728 Mhz 2.222 ms
  OS::Run();            
}


void TLCD::OnOff(bool On)
{
  if(On)  {;}
  else
  {
...............................................
    PORTD |= (1<<SHDN);     // Отключить аналоговую периферию
    //TIMSK0 &= ~(1<<TOIE0);
    SELECT_POWERDOWN;
    __sleep();
    
    SELECT_IDLE;
    //TIMSK0 |= (1<<TOIE0);
    PORTD &= ~(1<<SHDN);    // Включить аналоговую периферию
  }
По команде __sleep() входит в POWER_DOWN. Это подтверждает снижение токопотребления и высокий уровень на SHDN. Но почему не просыпается при нажатии на кнопку, не могу понять. wacko.gif .. Перепад в "0" на INT6 при нажатии наблюдаю тестером.

PS. В errata есть замечание по поводу:
2. High current consumption in sleep mode
If a pending interrupt cannot wake the part up from the selected mode, the current consumption
will increase during sleep when executing the SLEEP instruction directly after a SEI
instruction.

Problem Fix/workaround
Before entering sleep, interrupts not used to wake up the part from the sleep mode should
be disabled.

У меня используется прерывание таймера0. Но запрещение перед входом в режим и разрешение по выходу из режима Power_Down не решает проблему.
Какие будут предположения по данной проблеме?
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Sep 4 2008, 18:55
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Надеюсь вы учли, что просыпаться только Only "INT3:0 or level interrupt INT7:4"
Go to the top of the page
 
+Quote Post
alux
сообщение Sep 5 2008, 06:12
Сообщение #29


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(SasaVitebsk @ Sep 4 2008, 21:55) *
Надеюсь вы учли, что просыпаться только Only "INT3:0 or level interrupt INT7:4"

Повторю еще раз. Прерывание INT6 настроено на low level.

PS. По даташиту AT90USB1287 : Wake-up Sources from Power-down -> For INT7:4, only level interrupt.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Sep 5 2008, 07:33
Сообщение #30


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(alux @ Sep 4 2008, 18:38) *
Код
int main()
{
................................
  SLEEP_ENABLE;
  SELECT_IDLE;

__enable_interrupt();    // set the Global Interrupt Enable Bit
  
  TCCR0B = 0x03;        // Start System Timer f_clk/64
  TIMSK0 |= (1<<TOIE0);   // Разрешить прерывания Timer0 по переполнению (OVF)
                    // Период переполнения Timer0 при f_clk=7.3728 Mhz 2.222 ms
  OS::Run();            
}

не читал, но осуждаю
пролетая над Череповцом
Пробегая мимо интернета нет времени внимательно вчитываться во всю тему, поэтому по теме ответить могу лишь то, что в той старой теме "не всё чисто" было не с прерываниями у 90usb, а с "очиткой".
Автором были спутаны INT7 и PCINT7.

Не по основной теме:
не рекомендую разрешать прерывания до запуска OS::Run() - потребности в этом нет, а что-то левое может и вылезти.
Прерывания разрешаются автоматически в конце переключения на первый выполняемый процесс, так как стек каждого процесса инициализируется конструктором таким образом, что в нём сидит образ статусного регистра с установленным битом разрешения прерываний, таким образом при первом переключении на процесс "восстанавливается" SREG.I == 1 и прерывания разрешены.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post

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

 


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


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