MODDMA GPDMA Controller New features: transfer pins to memory buffer under periodic timer control and send double buffers to DAC

Dependents:   FirstTest WaveSim IO-dma-memmem DACDMAfuncgenlib ... more

Committer:
AjK
Date:
Tue Nov 23 14:50:39 2010 +0000
Revision:
0:c409efd8df78
Child:
4:67f327b9278e
0.1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AjK 0:c409efd8df78 1 #ifdef COMPILE_EXAMPLE_CODE_MODDMA
AjK 0:c409efd8df78 2
AjK 0:c409efd8df78 3 #include "mbed.h"
AjK 0:c409efd8df78 4 #include "MODDMA.h"
AjK 0:c409efd8df78 5 #include "MODSERIAL.h"
AjK 0:c409efd8df78 6
AjK 0:c409efd8df78 7 DigitalOut led1(LED1);
AjK 0:c409efd8df78 8 DigitalOut led2(LED2);
AjK 0:c409efd8df78 9 DigitalOut led3(LED3);
AjK 0:c409efd8df78 10 DigitalOut led4(LED4);
AjK 0:c409efd8df78 11 MODDMA dma;
AjK 0:c409efd8df78 12 MODSERIAL pc(USBTX, USBRX);
AjK 0:c409efd8df78 13 //Serial pc(USBTX, USBRX);
AjK 0:c409efd8df78 14
AjK 0:c409efd8df78 15 void dmaCallback(void) {
AjK 0:c409efd8df78 16 led2 = 1;
AjK 0:c409efd8df78 17 }
AjK 0:c409efd8df78 18
AjK 0:c409efd8df78 19 void C0callback(void) {
AjK 0:c409efd8df78 20 MODDMA_Config *config = dma.getConfig();
AjK 0:c409efd8df78 21 dma.haltAndWaitChannelComplete( (MODDMA::CHANNELS)config->channelNum());
AjK 0:c409efd8df78 22 dma.Disable( (MODDMA::CHANNELS)config->channelNum() );
AjK 0:c409efd8df78 23 if (dma.irqType() == MODDMA::TcIrq) {
AjK 0:c409efd8df78 24 led3 = 1;
AjK 0:c409efd8df78 25 dma.clearTcIrq();
AjK 0:c409efd8df78 26 }
AjK 0:c409efd8df78 27 if (dma.irqType() == MODDMA::ErrIrq) {
AjK 0:c409efd8df78 28 led4 = 1;
AjK 0:c409efd8df78 29 dma.clearErrIrq();
AjK 0:c409efd8df78 30 }
AjK 0:c409efd8df78 31 }
AjK 0:c409efd8df78 32
AjK 0:c409efd8df78 33 int main() {
AjK 0:c409efd8df78 34 char s[] = "**DMA** ABCDEFGHIJKLMNOPQRSTUVWXYZ **DMA**";
AjK 0:c409efd8df78 35
AjK 0:c409efd8df78 36 pc.baud(115200);
AjK 0:c409efd8df78 37
AjK 0:c409efd8df78 38 dma.isrIntTCStat.attach(&dmaCallback);
AjK 0:c409efd8df78 39
AjK 0:c409efd8df78 40 MODDMA_Config *config = new MODDMA_Config;
AjK 0:c409efd8df78 41 config
AjK 0:c409efd8df78 42 ->channelNum ( MODDMA::Channel_0 )
AjK 0:c409efd8df78 43 ->srcMemAddr ( (uint32_t) &s )
AjK 0:c409efd8df78 44 //->dstMemAddr ( 0 )
AjK 0:c409efd8df78 45 ->transferSize ( sizeof(s) )
AjK 0:c409efd8df78 46 ->transferType ( MODDMA::m2p )
AjK 0:c409efd8df78 47 //->transferWidth ( 0 )
AjK 0:c409efd8df78 48 //->srcConn ( 0 )
AjK 0:c409efd8df78 49 ->dstConn ( MODDMA::UART0_Tx )
AjK 0:c409efd8df78 50 //->dmaLLI ( 0 )
AjK 0:c409efd8df78 51 ;//->isrIntTCStat->attach(&C0callback)
AjK 0:c409efd8df78 52 ; // config end
AjK 0:c409efd8df78 53
AjK 0:c409efd8df78 54 dma.Setup(config);
AjK 0:c409efd8df78 55
AjK 0:c409efd8df78 56 //dma.Enable( MODDMA::Channel_0 );
AjK 0:c409efd8df78 57 dma.Enable( config->channelNum() );
AjK 0:c409efd8df78 58
AjK 0:c409efd8df78 59 pc.printf("123456789\r\n");
AjK 0:c409efd8df78 60 pc.printf("\r\nRESERVED9 = %p", &LPC_SC->RESERVED9);
AjK 0:c409efd8df78 61 pc.printf("\r\nOther = %p", &LPC_UART0->DMAREQSEL);
AjK 0:c409efd8df78 62
AjK 0:c409efd8df78 63 while (1) {
AjK 0:c409efd8df78 64 led1 = !led1;
AjK 0:c409efd8df78 65 wait(0.2);
AjK 0:c409efd8df78 66 led1 = !led1;
AjK 0:c409efd8df78 67 wait(0.2);
AjK 0:c409efd8df78 68 }
AjK 0:c409efd8df78 69 }
AjK 0:c409efd8df78 70
AjK 0:c409efd8df78 71 #endif