Creating a Comparator Interrupt
- Subscribe to RSS Feed
- Mark as New
- Mark as Read
- Bookmark
- Subscribe
- Printer Friendly Page
- Report Inappropriate Content
Answer:
Unlike other user modules, the comparator does not provide a stub for an interrupt service routine (ISR). You must create your own ISR and call it from the appropriate place in boot.asm. For this the interrupt vector for the analog column has to be updated in the boot.tpl file.
There are four places in boot.tpl for the analog column interrupt routines.
org 08h ;Analog Column 0 Interrupt Vector
`@INTERRUPT_2`
reti
org 0Ch ;Analog Column 1 Interrupt Vector
`@INTERRUPT_3`
reti
org 10h ;Analog Column 2 Interrupt Vector
`@INTERRUPT_4`
reti
org 14h ;Analog Column 3 Interrupt Vector
`@INTERRUPT_5`
reti
In the interrupt vector of the analog column where the comparator is placed, replace the @INTERRUPT_x instruction with an ljmp instruction to your comparator ISR. For example, if the comparator is in Analog_Column_0 and the ISR is named ComparatorISR then replace the '@INTERRUPT_2' in Analog Column 0 interrupt vector with the jump to the ISR
org 08h ;Analog Column 0 Interrupt Vector
ljmp ComparatorISR
reti
If your ISR is in C, then add an underscore before the name of the ISR (ljmp _ComparatorISR). Save the boot.tpl and Generate Application. The boot.asm file will now get updated with the changes made to the boot.tpl.
Now that you have an ISR and and LJMP to the ISR in your boot code, you need to enable the interrupt, including globals. Global interrupts can be enabled with the "M8C_EnableGInt" macro. The column interrupt can be enabled with the "M8C_EnableIntMask" macro. The following code would enable an interrupt for analog column zero:
M8C_EnableGInt
M8C_EnableIntMask INT_MSK0, INT_MSK0_ACOLUMN_0
The comparator will then generate an interrupt whenever it crosses the threshold from LOW to HIGH.
- Tags:
- psoca 1
-
This widget could not be displayed.Anonymous