sir ,
I m using MCB2130 board .I hav tested all features of it in Keil ARM
Tools .Now I m interested using GCC compiler .
Question 1)
when I changed in startup.s file like below for my ADC ISR to run it is
working:
************************************************************************
*******
# Exception Vectors
# Mapped to Address 0.
# Absolute addressing mode must be used.
# Dummy Handlers are implemented as infinite loops which can be
modified.
Vectors: LDR PC, Reset_Addr
LDR PC, Undef_Addr
LDR PC, SWI_Addr
LDR PC, PAbt_Addr
LDR PC, DAbt_Addr
NOP /* Reserved Vector */
LDR PC, IRQ_Addr1
LDR PC, FIQ_Addr
Reset_Addr: .word Reset_Handler
Undef_Addr: .word Undef_Handler
SWI_Addr: .word SWI_Handler
PAbt_Addr: .word PAbt_Handler
DAbt_Addr: .word DAbt_Handler
.word 0 /* Reserved Address */
IRQ_Addr1: .word IRQ_Handler1
FIQ_Addr: .word FIQ_Handler
Undef_Handler: B Undef_Handler
SWI_Handler: B SWI_Handler
PAbt_Handler: B PAbt_Handler
DAbt_Handler: B DAbt_Handler
IRQ_Handler1: B ADC0 /*this is changed with
interrupt routine ADC0*/
FIQ_Handler: B FIQ_Handler
************************************************************************
*******
I hav changed in IRQ_Handler1 with routine name(ADC0) but it is working
for the declaration like:
void ADC0(void) _attribute_ ((interrupt ("FIQ")));
How is it possible?
Question 2)
Now plz tell me what changes are reqd. for more than one interrupts to
occur simultaneously?
Hi,
I haven't used the uC you do, but I think, that it has some interrupt
controller to allow many interrupt sources (several tens). You should
have only one "real" interrupt handler written with _attribute_
((interrupt ("FIQ"))); (or IRQ) or even an asm in your startup code.
Inside this function uou must check which device in uC caused the
interrupt, and jump to function you supply:
// In your application
void ADC0(void)
{
//Your adc processing
}
// In startup code:
IRQ_Handler:
stmfd sp!, {r0-r4, r12, lr} /* save registers on IRQ stack
*/
/* Here you have to check the source of an interrupt. I will be a
number.
Then jump to function which is responsible for processing.
Address
can be got from some isr jumb table. */
ldmfd sp!, {r0-r4, r12, lr} /* restore registers from stack
*/
subs pc, lr, #4 /* return from exception
*/
Regards. Andy
Please log in before posting. Registration is free and takes only a minute.
Existing account
Do you have a Google/GoogleMail account? No registration required!
Log in with Google account
Log in with Google account
No account? Register here.