Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of MagneWave by
MagneWave.cpp
00001 #include "MagneWave.h" 00002 00003 #define DATA_OFFSET 44 00004 #define DAC16_CENTER 32768 00005 00006 MagneWave::MagneWave( SoftMCP4922 *dac ) 00007 { 00008 m_wave_DAC = dac; 00009 m_wave_DAC->write_u16( DAC16_CENTER ); 00010 00011 m_wptr = 0; 00012 m_rptr = 0; 00013 m_dacOn = false; 00014 m_fileEnd = false; 00015 00016 NVIC_SetPriority(SysTick_IRQn, 1); 00017 tick.attach_us( this, &MagneWave::dacOut, 125 ); 00018 } 00019 00020 void MagneWave::play( FILE *wavefile ) 00021 { 00022 // jump to wave data 00023 fseek( wavefile, DATA_OFFSET, SEEK_SET ); 00024 00025 m_dacOn = true; 00026 m_fileEnd = false; 00027 00028 while( m_dacOn ){ 00029 if( m_rptr != ( ( m_wptr + 1 ) & 0x7f ) ){ 00030 00031 short dacVal16 = 0; 00032 unsigned char tmp[2]; 00033 00034 int ret = fread( tmp, 1, 2, wavefile); 00035 if( ret < 2 ){ 00036 printf("eof\n\r"); 00037 m_fileEnd = true; 00038 break; 00039 } 00040 dacVal16 = tmp[0]; 00041 dacVal16 |= ( tmp[1] << 8 ); 00042 dacVal16 += DAC16_CENTER; 00043 00044 m_fifo[m_wptr]= ( unsigned short )dacVal16; 00045 m_wptr = ( m_wptr + 1 ) & 0x7f; 00046 } 00047 } 00048 printf("off\n\r"); 00049 } 00050 00051 void MagneWave::dacOut() 00052 { 00053 if ( m_dacOn ) { 00054 if( m_rptr != m_wptr ){ 00055 m_wave_DAC->write_u16( m_fifo[ m_rptr ] ); 00056 m_rptr = ( m_rptr + 1 ) & 0x7f; 00057 }else{ 00058 //printf("nohit r=%d,w=%d\n", m_rptr, m_wptr); 00059 //printf("nh\n"); 00060 if( m_fileEnd ){ 00061 printf("eof\n\r"); 00062 m_wptr = 0; 00063 m_rptr = 0; 00064 m_dacOn = false; 00065 m_fileEnd = false; 00066 m_wave_DAC->write_u16( DAC16_CENTER ); 00067 } 00068 } 00069 } 00070 } 00071 00072
Generated on Mon Jul 25 2022 10:21:45 by
1.7.2
