Edited version of the wave player class that uses the MODDMA library to handle transfers to the DAC.

Dependencies:   MODDMA

Dependents:   WavePlayer_MODDMA wave_player_DMA_mbed

Files at this revision

API Documentation at this revision

Comitter:
ebradley6
Date:
Wed Mar 16 19:58:55 2016 +0000
Parent:
0:286582877314
Commit message:
Updated comments.

Changed in this revision

wave_player.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/wave_player.cpp	Wed Mar 16 03:28:44 2016 +0000
+++ b/wave_player.cpp	Wed Mar 16 19:58:55 2016 +0000
@@ -108,6 +108,8 @@
                     fseek(wavefile,chunk_size-sizeof(wav_format),SEEK_CUR);
                 break;
             case 0x61746164:
+                // Data chunk which contains the audio samples to send to the DAC
+            
                 // allocate a buffer big enough to hold a slice
                 slice_buf=(char *)malloc(wav_format.block_align);
                 if (!slice_buf) {
@@ -157,6 +159,7 @@
                 ->attach_err    ( this,&wave_player::ERR1_callback )     
                 ; // config end
     
+                // Set the DAC to the audio sample rate
                 LPC_DAC->DACCNTVAL = dac_cntval;
     
                 // Begin (enable DMA and counter). Note, don't enable
@@ -176,6 +179,7 @@
                 // while 16 and 32 bit wave files use signed data
                 //
                 
+                // Fill buffer 0 first
                 buf0_flag=1;
         
                 // Separate slices into sections of BUF_SIZE samples        
@@ -192,6 +196,7 @@
                                 DAC_buf1[k]=0;
                         }
                         else{
+                            // Read audio samples from sd card
                             fread(slice_buf,wav_format.block_align,1,wavefile);
                             if (feof(wavefile)) {
                                 printf("Oops -- not enough slices in the wave file\n");
@@ -299,12 +304,13 @@
     }
 }
 
-// Configuration callback on TC
+// Configuration callback on TC; runs when the DMA has finished transferring buffer 0 to the DAC
 void wave_player::TC0_callback(void) {
         
     // Get configuration pointer.
     MODDMA_Config *config = dma.getConfig();
     
+    // Only run once
     dma.haltAndWaitChannelComplete( (MODDMA::CHANNELS)config->channelNum());
     
     // Finish the DMA cycle by shutting down the channel.
@@ -322,12 +328,13 @@
     error("Oh no! My Mbed EXPLODED! :( Only kidding, go find the problem");
 }
 
-// Configuration callback on TC
+// Configuration callback on TC; runs when the DMA has finished transferring buffer 1 to the DAC
 void wave_player::TC1_callback(void) {
         
     // Get configuration pointer.
     MODDMA_Config *config = dma.getConfig();
     
+    // Only run once
     dma.haltAndWaitChannelComplete( (MODDMA::CHANNELS)config->channelNum());
     
     // Finish the DMA cycle by shutting down the channel.