http://http://diytec.web.fc2.com/mark2r2/

Dependencies:   EthernetNetIf NTPClient_NetServices mbed ConfigFile

Committer:
mark2r2
Date:
Tue Sep 20 12:46:26 2011 +0000
Revision:
0:08a4d61cd84c
V1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mark2r2 0:08a4d61cd84c 1 #include "mbed.h"
mark2r2 0:08a4d61cd84c 2 #include "MODDMA.h"
mark2r2 0:08a4d61cd84c 3 #include "MODSERIAL.h"
mark2r2 0:08a4d61cd84c 4
mark2r2 0:08a4d61cd84c 5 DigitalOut led1(LED1);
mark2r2 0:08a4d61cd84c 6 DigitalOut led2(LED2);
mark2r2 0:08a4d61cd84c 7 DigitalOut led3(LED3);
mark2r2 0:08a4d61cd84c 8 DigitalOut led4(LED4);
mark2r2 0:08a4d61cd84c 9 MODDMA dma;
mark2r2 0:08a4d61cd84c 10 MODSERIAL pc(USBTX, USBRX);
mark2r2 0:08a4d61cd84c 11
mark2r2 0:08a4d61cd84c 12 // Function prototypes for IRQ callbacks.
mark2r2 0:08a4d61cd84c 13 // See definitions following main() below.
mark2r2 0:08a4d61cd84c 14 void dmaTCCallback(void);
mark2r2 0:08a4d61cd84c 15 void dmaERRCallback(void);
mark2r2 0:08a4d61cd84c 16 void TC0_callback(void);
mark2r2 0:08a4d61cd84c 17 void ERR0_callback(void);
mark2r2 0:08a4d61cd84c 18
mark2r2 0:08a4d61cd84c 19 int main() {
mark2r2 0:08a4d61cd84c 20 char s[] = "**DMA** ABCDEFGHIJKLMNOPQRSTUVWXYZ **DMA**";
mark2r2 0:08a4d61cd84c 21
mark2r2 0:08a4d61cd84c 22 pc.baud(PC_BAUD);
mark2r2 0:08a4d61cd84c 23
mark2r2 0:08a4d61cd84c 24 dma.attach_tc( &dmaTCCallback );
mark2r2 0:08a4d61cd84c 25 dma.attach_err( &dmaERRCallback );
mark2r2 0:08a4d61cd84c 26
mark2r2 0:08a4d61cd84c 27 MODDMA_Config *config = new MODDMA_Config;
mark2r2 0:08a4d61cd84c 28 config
mark2r2 0:08a4d61cd84c 29 ->channelNum ( MODDMA::Channel_0 )
mark2r2 0:08a4d61cd84c 30 ->srcMemAddr ( (uint32_t) &s )
mark2r2 0:08a4d61cd84c 31 ->dstMemAddr ( 0 )
mark2r2 0:08a4d61cd84c 32 ->transferSize ( sizeof(s) )
mark2r2 0:08a4d61cd84c 33 ->transferType ( MODDMA::m2p )
mark2r2 0:08a4d61cd84c 34 ->transferWidth ( 0 )
mark2r2 0:08a4d61cd84c 35 ->srcConn ( 0 )
mark2r2 0:08a4d61cd84c 36 ->dstConn ( MODDMA::UART0_Tx )
mark2r2 0:08a4d61cd84c 37 ->dmaLLI ( 0 )
mark2r2 0:08a4d61cd84c 38 ->attach_tc ( &TC0_callback )
mark2r2 0:08a4d61cd84c 39 ->attach_err ( &ERR0_callback )
mark2r2 0:08a4d61cd84c 40 ; // config end
mark2r2 0:08a4d61cd84c 41
mark2r2 0:08a4d61cd84c 42 // Setup the configuration.
mark2r2 0:08a4d61cd84c 43 dma.Setup(config);
mark2r2 0:08a4d61cd84c 44
mark2r2 0:08a4d61cd84c 45 //dma.Enable( MODDMA::Channel_0 );
mark2r2 0:08a4d61cd84c 46 //dma.Enable( config->channelNum() );
mark2r2 0:08a4d61cd84c 47 dma.Enable( config );
mark2r2 0:08a4d61cd84c 48
mark2r2 0:08a4d61cd84c 49 while (1) {
mark2r2 0:08a4d61cd84c 50 led1 = !led1;
mark2r2 0:08a4d61cd84c 51 wait(0.25);
mark2r2 0:08a4d61cd84c 52 }
mark2r2 0:08a4d61cd84c 53 }
mark2r2 0:08a4d61cd84c 54
mark2r2 0:08a4d61cd84c 55 // Main controller TC IRQ callback
mark2r2 0:08a4d61cd84c 56 void dmaTCCallback(void) {
mark2r2 0:08a4d61cd84c 57 led2 = 1;
mark2r2 0:08a4d61cd84c 58 }
mark2r2 0:08a4d61cd84c 59
mark2r2 0:08a4d61cd84c 60 // Main controller ERR IRQ callback
mark2r2 0:08a4d61cd84c 61 void dmaERRCallback(void) {
mark2r2 0:08a4d61cd84c 62 error("Oh no! My Mbed exploded! :( Only kidding, find the problem");
mark2r2 0:08a4d61cd84c 63 }
mark2r2 0:08a4d61cd84c 64
mark2r2 0:08a4d61cd84c 65 // Configuration callback on TC
mark2r2 0:08a4d61cd84c 66 void TC0_callback(void) {
mark2r2 0:08a4d61cd84c 67 MODDMA_Config *config = dma.getConfig();
mark2r2 0:08a4d61cd84c 68 dma.haltAndWaitChannelComplete( (MODDMA::CHANNELS)config->channelNum());
mark2r2 0:08a4d61cd84c 69 dma.Disable( (MODDMA::CHANNELS)config->channelNum() );
mark2r2 0:08a4d61cd84c 70
mark2r2 0:08a4d61cd84c 71 // Configurations have two IRQ callbacks for TC and Err so you
mark2r2 0:08a4d61cd84c 72 // know which you are processing. However, if you want to use
mark2r2 0:08a4d61cd84c 73 // a single callback function you can tell what type of IRQ
mark2r2 0:08a4d61cd84c 74 // is being processed thus:-
mark2r2 0:08a4d61cd84c 75 if (dma.irqType() == MODDMA::TcIrq) {
mark2r2 0:08a4d61cd84c 76 led3 = 1;
mark2r2 0:08a4d61cd84c 77 dma.clearTcIrq();
mark2r2 0:08a4d61cd84c 78 }
mark2r2 0:08a4d61cd84c 79 if (dma.irqType() == MODDMA::ErrIrq) {
mark2r2 0:08a4d61cd84c 80 led4 = 1;
mark2r2 0:08a4d61cd84c 81 dma.clearErrIrq();
mark2r2 0:08a4d61cd84c 82 }
mark2r2 0:08a4d61cd84c 83 }
mark2r2 0:08a4d61cd84c 84
mark2r2 0:08a4d61cd84c 85 // Configuration cakllback on Error
mark2r2 0:08a4d61cd84c 86 void ERR0_callback(void) {
mark2r2 0:08a4d61cd84c 87 error("Oh no! My Mbed exploded! :( Only kidding, find the problem");
mark2r2 0:08a4d61cd84c 88 }
mark2r2 0:08a4d61cd84c 89