Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

lpc2478 не работают прерывания

Непрочитано 18.12.2011, 01:49  
SasaVitebsk
Гражданин KAZUS.RUN
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: lpc2478 не работают прерывания

У меня в проекте под LPC2478 всё несколько сложнее ...

install_irq( TIMER0_INT, (void *)Timer0Handler, HIGHEST_PRIORITY )

Почему-то не подгружаются файлы .zip.
Оставьте адрес - вышлю на почту
Реклама:

Последний раз редактировалось SasaVitebsk; 18.12.2011 в 01:56.
SasaVitebsk вне форума  
Непрочитано 18.12.2011, 02:56  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: lpc2478 не работают прерывания

Работаете с филипсом? Тогда мы идем к вам!
Easyrider83 вне форума  
Непрочитано 18.12.2011, 09:58  
coma_nder
Гость
 
Сообщений: n/a
По умолчанию Re: lpc2478 не работают прерывания

SasaVitebsk, вот этого я и не вижу. Т.е. в заданный адрес он записывает значение при инициализации, в VICCECADDRES - нет. Вот в итоге и считывает оттуда 0. Моя почта [email protected]
 
Непрочитано 19.12.2011, 20:47  
SasaVitebsk
Гражданин KAZUS.RUN
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: lpc2478 не работают прерывания

Сообщение от coma_nder Посмотреть сообщение
SasaVitebsk, вот этого я и не вижу. Т.е. в заданный адрес он записывает значение при инициализации, в VICCECADDRES - нет. Вот в итоге и считывает оттуда 0.
Кто "он"? Это вы должны записывать. Кто, интересно, за вас запишет адрес?
SasaVitebsk вне форума  
Непрочитано 20.12.2011, 07:49  
coma_nder
Гость
 
Сообщений: n/a
По умолчанию Re: lpc2478 не работают прерывания

SasaVitebsk, понятно, что в регистры адреса и приоритета я сам записываю адрес функции обработчика прерываний и ее приоритет соответственно. Отладчиком я это и вижу, что например в VicVectAdr2 и VicPrior2 происходит запись. А вот где происходит считывание этого регистра адреса и запись в VICCECADDRES я понять не могу.
 
Непрочитано 20.12.2011, 11:00  
SasaVitebsk
Гражданин KAZUS.RUN
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: lpc2478 не работают прерывания

