From: goode on 26 Jan 2010 09:22 Dear All, I have a small problem. I am trying to play a wave file from my SD card. I am not using FAT i am just reading raw data from the card. I want to do this using DMA transfer. I wrote the following code, but this does not output the wave file from the DAC. Does anyone have any idea, what i should do? Best Regards Kerem #include <msp430x26x.h> #include <hal_hardware_board.h> #include <mmc.h> #include <stdio.h> #include <intrinsics.h> #include <stdint.h> //__no_init volatile unsigned long DMA0SZ @ DMA0SZ_; unsigned long cardSize = 0; unsigned char status = 1; unsigned int timeout = 0; int i = 0; int k= 0; int kerem = 0; int filesize = 0; int* filePtr = NULL; int sector = 0; unsigned char buffer[512]; void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer DCOCTL = CALDCO_16MHZ; BCSCTL1 = CALBC1_16MHZ; BCSCTL2 = SELM_0 | DIVS_2; //P1DIR |= 0x01; // Set P1.0 to output direction P1DIR = BIT0 | BIT4; // Set P1.0 to output direction P2DIR = BIT0 ; P5DIR = BIT4 | BIT5; P1SEL = BIT4; P2SEL = BIT0; P5SEL = BIT4 | BIT5; P6DIR = BIT6 ; P6SEL = BIT6; ADC12CTL0 = REFON; DAC12_0CTL = DAC12SREF_0 | DAC12RES | DAC12LSEL_2 | DAC12IR | DAC12AMP_7 | DAC12CALON; while (DAC12_0CTL & DAC12CALON != 0){ } DMACTL0 =DMA0TSEL_5; DMACTL1 = 0; DMA0CTL = DMADT_0 | DMADSTINCR_0 | DMASRCINCR_3 | DMADSTBYTE | DMASRCBYTE; //Initialisation of the MMC/SD-card while (status != 0) // if return in not NULL an error did occur and the // MMC/SD-card will be initialized again { status = mmcInit(); timeout++; if (timeout == 150) // Try 50 times till error { //printf ("No MMC/SD-card found!! %x\n", status); break; } } while ((mmcPing() != MMC_SUCCESS)); // Wait till card is inserted // Read the Card Size from the CSD Register cardSize = mmcReadCardSize(); mmcReadSector(sector, buffer); __data16_write_addr((unsigned short) &DMA0SA,(unsigned long) buffer +44); // Source block address __data16_write_addr((unsigned short) &DMA0DA,(unsigned long) &DAC12_0DAT); DMA0SZ = 64; TACCR0 = 1; TACCR1 = 1; TACCTL1 = OUTMOD_7; DMA0CTL = DMA0CTL | DMAEN | DMAIE; DAC12_0CTL = DAC12_0CTL | DAC12ENC | DAC12IFG ; TACTL = TASSEL_1 | ID_0 | MC_1 | TACLR; __enable_interrupt(); for (;;) { P1OUT ^= 0x01; // Toggle P1.0 using exclusive-OR i = 50000; // Delay do (i--); while (i != 0); } } #pragma vector = DMA_VECTOR __interrupt void DMA_int(void) { sector++; mmcReadSector(sector, buffer); __data16_write_addr((unsigned short) &DMA0SA,(unsigned long) buffer); //__data16_write_addr((unsigned short) &DMA0SA,(unsigned long) wave); // Source block address __data16_write_addr((unsigned short) &DMA0DA,(unsigned long) &DAC12_0DAT); DMA0SZ = 512; DMA0CTL |= DMAEN | DMAIE; DAC12_0CTL = DAC12_0CTL | DAC12ENC | DAC12IFG ; } --------------------------------------- Posted through http://www.EmbeddedRelated.com
|
Pages: 1 Prev: Efficient methods Next: Google trikes to blaze 'street view' trail off road |