ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
24 ноября
42812 Топик полностью
KAI (28.10.2005 19:28, просмотров: 1) ответил vsasha на Народ, подскажите а с прерывания в отладке вообще работают ?
Вероятно, Вам сможет помочь вот ЭТО... Если Вы пытаетесь запустить прерывание, когда программа работает из RAM, а не из Flash, то вероятно ЭТО сможет Вам помочь: Команда LDR pc,[pc,#-0xFF0] работает, НО только из Flash… LDR pc,[pc,#-0xFF0] Или, что то же самое, LDR pc,[pc,#-(0x18 + 0x8 - 0xFFFFF030)] Когда выполняется команда по адресу 0x18 в PC находиться значение 0x18 + 0x8 = 0x20 ВСЕГДА, т.е. адрес не следующей команды +0x04, а через одну +0x08 (для обеспечения "конвейерной обработки - pipeline"). И, если от текущего значения PC(0x20) отнять 0xFF0, произойдёт "переполнение в обратную сторону" 32-ух разрядного регистра и результат будет равен 0xFFFFF030. Т.е. адрес, из которого будет загружен регистр назначения (в данном случае PC) станет равен 0xFFFFF030, а это адрес регистра VICVectrAddr. Т.е. PC будет загружен содержимым из регистра VICVectrAddr. Это всё справедливо, если программа работает из Flash памяти, т.е. начиная с адреса 0x00000000. Если программа работает из RAM (отладка через Wiggler), т.е. начиная с адреса 0x40000000, то команда LDR pc,[pc,#-0xFF0] грузит в PC содержимое по адресу 0x3FFFF030. А для аналогичного перехода, надо из содержимого PC (0x40000020) вычесть 0x40000FF0, но синтаксис команды LDR допускает только 12-битное смещение. Из RAM работает команда LDR pc,=irq_handler прописанная по адресу 0x18, где irq_handler это имя функции обработки прерывания, но эта команда занимает два слова, 0x18 и 0x1C , т.е. без дополнительных мер работать одновременно с прерыванием FIQ и IRQ из RAM не получиться. Для работы из RAM одновременно с прерыванием FIQ и IRQ можно попытаться создать таблицу адресов переходов, в области памяти, которую может охватить 12-битное смещение. Но если Вы хотите работать только с IRQ, то LDR pc,=irq_handler должно хватить