реклама на сайте
подробности

 
 
> Прерывания без ОС на EP9315, обработчик не вызывается
toykhee_menky
сообщение Jun 30 2008, 15:43
Сообщение #1





Группа: Новичок
Сообщений: 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 занес).

Чего-то я еще не сделал... Чего?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sergeeff
сообщение Jul 2 2008, 18:38
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Все очень здорово, но надо же еще обучить процессор при возникновении прерывания с адреса 0х00000018 уходить на обработку конкретной функции обработки прерывания. А по сути, какая разница ядро как-то разбирается с прерываниями или дополнительный контроллер? По мне, так главное, чтобы бастро, понятно и надежно работало.

Я склоняюсь к тому, что redboot что-то в своих интересах инициализировал (или вовсе не инициализировал). На мой взгляд, если коллега действительно хочет именно с этим процессором работать, ему все равно под себя загузчик так и так придется написать. Тогда он будет владеть ситуацией, а не ситуация иметь его.
Go to the top of the page
 
+Quote Post
Desenix
сообщение Jul 2 2008, 19:18
Сообщение #3


Частый гость
**

Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 03:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.02229 секунд с 7
ELECTRONIX ©2004-2016