|
|
View previous topic :: View next topic |
Author |
Message |
KU5D
Joined: 10 Feb 2008 Posts: 46 Location: Asheville, North Carolina
|
HIGH_INTS on 18F4525 |
Posted: Wed Apr 09, 2008 2:35 pm |
|
|
This has to be a simply syntax thing, but I can't find it. I have multiple interrupts running on this 4525 and I need to prioritize them in the following order:
1 - INT_EXT
2 - INT_RDA
3----and so forth.
Seems I can't do this unless I have a #device HIGH_INTS=TRUE.
So, here's the top of my 18F4525.h file:
Code: | //////// Standard Header file for the PIC18F4525 device ////////////////
#device PIC18F4525
#device *=16
#device HIGH_INTS=TRUE
#nolist
//////// Program memory: 24576x16 Data RAM: 4096 Stack: 31
//////// I/O: 36 Analog Pins: 13
//////// Data EEPROM: 1024
//////// C Scratch area: 00 ID Location: 2000
|
The compiler complains that there are "extra characters on preprocessor command line".
What am I overlooking? _________________ Confidence is the feeling you have right before you fully understand the situation... |
|
|
Ken Johnson
Joined: 23 Mar 2006 Posts: 197 Location: Lewisburg, WV
|
|
Posted: Wed Apr 09, 2008 2:45 pm |
|
|
Don't know if this is it, but it sounds like you modified the ccs header file?
Why not just include that file, then put your high_ints in your file, after the #include?
Ken |
|
|
w2drz
Joined: 27 Dec 2006 Posts: 55 Location: Western New York - USA
|
|
Posted: Wed Apr 09, 2008 2:46 pm |
|
|
try this
As pointed out NOT in the device header file,
insert code in the area before your fuse settings in the program.
#device *=16
#device ADC=16
#device HIGH_INTS=true
#priority ext,rda // ect: of ints used
tom |
|
|
Guest
|
|
Posted: Wed Apr 09, 2008 2:57 pm |
|
|
It is also worth understanding the two types of 'priority'.
The chip itself, supports just two interrupt 'levels'. High priority, and low priority. High priority interrupts can interrupt low priority interrupts.It is this feature that is enabled by the 'high_ints=true' syntax. With this enabled, you can flag one or more of the interrupt handlers as 'high', and these will be able to interrupt the other handlers.
Separately, inside each hardware priority level, there is software priority. This is set by the order the compiler scans the hardware flags in each handler. By default, this is set by the order the interrupts are defined in the code. This can be overridden by the '#priority' statement. This priority affects which interrupts will be serviced first, if multiple sources exist. This does not need the high_ints option.
Generally, it is considered 'bad practice' to modify the supplied include files, since this means they will have to be changed with each compiler update. Better as Ken says, to just add the lines in your main code, immediately after including the file.
You don't need the *=16 syntax (does nothing on 18 chips).
The probable reason for the error, is that you have something in your main _before_ you include this file. The syntax really needs to be that the processor file is the very first thing included in the main, followed immediately by the 'extra' statements, like 'HIGH_INTS=TRUE'.
Best Wishes |
|
|
KU5D
Joined: 10 Feb 2008 Posts: 46 Location: Asheville, North Carolina
|
|
Posted: Wed Apr 09, 2008 2:59 pm |
|
|
Ah, but of course. It's happy now, and I really don't like fooling with the device file in any case.
Now for the priority I assume it would go thusly:
#priority INT_EXT, INT_RDA, INT_EXT1, INT_RTCC
where my interrupt routines are called as,
#INT_EXT
#INT_RDA,
etc.
Many thanx for the quick answer. _________________ Confidence is the feeling you have right before you fully understand the situation... |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|