int main (void) // Main Program
{
int i;
SystemInit();
for(i=0; i < WAVE_SAMPLE_NUM; i++)
sinusoide = 512*sin(2*PI*i/WAVE_SAMPLE_NUM);
for(i=0; i < WAVE_SAMPLE_NUM; i++)
sinusoide = ((sinusoide + 512) << 6)// DACR bit 6-15, VALUE
| 1 << 16;// DACR bit 16, BIAS = 1
LPC_SCU->SFSP4_4 = 0; //GIPO; EPD, EPUN, EZI morajo biti 0!
LPC_GPIO_PORT->DIR[2] &=~ (1 << 4); //P4_4 kot input
LPC_SCU->ENAIO2 |= 1; /*Enable analog function DAC on pin P4_4*/
LLI0.source = (uint32_t) &sinusoide[0];
LLI0.destination = (uint32_t) &(LPC_DAC->CR);
LLI0.next = (uint32_t) &LLI0;
LLI0.control = 1<<26 | 2<<21 | 2<<18 | WAVE_SAMPLE_NUM;
LPC_GPDMA->CONFIG = 1; // enable the GPDMA controller
LPC_GPDMA->SYNC =
(0<<15); // enable synchro
LPC_GPDMA->C0SRCADDR = (uint32_t) &sinusoide[0];
LPC_GPDMA->C0DESTADDR = (uint32_t) &(LPC_DAC->CR);
LPC_GPDMA->C0LLI = (uint32_t) &LLI0; // linked lists for ch0
LPC_GPDMA->C0CONTROL = WAVE_SAMPLE_NUM // transfer size (0 - 11) = 64
| (0 << 12) // source burst size (12 - 14) = 1
| (0 << 15) // destination burst size (15 - 17) = 1
| (2 << 18) // source width (18 - 20) = 32 bit
| (2 << 21) // destination width (21 - 23) = 32 bit
| (0 << 24) // source AHB select (24) = AHB 0
| (0 << 25) // destination AHB select (25) = AHB 0
| (1 << 26) // source increment (26) = increment
| (0 << 27) // destination increment (27) = no increment
| (0 << 28) // mode select (28) = access in user mode
| (0 << 29) // (29) = access not bufferable
| (0 << 30) // (30) = access not cacheable
| (0 << 31); // terminal count interrupt disabled
LPC_GPDMA->C0CONFIG = 1 // channel enabled (0)
| (0 << 1) // source peripheral (1 - 5) = none
| (0x0F << 6)// destination peripheral (6 - 10) = DAC
| (1 << 11)// flow control (11 - 13) = mem to per
| (0 << 14)// (14) = mask out error interrupt
| (0 << 15)// (15) = mask out terminal count interrupt
| (0 << 16)// (16) = no locked transfers
| (0 << 18);// (27) = no HALT
/* DACclk = 25 MHz, so 10 usec interval*/
LPC_DAC->CNTVAL = 250;
/* DMA, timer running, dbuff */
LPC_DAC->CTRL = 1<<3 | 1<<2 | 1<<1;
while(1) ; // Loop forever
}
|
LPC_GPDMA->SYNC = (0<<15); // enable synchro |
LPC_GPDMA->SYNC &= ~(1<<15); // enable synchro |
LPC_GPDMA->C0CONTROL = WAVE_SAMPLE_NUM // transfer size (0 - 11) = 64 | (0 << 12) // source burst size (12 - 14) = 1 | (0 << 15) // destination burst size (15 - 17) = 1 | (2 << 18) // source width (18 - 20) = 32 bit | (2 << 21) // destination width (21 - 23) = 32 bit | (0 << 24) // source AHB select (24) = AHB 0 | (0 << 25) // destination AHB select (25) = AHB 0 | (1 << 26) // source increment (26) = increment | (0 << 27) // destination increment (27) = no increment | (0 << 28) // mode select (28) = access in user mode | (0 << 29) // (29) = access not bufferable | (0 << 30) // (30) = access not cacheable | (0 << 31); // terminal count interrupt disabled |