Gugen展示版
Fork of MagneWave by
Diff: MagneWave.cpp
- Revision:
- 6:d3e35dd7bfc5
- Parent:
- 5:a1c57d771887
- Child:
- 7:b0bb700d8383
diff -r a1c57d771887 -r d3e35dd7bfc5 MagneWave.cpp --- 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;