<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Wave player on LPC1768 with DAC in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/Wave-player-on-LPC1768-with-DAC/m-p/522758#M5394</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Badman on Mon Feb 17 00:48:06 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hello,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm trying to pursue the player based on the DAC. For convenience I use the wave file with a frequency of 11025 Hz, 8 bit mono. The only grumble I hear the speaker. What is wrong in the code ?&lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
#define BUF_SIZE 512
uint16_t buf[2][512];
volatile uint8_t nr_buf = 0;// indeks aktywnego buforu
volatile uint8_t can_read = 1;

UINT play(char fn)
{
FIL fil;
char *wsk_buf = &amp;amp;buf[0][0];
DWORD eof, br;
UINT rb = 0 ;
char bufor[10];

if ( f_open(&amp;amp;fil, "11025mon8bit.wav", FA_READ) == FR_OK)
{
printf( "Otwarto plik\n\r" );
f_read( &amp;amp;fil, &amp;amp;buf[0][0], BUF_SIZE , &amp;amp;rb );
f_read( &amp;amp;fil, &amp;amp;buf[1][0], BUF_SIZE , &amp;amp;rb );

LPC_TIM0-&amp;gt;TCR = 1;// start Timer0

while(1)
{
if( can_read ) {// jesli flaga ustawiona w obsludze przerwania

f_read( &amp;amp;fil, &amp;amp;buf[ nr_buf ^ 0x01 ][0], BUF_SIZE , &amp;amp;rb );// odczytaj kolejny bufor
//printf( "B%d\n\r", nr_buf ^ 1 );

if( rb &amp;lt; BUF_SIZE ) break;// jesli koniec pliku przerwij petle while(1)
}

can_read = 0;
}
LPC_TIM0-&amp;gt;TCR = 0;// stop Timer0
}
else
printf( "Nie otwarto pliku\n\r" );

return 0;
}

void sound_init(void)
{
CLKPWR_ConfigPPWR( CLKPWR_PCONP_PCTIM0, ENABLE );// wlaczeczenie TIM0
//CLKPWR_SetPCLKDiv (CLKPWR_PCLKSEL_TIMER0, CLKPWR_PCLKSEL_CCLK_DIV_4);
LPC_PINCON-&amp;gt;PINSEL1 = 0x00200000;// ustawienie P0.26 jako wyjscie DAC

LPC_TIM0-&amp;gt;MR0 = ( 1000000000 / 11025 ) - 1;
LPC_TIM0-&amp;gt;MCR = (1&amp;lt;&amp;lt;0) | (1&amp;lt;&amp;lt;1); // zerowanie MR0 i generacja przerwan
NVIC_EnableIRQ( TIMER0_IRQn );// Wlaczenie przerwan dla Timer0
NVIC_SetPriority( TIMER0_IRQn, 0 );
}