Сообщение от coma_nder Посмотреть сообщение
А вот где происходит считывание этого регистра адреса и запись в VICCECADDRES я понять не могу.
Это же ARM7. Здесь всё просто ... Контроллер VIC несколько не доделан, по моим понятиям ...
===
Как и всегда в программировании, вы можете поступить 10 способами ... но от этого и будет зависеть результат.
При возникновении IRQ (не FIQ) контроллер вылетает по адресу IRQ. Вы можете прочитать вектор и осуществить переход сами ... Похоже, в приведенном вами примере так и делается ...
Но если использовать тот cstartup что я вам выслал на почту, то этого делать не требуется вообще ... в следующей строке этого файла
Код:
        ;LDR     PC,IRQ_Handler          ; IRQ        
        LDR     PC,[PC,#-0x120]         ; IRQ *** вот здесь
осуществляется косвенный переход (загрузка счётчика команд) по вектору. Где 120 есть адрес смещения на вектора. Я например её сам высчитывал. Для lpc2106, к примеру, здесь будет стоять другой адрес ...
Собственно не заморачивайтесь. Суть в том, что по этой одной команде вы сразу перейдёте на вектор обработчика, в зависимости от вызванного прерывания. То есть следующей после этой команды будет ваш обработчик. Если у вас lpc2478!

Обратите внимание на закоментированную строчку. Если вы её раскоментируете, а закоментируете вторую, то у вас будет класический единый обработчик IRQ. На мой взгляд это не удобно. Фактически с этим файлом вы получаете полноценный контроллер прерываний. С учётом вызвавшего прерывания, вы сразу переходите на его обработчик.
Блин, надеюсь я доступно разжевал?

Обратите внимание, что для FIQ у вас всё равно один обработчик. Поэтому вы либо должны программно определить источник и перейти на обработчик, либо, оставить лишь один обработчик в качестве высокоприоритетного. Я поступаю вторым способом. На мой взгляд предпочтительно былобы иметь не более одного уровня вложенности, при таком контроллере прерываний.

В завершение отмечу, что в cortex-m3 полноценный контроллер, который является частью ядра. Он поддерживает многоуровневую вложенность и приоритеры. Там заморачиваться на надо.
SasaVitebsk вне форума  
Непрочитано 29.01.2013, 13:02  
Ivan_01
Прохожий
 
Регистрация: 29.01.2013
Сообщений: 7
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Ivan_01 на пути к лучшему
По умолчанию Re: lpc2478 не работают прерывания

Доброго дня.. сижу с аналогичной проблемой. Пишу на C++ под LPC2478. Настроил прерывания функцией такой

Код:
void VIC_SetVectoredIRQ( void(*pIRQSub)(), unsigned int Priority, unsigned int VicIntSource)
{
unsigned long volatile *pReg;
  // load base address of vectored address registers
  pReg = &VICVECTADDR0;
  // Set Address of callback function to corresponding Slot
  *(pReg+VicIntSource) = (unsigned long)pIRQSub;
  // load base address of ctrl registers
  pReg = &VICVECTPRIORITY0;
  // Set source channel and enable the slot
  *(pReg+VicIntSource) = Priority;
  // Clear FIQ select bit
  VICINTSELECT &= ~(1‹‹VicIntSource);
}
настраивал так (Timer0_IRQ - ф-ия, которую нужно вызвать по прерыванию)

Код:
VIC_SetVectoredIRQ( Timer0_IRQ, 0x02, VIC_TIMER0 );
VICINTENABLE |= TMR0_MASK;
Настройки памяти такие
.intvec start = 0
ROM = 0x0 - 0x7FFFF
RAM = 0x40000000 - 0x7FFFFFFF

в дебаге включено use flash loader с дефолтными настройками

В итоге в момент прерывания вижу следующую ситуацию:
Адрес ф-ии Timer0_IRQ = 0x3A2
в дизассемблере
VICVECTADDDR4 (0xFFFF F110) = 0x0000 03A3
VICADDRESS = 0x0000 03A3
VICINTENABLE = 0x0000 0010
VICRAWINTR = 0x0000 2018
VICSOFTINT = 0x0000 0000
PC = 0x18 - туда влетаю, когда случается IRQ, как я понял. При указанном положении .ivect start = 0.

Дальше - почему-то как я ни ужимался, все равно по адресу 0x18 осуществляется переход:
LDR PC,[PC,#0x14]

вот что творится в таблице прерываний
Код:
          0x0: 0xe59ff018     LDR       PC, [PC, #0x18]         ; [0x20] __iar_program_start
          0x4: 0xe59ff018     LDR       PC, [PC, #0x18]         ; [0x24] Abort_Handler
          0x8: 0xe59ff018     LDR       PC, [PC, #0x18]         ; [0x28] Abort_Handler
          0xc: 0xe59ff018     LDR       PC, [PC, #0x18]         ; [0x2c] Abort_Handler
         0x10: 0xe59ff018     LDR       PC, [PC, #0x18]         ; [0x30] Abort_Handler
         0x14: 0xb8a06f60     STMLT     R0!, {R5, R6, R8-R11, SP, LR}
         0x18: 0xe59ff014     LDR       PC, [PC, #0x14]         ; [0x34] Abort_Handler
         0x1c: 0xe59ff014     LDR       PC, [PC, #0x14]         ; [0x38] Abort_Handler
         0x20: 0x000004a8     DC32      __iar_program_start
         0x24: 0x00000614     DC32      Abort_Handler
         0x28: 0x00000614     DC32      Abort_Handler
         0x2c: 0x00000614     DC32      Abort_Handler
         0x30: 0x00000614     DC32      Abort_Handler
         0x34: 0x00000614     DC32      Abort_Handler
         0x38: 0x00000614     DC32      Abort_Handler
         0x3c: 0xffffffff     MRC2      p15, #7, PC, C15, C15, #7
         0x40: 0xffffffff     MRC2      p15, #7, PC, C15, C15, #7
         ...

и я улетаю на что-то помеченное в дизассемблере как Abort_Handler. При чем там же стоят метки FIQ_Handler, IRQ_Handler, Prefetch_Handler.

Прошу, может у кого есть предположения, где я лажанулся? а то мозг уже вскипает.
Как-то можно привязать функцию к адресу 0x18 для централизованной обработки всех IRQ?

Последний раз редактировалось Ivan_01; 29.01.2013 в 17:45.
Ivan_01 вне форума  
Непрочитано 30.01.2013, 07:49  
pambaru
Почётный гражданин KAZUS.RUN
 
Регистрация: 24.03.2007
Сообщений: 1,394
Сказал спасибо: 85
Сказали Спасибо 671 раз(а) в 392 сообщении(ях)
pambaru на пути к лучшему
По умолчанию Re: lpc2478 не работают прерывания

Вот мой код инициализации прерываний от таймера (LPC2468 ).
Среда Keil.
Вроде все работает.

Код:
__irq void  TM0_Handler (void){
// само прерывание
//........................
T0IR |=1;
VICVectAddr=0;
}

void initints(void) {
VICVectAddr4=(unsigned)TM0_Handler;
VICVectCntl4=0x02;	 //приоритет

T0MR0=140; //1125 Гц
T0MCR=0x03;	//сброс и прерывание по достижению T0MR0
T0PR=15; //prescaler = 16
T0TCR=0x02; //сброс

T0TCR=0x01; //пуск


VICIntSelect=0x00;// все прерывания как IRQ
VICIntEnable=(1‹‹4); //разрешаем TM0
}
pambaru вне форума  
Непрочитано 30.01.2013, 13:33  
Ivan_01
Прохожий
 
Регистрация: 29.01.2013
Сообщений: 7
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Ivan_01 на пути к лучшему
По умолчанию Re: lpc2478 не работают прерывания

Благодарствую за код. Пересел с IAR на KEIL. Он цветной..) Подскажи пожалста, как его настроить нормально? а то пол-дня уже бьюсь головой в монитор. Дальше стартапа программулина не идет, глохнет где-то по адресу 0x614 на странной инструкции перехода по адресу 0x614.
Подозреваю, что где-то не так указал память.

использую это - LPC2400.s

В Target указал:
IROM1 start = 0x0; size = 0x40000000 (startup указан)
IRAM1 start = 0x40000000; size = 0xFFFF; (default указан)
там же выбран Arm-mode Code generation

в Debug настроено
use ULINK Pro ARM debugger (та железка, что у меня есть)

в настройках дебаггера
max JTAG Clock = RTCK
Device chain = ARM7TDMI-S core

в Utilites
установлен use target driver for flash programming,
выбран ULINK debugger

в его настройках - самое темное и непонятное мне место
алгоритм поставил LPC2000 IAP2 512
полное стирание чипа
RAM for algorithm: start = 0x40000000; size = 0x0800
Ivan_01 вне форума  
Непрочитано 30.01.2013, 15:17  
pambaru
Почётный гражданин KAZUS.RUN
 
Регистрация: 24.03.2007
Сообщений: 1,394
Сказал спасибо: 85
Сказали Спасибо 671 раз(а) в 392 сообщении(ях)
pambaru на пути к лучшему
По умолчанию Re: lpc2478 не работают прерывания

Цитата:
LPC2000 IAP2 512
полное стирание чипа
RAM for algorithm: start = 0x40000000; size = 0x0800
Это верно. И все три галочки поставить.

Цитата:
В Target указал:
IROM1 start = 0x0; size = 0x40000000 (startup указан)
IRAM1 start = 0x40000000; size = 0xFFFF; (default указан)
там же выбран Arm-mode Code generation
У меня:
Кварц 12 Мгц
IROM1 start = 0x0; size = 0x80000
IRAM1 start = 0x40000000; size = 0x10000
Arm-mode Code generation

Цитата:
в настройках дебаггера
max JTAG Clock = RTCK
Device chain = ARM7TDMI-S core
У меня J-Link, поэтому по другому.

Во вложении мои хидер для 2468 и LPC2400.s
Настройки для 12 МГц.
Вложения:
Тип файла: rar LPC2400.rar (7.8 Кб, 39 просмотров)
Тип файла: rar LPC24xx.rar (6.3 Кб, 40 просмотров)
pambaru вне форума  
Сказали "Спасибо" pambaru
Ivan_01 (30.01.2013)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TSOP4836 работают ли в реальности от 3,3В??? awtoap Микроконтроллеры, АЦП, память и т.д 3 09.04.2011 23:28
AVRStudio + WinAVR не работают... alberio Микроконтроллеры, АЦП, память и т.д 15 18.10.2010 20:16
компилятор C Hi-Tech, не работают директивы #asm #endasm alexplev Микроконтроллеры, АЦП, память и т.д 2 26.04.2008 22:47
На какой частоте работают дист. пульты теликов LG retas Видеотехника 5 24.08.2007 09:41


Часовой пояс GMT +4, время: 07:04.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.