Gugen展示版

Fork of MagneWave by kouzi osaki

Revision:
6:d3e35dd7bfc5
Parent:
5:a1c57d771887
Child:
7:b0bb700d8383
--- a/MagneWave.cpp	Thu Nov 07 11:17:35 2013 +0000
+++ b/MagneWave.cpp	Fri Nov 08 06:45:53 2013 +0000
@@ -1,7 +1,9 @@
 #include "MagneWave.h"
 
+
 #define DATA_OFFSET 44
 #define DAC16_CENTER  32768
+#define NEW_CODE
 
 MagneWave::MagneWave( SoftMCP4922 *dac )
 {
@@ -13,11 +15,14 @@
     m_dacOn = false;
     m_fileEnd = false;
     
+    NVIC_SetPriority(SysTick_IRQn, 1);
     tick.attach_us( this, &MagneWave::dacOut, 125 ); 
 }
 
 void MagneWave::play( FILE *wavefile )
 {
+    m_wptr = 0;
+    m_rptr = 0;
     m_dacOn = true;
     m_fileEnd = false;
     
@@ -26,11 +31,31 @@
     
     while( m_dacOn ){
         if( m_rptr != ( m_wptr + 1 ) & 0x7f ){
-            size_t readSize = fread( (char *)m_fifo[m_wptr], 2, 1, wavefile); 
-            if( readSize < 2 ){
+#ifdef NEW_CODE
+            int tmpL = 0;
+            int tmpH = 0;
+            long dacVal16 = 0;
+            tmpL = fgetc( m_wavefile );
+            if( tmpL == EOF ){
                 m_fileEnd = true;
                 break;
             }
+            tmpH = fgetc( m_wavefile );
+            if( tmpH == EOF ){
+                m_fileEnd = true;
+                break;
+            }
+            dacVal16 = tmpL;
+            dacVal16 |= ( tmpH << 8 );
+            dacVal16 += DAC16_CENTER;
+            m_fifo[m_wptr]= ( unsigned short )dacVal16;
+#else
+            size_t readSize = fread( (char *)m_fifo[m_wptr], 2, 1, wavefile); 
+            if( readSize < 1 ){
+                m_fileEnd = true;
+                break;
+            }
+#endif
             m_wptr = ( m_wptr + 1 ) & 0x7f;
         }
     }
@@ -40,15 +65,21 @@
 {
     if ( m_dacOn ) {
         if( m_rptr != m_wptr ){
+#ifdef NEW_CODE
+            m_wave_DAC->write_u16( m_fifo[ m_rptr ] );
+#else
             unsigned short tmpL = ( m_fifo[ m_rptr ] >> 8) & 0x00ff;
             unsigned short tmpH = ( m_fifo[ m_rptr ] << 8) & 0xff00;
             short dacVal16 = tmpH | tmpL;
             
             dacVal16 += DAC16_CENTER;
             m_wave_DAC->write_u16( dacVal16 );
+#endif
             m_rptr = ( m_rptr + 1 ) & 0x7f;
         }else{
+            printf("nohit\n");
             if( m_fileEnd ){
+                printf("eof\n");
                 m_wptr = 0;
                 m_rptr = 0;
                 m_dacOn = false;