Craig Evans
/
ELEC2645_Ticker_WAV
Plays WAV file
main.cpp@4:a46b7a818e39, 2020-01-27 (annotated)
- Committer:
- eencae
- Date:
- Mon Jan 27 14:02:36 2020 +0000
- Revision:
- 4:a46b7a818e39
- Parent:
- 3:8daf84a849e5
Example playing audio file using ticker
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
eencae | 4:a46b7a818e39 | 1 | /* |
eencae | 0:44597d36d45c | 2 | |
eencae | 0:44597d36d45c | 3 | 2645_Ticker |
eencae | 0:44597d36d45c | 4 | |
eencae | 2:7d65a185f9a4 | 5 | Sample code from ELEC2645 |
eencae | 0:44597d36d45c | 6 | |
eencae | 0:44597d36d45c | 7 | Demonstrates how to use a ticker to generate a periodic timer interrupt |
eencae | 0:44597d36d45c | 8 | |
eencae | 0:44597d36d45c | 9 | (c) Craig A. Evans, University of Leeds, Jan 2016 |
eencae | 0:44597d36d45c | 10 | |
eencae | 3:8daf84a849e5 | 11 | updated January 2020 - uses Gamepad2 peripherals |
eencae | 3:8daf84a849e5 | 12 | |
eencae | 4:a46b7a818e39 | 13 | */ |
eencae | 0:44597d36d45c | 14 | |
eencae | 0:44597d36d45c | 15 | #include "mbed.h" |
eencae | 4:a46b7a818e39 | 16 | #include "Gamepad.h" |
eencae | 4:a46b7a818e39 | 17 | #include "SoundData.h" |
eencae | 0:44597d36d45c | 18 | |
eencae | 0:44597d36d45c | 19 | // Create objects for ticker and red LED |
eencae | 0:44597d36d45c | 20 | Ticker ticker; |
eencae | 4:a46b7a818e39 | 21 | Gamepad pad; |
eencae | 0:44597d36d45c | 22 | |
eencae | 0:44597d36d45c | 23 | // flag - must be volatile as changes within ISR |
eencae | 1:39d8765b574d | 24 | // g_ prefix makes it easier to distinguish it as global |
eencae | 1:39d8765b574d | 25 | volatile int g_timer_flag = 0; |
eencae | 4:a46b7a818e39 | 26 | volatile int g_sample = 0; |
eencae | 0:44597d36d45c | 27 | |
eencae | 0:44597d36d45c | 28 | // function prototypes |
eencae | 0:44597d36d45c | 29 | void timer_isr(); |
eencae | 0:44597d36d45c | 30 | |
eencae | 0:44597d36d45c | 31 | int main() |
eencae | 0:44597d36d45c | 32 | { |
eencae | 4:a46b7a818e39 | 33 | pad.init(); |
eencae | 4:a46b7a818e39 | 34 | // sample rate of music |
eencae | 4:a46b7a818e39 | 35 | ticker.attach(&timer_isr,220e-6); |
eencae | 0:44597d36d45c | 36 | |
eencae | 0:44597d36d45c | 37 | while (1) { |
eencae | 0:44597d36d45c | 38 | |
eencae | 4:a46b7a818e39 | 39 | if (g_timer_flag == 1) { |
eencae | 4:a46b7a818e39 | 40 | g_timer_flag = 0; |
eencae | 0:44597d36d45c | 41 | |
eencae | 4:a46b7a818e39 | 42 | // loop if reach end of samples |
eencae | 4:a46b7a818e39 | 43 | if (g_sample >= NUM_ELEMENTS) { |
eencae | 4:a46b7a818e39 | 44 | g_sample = 0; |
eencae | 4:a46b7a818e39 | 45 | } |
eencae | 4:a46b7a818e39 | 46 | // convert from 0 to 255 to 0.0 to 1.0 |
eencae | 4:a46b7a818e39 | 47 | float val = float(sound_data[g_sample])/ 256.0f; |
eencae | 4:a46b7a818e39 | 48 | // write to DAC |
eencae | 4:a46b7a818e39 | 49 | pad.write_dac(val); |
eencae | 4:a46b7a818e39 | 50 | // move onto next sample |
eencae | 4:a46b7a818e39 | 51 | g_sample++; |
eencae | 4:a46b7a818e39 | 52 | |
eencae | 0:44597d36d45c | 53 | } |
eencae | 0:44597d36d45c | 54 | |
eencae | 0:44597d36d45c | 55 | // put the MCU to sleep until an interrupt wakes it up |
eencae | 0:44597d36d45c | 56 | sleep(); |
eencae | 0:44597d36d45c | 57 | } |
eencae | 0:44597d36d45c | 58 | } |
eencae | 0:44597d36d45c | 59 | |
eencae | 4:a46b7a818e39 | 60 | |
eencae | 0:44597d36d45c | 61 | // time-triggered interrupt |
eencae | 0:44597d36d45c | 62 | void timer_isr() |
eencae | 0:44597d36d45c | 63 | { |
eencae | 1:39d8765b574d | 64 | g_timer_flag = 1; // set flag in ISR |
eencae | 0:44597d36d45c | 65 | } |