|
Прерывания без ОС на EP9315, обработчик не вызывается |
|
|
|
Jun 30 2008, 15:43
|
Группа: Новичок
Сообщений: 9
Регистрация: 30-06-08
Пользователь №: 38 654

|
Здравствуйте. EP9315 на плате Tion-pro v1. Программа на Си, компилируется WinARM 4.1.1, грузится в RAM при помощи redboot. Пытаюсь работать с портом UART2, порт, судя по всему, работает - тестовая последовательность туда уходит. FIFO разрешено, после посылки восьми символов оттуда появляется битик прерывания в VIC1RawIntr, т.е. прерывание до VIC вроде бы доходит. По адресу 0x18 содержится команда, оставленная там redboot-ом, судя по всему: 00000018: 18 F0 9F E5 - перевожу как ldr r15,[r15,#0x18], т.е. должен взяться адрес процедуры реакции на прерывание с адреса 0x38 (0x18+0x18+0x08). Подменяю указатель по адресу 0x38 на адрес своей функции. Но управление она не получает (контроль - светодиодами). Прерывания разрешены, режим супервизора: cpsr=0x00000013 ОЗУ отмаплено само на себя, с адреса 0. обработчик прерывания IRQ оформлен как Код void __attribute__ ((interrupt ("IRQ"))) handler1(); но управления тоже не получает (источник прерывания 25 для VIC1 выбрал, прерывания разрешил, адрес ISR занес). Чего-то я еще не сделал... Чего?
|
|
|
|
|
 |
Ответов
|
Jul 2 2008, 18:38
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
Все очень здорово, но надо же еще обучить процессор при возникновении прерывания с адреса 0х00000018 уходить на обработку конкретной функции обработки прерывания. А по сути, какая разница ядро как-то разбирается с прерываниями или дополнительный контроллер? По мне, так главное, чтобы бастро, понятно и надежно работало.
Я склоняюсь к тому, что redboot что-то в своих интересах инициализировал (или вовсе не инициализировал). На мой взгляд, если коллега действительно хочет именно с этим процессором работать, ему все равно под себя загузчик так и так придется написать. Тогда он будет владеть ситуацией, а не ситуация иметь его.
|
|
|
|
|
Jul 2 2008, 19:18
|
Частый гость
 
Группа: Новичок
Сообщений: 111
Регистрация: 23-06-04
Пользователь №: 141

|
ну да, еще стандартный startup забыл приложить, забыл сказать, использовал IAR Код ;----------------------------------------------------------------------------- ; This file contains the startup code used by the ICCARM C compiler. ; ; The modules in this file are included in the libraries, and may be replaced ; by any user-defined modules that define the PUBLIC symbol _program_start or ; a user defined start symbol. ; To override the cstartup defined in the library, simply add your modified ; version to the workbench project. ; ; All code in the modules (except ?RESET) will be placed in the ICODE segment. ; ; $Revision: 1.2 $ ; ;----------------------------------------------------------------------------- ; ; Naming covention of labels in this file: ; ; ?xxx - External labels only accessed from assembler. ; __xxx - External labels accessed from or defined in C. ; xxx - Labels local to one module (note: this file contains ; several modules). ; main - The starting point of the user program. ;
;--------------------------------------------------------------- ; Macros and definitions for the whole file ;---------------------------------------------------------------
; Mode, correspords to bits 0-5 in CPSR MODE_BITS DEFINE 0x1F ; Bit mask for mode bits in CPSR USR_MODE DEFINE 0x10 ; User mode FIQ_MODE DEFINE 0x11 ; Fast Interrupt Request mode IRQ_MODE DEFINE 0x12 ; Interrupt Request mode SVC_MODE DEFINE 0x13 ; Supervisor mode ABT_MODE DEFINE 0x17 ; Abort mode UND_MODE DEFINE 0x1B ; Undefined Instruction mode SYS_MODE DEFINE 0x1F ; System mode ;--------------------------------------------------------------- ; ?RESET ; Reset Vector. ; Normally, segment INTVEC is linked at address 0. ; For debugging purposes, INTVEC may be placed at other ; addresses. ; A debugger that honors the entry point will start the ; program in a normal way even if INTVEC is not at address 0. ;---------------------------------------------------------------
MODULE ?RESET COMMON INTVEC:CODE:NOROOT(2) PUBLIC __program_start EXTERN ?cstartup ; EXTERN undef_handler, swi_handler, prefetch_handler ; EXTERN data_handler, fiq_handler EXTERN irq_handler CODE32; Always ARM mode after reset org 0x00 __program_start ldr pc,=?cstartup ; Absolute jump can reach 4 GByte ; ldr b,?cstartup ; Relative branch allows remap, limited to 32 MByte org 0x04 undef_handler ldr pc,=undef_handler org 0x08 swi_handler ldr pc,=swi_handler org 0x0c prefetch_handler ldr pc,=prefetch_handler org 0x10 data_handler ldr pc,=data_handler org 0x18 ldr pc,=irq_handler org 0x1c fiq_handler ldr pc,=fiq_handler
; Constant table entries (for ldr pc) will be placed at 0x20 org 0x20 LTORG ; ENDMOD __program_start ENDMOD
;--------------------------------------------------------------- ; ?CSTARTUP ;--------------------------------------------------------------- MODULE ?CSTARTUP
RSEG IRQ_STACK:DATA(2) RSEG SVC_STACK:DATA:NOROOT(2) RSEG CSTACK:DATA(2) RSEG ICODE:CODE:NOROOT(4) PUBLIC ?cstartup EXTERN ?main
; Execution starts here. ; After a reset, the mode is ARM, Supervisor, interrupts disabled.
CODE32 ?cstartup
; Add initialization nedded before setup of stackpointers here
; Initialize the stack pointers. ; The pattern below can be used for any of the exception stacks: ; FIQ, IRQ, SVC, ABT, UND, SYS. ; The USR mode uses the same stack as SYS. ; The stack segments must be defined in the linker command file, ; and be declared above. mrs r0,cpsr ; Original PSR value bic r0,r0,#MODE_BITS ; Clear the mode bits orr r0,r0,#IRQ_MODE ; Set IRQ mode bits msr cpsr_c,r0 ; Change the mode ldr sp,=SFE(IRQ_STACK) & 0xFFFFFFF8 ; End of IRQ_STACK
bic r0,r0,#MODE_BITS ; Clear the mode bits orr r0,r0,#SYS_MODE ; Set System mode bits msr cpsr_c,r0 ; Change the mode ldr sp,=SFE(CSTACK) & 0xFFFFFFF8 ; End of CSTACK
#ifdef __ARMVFP__ ; Enable the VFP coprocessor. mov r0, #0x40000000 ; Set EN bit in VFP fmxr fpexc, r0 ; FPEXC, clear others.
; Disable underflow exceptions by setting flush to zero mode. ; For full IEEE 754 underflow compliance this code should be removed ; and the appropriate exception handler installed. mov r0, #0x01000000 ; Set FZ bit in VFP fmxr fpscr, r0 ; FPSCR, clear others. #endif
; Add more initialization here
; Continue to ?main for more IAR specific system startup
ldr r0,=?main bx r0
LTORG ENDMOD END
|
|
|
|
Сообщений в этой теме
toykhee_menky Прерывания без ОС на EP9315 Jun 30 2008, 15:43 aaarrr VIC, наверное, неправильно инициализировали. Код п... Jun 30 2008, 16:00 toykhee_menky Цитата(aaarrr @ Jun 30 2008, 22:00) VIC, ... Jun 30 2008, 16:21  aaarrr Цитата(toykhee_menky @ Jun 30 2008, 20:21... Jun 30 2008, 16:47   toykhee_menky Цитата(aaarrr @ Jun 30 2008, 22:47) Кто в... Jun 30 2008, 20:01    aaarrr Цитата(toykhee_menky @ Jul 1 2008, 00:01)... Jul 1 2008, 12:09 sergeeff Ну я бы под пунктом 0 добавил:
Преравание не возни... Jul 1 2008, 05:58 toykhee_menky Цитата(sergeeff @ Jul 1 2008, 11:58) Ну я... Jul 1 2008, 06:30 sergeeff Ну я бы, для начала, написал бы тестовую функцию о... Jul 1 2008, 08:24 sergeeff Можно посмотреть http://www.siwawi.arubi.uni-kl.de... Jul 1 2008, 15:46 toykhee_menky Мда. Проблема, однако. Неужели я один такой (или п... Jul 2 2008, 11:14 aaarrr Исходники redboot'а, если охота в них ковырять... Jul 2 2008, 11:32 toykhee_menky Цитата(aaarrr @ Jul 2 2008, 17:32) Исходн... Jul 2 2008, 13:14 sergeeff Ну вот, осталось посмотреть, что же сидит в таблиц... Jul 2 2008, 11:33 sergeeff А что за процедура вызывается по прерыванию? Как б... Jul 2 2008, 16:02 Desenix для армов EP9312, S3C2410, LPC2368 всегда писал и ... Jul 2 2008, 17:10 toykhee_menky Цитата(sergeeff @ Jul 3 2008, 00:38) Все ... Jul 3 2008, 05:44 sergeeff Уважаемый toykhee_menky!
1. Так про то и речь... Jul 3 2008, 06:15 aaarrr Цитата(toykhee_menky @ Jun 30 2008, 19:43... Jul 3 2008, 08:25 toykhee_menky Цитата(aaarrr @ Jul 3 2008, 14:25) Да, а ... Jul 3 2008, 13:08 aaarrr Значит на ядро прерывание передается, других вариа... Jul 3 2008, 13:15 sergeeff Ну дак и осталось то, про что я уже говорил - напи... Jul 3 2008, 14:12 toykhee_menky Всем спасибо. Перешел на eCos. Jul 12 2008, 13:49 sergeeff Ну, флаг в руки!
Думаю там заморочек будет ещ... Jul 12 2008, 18:41
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|