Plays WAV file

Dependencies:   mbed Gamepad2

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?

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