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
example1.cpp
- Committer:
- AjK
- Date:
- 2010-11-23
- Revision:
- 4:67f327b9278e
- Parent:
- 0:c409efd8df78
- Child:
- 5:c39b22fa0c60
File content as of revision 4:67f327b9278e:
#ifdef COMPILE_EXAMPLE_CODE_MODDMA #include "mbed.h" #include "MODDMA.h" DigitalOut led1(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); DigitalOut led4(LED4); MODDMA dma; Serial pc(USBTX, USBRX); // Function prototypes for IRQ callbacks. // See definitions following main() below. void dmaTCCallback(void); void dmaERRCallback(void); void TC0_callback(void); void ERR0_callback(void); int main() { char s[] = "**DMA** ABCDEFGHIJKLMNOPQRSTUVWXYZ **DMA**"; pc.baud(PC_BAUD); dma.isrIntTCStat.attach(&dmaTCCallback); dma.isrIntErrStat.attach(&dmaERRCallback); MODDMA_Config *config = new MODDMA_Config; config ->channelNum ( MODDMA::Channel_0 ) ->srcMemAddr ( (uint32_t) &s ) ->dstMemAddr ( 0 ) ->transferSize ( sizeof(s) ) ->transferType ( MODDMA::m2p ) ->transferWidth ( 0 ) ->srcConn ( 0 ) ->dstConn ( MODDMA::UART0_Tx ) ->dmaLLI ( 0 ) ; // config end // Attach configuration callbacks if required. config->isrIntTCStat->attach(&TC0_callback); config->isrIntErrStat->attach(&ERR0_callback); // Setup the configuration. dma.Setup(config); //dma.Enable( MODDMA::Channel_0 ); dma.Enable( config->channelNum() ); while (1) { led1 = !led1; wait(0.25); } } // Main controller TC IRQ callback void dmaTCCallback(void) { led2 = 1; } // Main controller ERR IRQ callback void dmaERRCallback(void) { error("Oh no! My Mbed exploded! :( Only kidding, find the problem"); } // Configuration callback on TC void TC0_callback(void) { MODDMA_Config *config = dma.getConfig(); dma.haltAndWaitChannelComplete( (MODDMA::CHANNELS)config->channelNum()); dma.Disable( (MODDMA::CHANNELS)config->channelNum() ); // Configurations have two IRQ callbacks for TC and Err so you // know which you are processing. However, if you want to use // a single callback function you can tell what type of IRQ // is being processed thus:- if (dma.irqType() == MODDMA::TcIrq) { led3 = 1; dma.clearTcIrq(); } if (dma.irqType() == MODDMA::ErrIrq) { led4 = 1; dma.clearErrIrq(); } } // Configuration cakllback on Error void ERR0_callback(void) { error("Oh no! My Mbed exploded! :( Only kidding, find the problem"); } #endif