Amador Valley High School Robotics Team / MODDMA

Fork of MODDMA by Andy K

example1.cpp

Committer:
AjK
Date:
2010-11-23
Revision:
0:c409efd8df78
Child:
4:67f327b9278e

File content as of revision 0:c409efd8df78:

#ifdef COMPILE_EXAMPLE_CODE_MODDMA

#include "mbed.h"
#include "MODDMA.h"
#include "MODSERIAL.h"

DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
DigitalOut led4(LED4);
MODDMA dma;
MODSERIAL pc(USBTX, USBRX);
//Serial pc(USBTX, USBRX);

void dmaCallback(void) {
    led2 = 1;
}

void C0callback(void) {
    MODDMA_Config *config = dma.getConfig();
    dma.haltAndWaitChannelComplete( (MODDMA::CHANNELS)config->channelNum());
    dma.Disable( (MODDMA::CHANNELS)config->channelNum() );
    if (dma.irqType() == MODDMA::TcIrq)  {
        led3 = 1;
        dma.clearTcIrq();
    }
    if (dma.irqType() == MODDMA::ErrIrq) {
        led4 = 1;
        dma.clearErrIrq();
    }
}

int main() {
    char s[] = "**DMA** ABCDEFGHIJKLMNOPQRSTUVWXYZ **DMA**";
    
    pc.baud(115200);
    
    dma.isrIntTCStat.attach(&dmaCallback);
    
    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 )
     ;//->isrIntTCStat->attach(&C0callback)
    ; // config end
   
    dma.Setup(config);
    
    //dma.Enable( MODDMA::Channel_0 );
    dma.Enable( config->channelNum() );
    
    pc.printf("123456789\r\n");
    pc.printf("\r\nRESERVED9 = %p", &LPC_SC->RESERVED9);
    pc.printf("\r\nOther = %p", &LPC_UART0->DMAREQSEL);
    
    while (1) {
        led1 = !led1;
        wait(0.2);
        led1 = !led1;
        wait(0.2);
    }
}

#endif