We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I want to write function for fiq interrupt on LPC2378, Here the program which I have try to run. But it gives error.
void T0isr(void) __fiq //__irq {
T0IR = 1; /* clear interrupt flag */
T0TCR = 0;
Enable_Timer1();
T0TCR = 1;
VICVectAddr=0xff; }
void Timer0_Init(int interval) { /*Load prescaler for 1mSec*/
T0PR=PRESCALER; /** * T0TCR: Timer 0 Control Register * 2: reset counters (both timer and prescaler) **/
T0TCR=2; /* * interrupt and clear when counter=match */
T0MCR=3; /* * interrupt every ms */
T0MR0=interval;
/** * T0TCR: Timer 0 Control Register * 1: enable counting **/
T0TCR=1;
// VICVectAddr4= (unsigned)T0isr; // Set the timer ISR address // VICVectCntl4= 0x00000020 | 4;
VICIntSelect = 0x00000010; VICIntEnable= 0x00000010; }
this program give error
freq.c(184): error: #130: expected a "{"
This program is running for irq but not for fiq....... If anyone know the method of writing a fiq ... please reply to me
The number in parentheses (184) tells you the line number at which the error occurred.
As we don't have your complete file, it's impossible to tell which of the lines you posted is number 184!
Your code is illegible because you didn't pay attention to the clear instructions for posting source code:
www.danlhenry.com/.../keil_code.png
Although people might give you the benefit of the doubt for sloppy errors like that, a compiler will not!
A compiler will insist that you write your code exactly in accordance with the language syntax rules - otherwise you will get errors like this one!
When the compiler tells you that it was expecting a '{' (an opening brace), that means that you have broken the syntax rules - eg, by missing a semicolon - and the only way the compiler could make any sense of your text was by assuming that there should have been an opening brace at the position stated.
So you need to look at your code carefully for such mistakes!
If you look at:
www.keil.com/.../armccref_chdfijae.htm
You'll notice that:
__fiq
is not a supported keyword.
Hello Ani --,
define your FIQ handler as follows:
__irq void FIQ_Handler (void) { /* add your code */ }
configure your interrupt as FIQ. Please see chapter 5.6 Interrupt Select Register (VICIntSelect - 0xFFFF F00C) in LPC23XX User manual.
Best Regards, Martin Guenther
Andy, I know error & how to find it. I think you not able to understand my problem, if I am not explain my problem neatly then I am sorry & listen again.
Actually I am not able to find out syntax for defining fiq in Keil, In my program I am commented irq syntax, which running neatly.... But when I am converted it for fiq interrupt, I am not understand some things 1) How to give interrupt handler address? 2) Syntax for fiq. 3) Compiler gives error which is explain already...why? above both problems are not occurred in irq.
If you have any solution please explain me..
Thanks to reply... Ani
Thanx IB Shy;
Thanx Martin Günther;
& I have one question, Martin, how to define FIQ_Handler (void) address?......... is it same like a irq handler.... which is written in my code or else... if you know please reply...
......why do you use so many dots......why do you need to define the FIQ at a specific address......do you know what you are doing......probably not......
Are you showing your good manners? If you have not solution then don't reply me. This is Discussion Forum for technical Discussion, not for just time pass.any one can keep small problems on this board. your language is very bad & keep it is in your pocket.
Look buddy, I don't mind helping you - but you need to state in clear language what the problem/question is, yes? And drop the dots.
Technical discussions don't need ....... in them. And technically speaking, you have one or three puncutation characters. "..." "." "??!", "???", etc.
Anyway - you register a FIQ handler in exactly the same way that you register an IRQ handler. You don't play with any absolute address. You assign the function pointer of the handler to the correct register in the interrupt controller.
Note that the interrupt controller has configuration to specify a priority for each interrupt channel - and it also have configuration to specify if using IRQ or FIQ.
This is covered in the datasheet/user manual for the processor. Just playing around with all the dialog boxes in the Keil simulator should also give you a good idea about exactly what settings the processor supports - for each of these settings, you could consider: - not needed because not used - default value is good - need to assign own value
Above three choices should be applied for everything configurable in the processor.
Thanks
The address of the FIQ_Handler does not matter. But you need to store the FIQ_Handler address at the correct vector location. In the Keil examples this is done in the startup file LPC2300.s. Please see example below:
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_Addr LDR PC, [PC, #-0x0120] ; Vector from VicVectAddr LDR PC, FIQ_Addr Reset_Addr DCD Reset_Handler Undef_Addr DCD Undef_Handler SWI_Addr DCD SWI_Handler PAbt_Addr DCD PAbt_Handler DAbt_Addr DCD DAbt_Handler DCD 0 ; Reserved Address IRQ_Addr DCD IRQ_Handler FIQ_Addr DCD FIQ_Handler IMPORT FIQ_Handler Undef_Handler B Undef_Handler SWI_Handler B SWI_Handler PAbt_Handler B PAbt_Handler DAbt_Handler B DAbt_Handler IRQ_Handler B IRQ_Handler ;FIQ_Handler B FIQ_Handler ; see Handler code
Please read also Chapter 6: LPC23XX Vectored Interrupt Controller (VIC) in user manual.
There is written: If more than one request is assigned to FIQ, the VIC ORs the requests to produce the FIQ signal to the ARM processor. The fastest possible FIQ latency is chieved when only one request is classified as FIQ, because then the FIQ service routine can simply start dealing with that device. But if more than one request is assigned to the FIQ class, the FIQ service routine can read a word from the VIC that identifies which FIQ source(s) is (are) requesting an interrupt.
Thank you...Martin Guenther.