Ticker example

Committer:
eencae
Date:
Wed Dec 09 14:41:51 2020 +0000
Revision:
0:8888b2ad5510
Initial Commit

Who changed what in which revision?

UserRevisionLine numberNew 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 }