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@0:c409efd8df78, 2010-11-23 (annotated)
- 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?
User | Revision | Line number | New 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 |