Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Прерывание EINT0, Keil, LPC2388
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
yakub_EZ
Процессор - LPC2388, но среда Keil мюВижн4
Отрабатываю прерывания. В книге Марина написано, что надо менять строчку в стартап коде у метки необходимого прерывания, приложенных к книге примерах вектор оставлен в неизменном виде. У меня этот пример не компилируется
После компиляции своего кода и запуска в режиме отладки программа успешно проходит инициализацию и как положенно, вылетает в пустой цикл. Далее, в режиме debug, открываю вкладку переферии на Vectored Interrupt Controller, на 14 строчке в EINT0 ставлю галочку в квадратик SoftInt, после чего программа переходт на строку
Код
FIQ_Handler     B       FIQ_Handler
, где останавливается в пустом цикле.
текст программы:
Код
#include <LPC23xx.H>                       /* LPC23xx definitions */


int main (void)
{


  IODIR1 = 0x00FF0000;                     /* P1.16..23 defined as Outputs */
  PINSEL4 = 0x00100000;                      /*   enable EINT0     */

  VICIntSelect =  0x00004000;              /*   enable EINT0     */
  VICIntEnable =  0x00004000;              /*   enable EINT0     */

  IOCLR1 =      0x00FF0000;

  while (1)
   {                             /* Loop forever */
          
  
  }
}

  void FIQ_Handler (void)
{
    IOSET1 =   0x00FF0000;
    EXTINT =   0x00000002;
}


Пробовал добавлять в стартрап в строку метки FIQ_Handler окончание ?A, напротив void FIQ_Handler (void) добавлял __fiq.Не помогает.
Где ошибка, подскажите ?
yakub_EZ
Нормального решения не нашел. Решил в лоб, вбив в строку вектора адрес
Код
FIQ_Handler     B       0x00000378

Где 0x00000378 адрес строки где находится IOSET1 = 0x00FF0000; который расположен внутри void FIQ_Handler (void). Поиск нормального решения ещё актуален. Почему то конструкция __irq __fiq из старых версий не воспринимается мювижн 4-ой версии
ASZ
Цитата(yakub_EZ @ Nov 18 2010, 23:00) *
Нормального решения не нашел. Решил в лоб, вбив в строку вектора адрес
Код
FIQ_Handler     B       0x00000378

Где 0x00000378 адрес строки где находится IOSET1 = 0x00FF0000; который расположен внутри void FIQ_Handler (void). Поиск нормального решения ещё актуален. Почему то конструкция __irq __fiq из старых версий не воспринимается мювижн 4-ой версии

У Мартина коды под CARM. Под RealView MDK они не проходят.
А по теме - в Startup.s нужно сделать следующие изменения:
Код
;
       IMPORT  Your_FIQ_Handler  ;Эквивалент extrn
Reset_Addr      DCD     Reset_Handler
Undef_Addr      DCD     Undef_Handler
SWI_Addr        DCD     SWI_Handler
PAbt_Addr       DCD     PAbt_Handler
DAbt_Addr       DCD     DAbt_Handler
                DCD     0                     ; Reserved Address
IRQ_Addr        DCD     IRQ_Handler
FIQ_Addr        DCD     Your_FIQ_Handler           ;Ваш обработчик
yakub_EZ
Спасибо, заработало. smile.gif Откуда можно узнать подробности и тонкости именно для RealView MDK?
ASZ
Цитата(yakub_EZ @ Nov 19 2010, 10:13) *
Спасибо, заработало. smile.gif Откуда можно узнать подробности и тонкости именно для RealView MDK?

К сожалению, в целом, как у Мартина, нигде. Все по крупицам из appnotes сайта Keil и ARM.
Учтите, что даже в appnotes Keil очень много примеров под CARM, который сейчас не используется.

Удачи! smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.