Craig Evans
/
ELEC2645_TimeTriggeredInterrupt_2021
Ticker example
main.cpp@0:8888b2ad5510, 2020-12-09 (annotated)
- Committer:
- eencae
- Date:
- Wed Dec 09 14:41:51 2020 +0000
- Revision:
- 0:8888b2ad5510
Initial Commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
eencae | 0:8888b2ad5510 | 1 | /* |
eencae | 0:8888b2ad5510 | 2 | |
eencae | 0:8888b2ad5510 | 3 | 2645_Ticker |
eencae | 0:8888b2ad5510 | 4 | |
eencae | 0:8888b2ad5510 | 5 | Sample code from ELEC2645 |
eencae | 0:8888b2ad5510 | 6 | |
eencae | 0:8888b2ad5510 | 7 | Demonstrates how to use a ticker to generate a periodic timer interrupt |
eencae | 0:8888b2ad5510 | 8 | |
eencae | 0:8888b2ad5510 | 9 | (c) Craig A. Evans, University of Leeds, Jan 2016 |
eencae | 0:8888b2ad5510 | 10 | |
eencae | 0:8888b2ad5510 | 11 | */ |
eencae | 0:8888b2ad5510 | 12 | |
eencae | 0:8888b2ad5510 | 13 | #include "mbed.h" |
eencae | 0:8888b2ad5510 | 14 | |
eencae | 0:8888b2ad5510 | 15 | // Create objects for ticker and red LED |
eencae | 0:8888b2ad5510 | 16 | Ticker ticker; |
eencae | 0:8888b2ad5510 | 17 | DigitalOut led(LED1); |
eencae | 0:8888b2ad5510 | 18 | |
eencae | 0:8888b2ad5510 | 19 | // flag - must be volatile as changes within ISR |
eencae | 0:8888b2ad5510 | 20 | // g_ prefix makes it easier to distinguish it as global |
eencae | 0:8888b2ad5510 | 21 | volatile int g_timer_flag = 0; |
eencae | 0:8888b2ad5510 | 22 | |
eencae | 0:8888b2ad5510 | 23 | // function prototypes |
eencae | 0:8888b2ad5510 | 24 | void timer_isr(); |
eencae | 0:8888b2ad5510 | 25 | |
eencae | 0:8888b2ad5510 | 26 | int main() |
eencae | 0:8888b2ad5510 | 27 | { |
eencae | 0:8888b2ad5510 | 28 | // set-up the ticker so that the ISR it is called every 0.5 seconds |
eencae | 0:8888b2ad5510 | 29 | ticker.attach(&timer_isr,0.5); |
eencae | 0:8888b2ad5510 | 30 | |
eencae | 0:8888b2ad5510 | 31 | while (1) { |
eencae | 0:8888b2ad5510 | 32 | |
eencae | 0:8888b2ad5510 | 33 | // check if flag is set i.e. interrupt has occured |
eencae | 0:8888b2ad5510 | 34 | if (g_timer_flag) { |
eencae | 0:8888b2ad5510 | 35 | g_timer_flag = 0; // if it has, clear the flag |
eencae | 0:8888b2ad5510 | 36 | printf("Tick \n"); |
eencae | 0:8888b2ad5510 | 37 | // DO TASK HERE |
eencae | 0:8888b2ad5510 | 38 | } |
eencae | 0:8888b2ad5510 | 39 | |
eencae | 0:8888b2ad5510 | 40 | // put the MCU to sleep until an interrupt wakes it up |
eencae | 0:8888b2ad5510 | 41 | sleep(); |
eencae | 0:8888b2ad5510 | 42 | |
eencae | 0:8888b2ad5510 | 43 | } |
eencae | 0:8888b2ad5510 | 44 | } |
eencae | 0:8888b2ad5510 | 45 | |
eencae | 0:8888b2ad5510 | 46 | // time-triggered interrupt |
eencae | 0:8888b2ad5510 | 47 | void timer_isr() |
eencae | 0:8888b2ad5510 | 48 | { |
eencae | 0:8888b2ad5510 | 49 | g_timer_flag = 1; // set flag in ISR |
eencae | 0:8888b2ad5510 | 50 | } |