void TIMER0_IRQHandler(void)
{
// sprawdzamy czy przerwanie od rejestru porownujacego MR0
if ( LPC_TIM0-&amp;gt;IR &amp;amp; 0x01 )
{
static uint16_t buf_idx;
static uint8_t probka ;
static uint16_t i;


LPC_TIM0-&amp;gt;IR |= 1&amp;lt;&amp;lt;0;// skasowanie flagi przerwania od MR0

probka = buf[nr_buf][buf_idx++] ;

i =&amp;nbsp; ( probka &amp;lt;&amp;lt; 2 );&amp;nbsp; // konwersja 8bit do 10bit

//LPC_DAC-&amp;gt;DACR = ( (i&amp;amp;0x3FF) &amp;lt;&amp;lt; 6 ) | DAC_BIAS;

DAC_UpdateValue( LPC_DAC, i );

if( buf_idx &amp;gt; BUF_SIZE-1 )
{
buf_idx = 0;// reset indeksu bufora
can_read = 1;// flaga = 1
nr_buf ^= 0x01;// zmiana bufora na kolejny
}
}
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 17:55:23 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T17:55:23Z</dc:date>
    <item>
      <title>Wave player on LPC1768 with DAC</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Wave-player-on-LPC1768-with-DAC/m-p/522758#M5394</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Badman on Mon Feb 17 00:48:06 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hello,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm trying to pursue the player based on the DAC. For convenience I use the wave file with a frequency of 11025 Hz, 8 bit mono. The only grumble I hear the speaker. What is wrong in the code ?&lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
#define BUF_SIZE 512
uint16_t buf[2][512];
volatile uint8_t nr_buf = 0;// indeks aktywnego buforu
volatile uint8_t can_read = 1;

UINT play(char fn)
{
FIL fil;
char *wsk_buf = &amp;amp;buf[0][0];
DWORD eof, br;
UINT rb = 0 ;
char bufor[10];

if ( f_open(&amp;amp;fil, "11025mon8bit.wav", FA_READ) == FR_OK)
{
printf( "Otwarto plik\n\r" );
f_read( &amp;amp;fil, &amp;amp;buf[0][0], BUF_SIZE , &amp;amp;rb );
f_read( &amp;amp;fil, &amp;amp;buf[1][0], BUF_SIZE , &amp;amp;rb );

LPC_TIM0-&amp;gt;TCR = 1;// start Timer0

while(1)
{
if( can_read ) {// jesli flaga ustawiona w obsludze przerwania

f_read( &amp;amp;fil, &amp;amp;buf[ nr_buf ^ 0x01 ][0], BUF_SIZE , &amp;amp;rb );// odczytaj kolejny bufor
//printf( "B%d\n\r", nr_buf ^ 1 );

if( rb &amp;lt; BUF_SIZE ) break;// jesli koniec pliku przerwij petle while(1)
}

can_read = 0;
}
LPC_TIM0-&amp;gt;TCR = 0;// stop Timer0
}
else
printf( "Nie otwarto pliku\n\r" );

return 0;
}

void sound_init(void)
{
CLKPWR_ConfigPPWR( CLKPWR_PCONP_PCTIM0, ENABLE );// wlaczeczenie TIM0
//CLKPWR_SetPCLKDiv (CLKPWR_PCLKSEL_TIMER0, CLKPWR_PCLKSEL_CCLK_DIV_4);
LPC_PINCON-&amp;gt;PINSEL1 = 0x00200000;// ustawienie P0.26 jako wyjscie DAC

LPC_TIM0-&amp;gt;MR0 = ( 1000000000 / 11025 ) - 1;
LPC_TIM0-&amp;gt;MCR = (1&amp;lt;&amp;lt;0) | (1&amp;lt;&amp;lt;1); // zerowanie MR0 i generacja przerwan
NVIC_EnableIRQ( TIMER0_IRQn );// Wlaczenie przerwan dla Timer0
NVIC_SetPriority( TIMER0_IRQn, 0 );
}

void TIMER0_IRQHandler(void)
{
// sprawdzamy czy przerwanie od rejestru porownujacego MR0
if ( LPC_TIM0-&amp;gt;IR &amp;amp; 0x01 )
{
static uint16_t buf_idx;
static uint8_t probka ;
static uint16_t i;


LPC_TIM0-&amp;gt;IR |= 1&amp;lt;&amp;lt;0;// skasowanie flagi przerwania od MR0

probka = buf[nr_buf][buf_idx++] ;

i =&amp;nbsp; ( probka &amp;lt;&amp;lt; 2 );&amp;nbsp; // konwersja 8bit do 10bit

//LPC_DAC-&amp;gt;DACR = ( (i&amp;amp;0x3FF) &amp;lt;&amp;lt; 6 ) | DAC_BIAS;

DAC_UpdateValue( LPC_DAC, i );

if( buf_idx &amp;gt; BUF_SIZE-1 )
{
buf_idx = 0;// reset indeksu bufora
can_read = 1;// flaga = 1
nr_buf ^= 0x01;// zmiana bufora na kolejny
}
}
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:55:23 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Wave-player-on-LPC1768-with-DAC/m-p/522758#M5394</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:55:23Z</dc:date>
    </item>
  </channel>
</rss>

