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

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

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

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

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

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


 
Опции темы
Непрочитано 18.12.2011, 01:49  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 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,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: lpc2478 не работают прерывания

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

SasaVitebsk, вот этого я и не вижу. Т.е. в заданный адрес он записывает значение при инициализации, в VICCECADDRES - нет. Вот в итоге и считывает оттуда 0. Моя почта ipurityi@yandex.ru
 
Непрочитано 19.12.2011, 20:47  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 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.RU
 
Регистрация: 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.RU
 
Регистрация: 24.03.2007
Сообщений: 1,352
Сказал спасибо: 85
Сказали Спасибо 610 раз(а) в 369 сообщении(ях)
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.RU
 
Регистрация: 24.03.2007
Сообщений: 1,352
Сказал спасибо: 85
Сказали Спасибо 610 раз(а) в 369 сообщении(ях)
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:35.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot