Amador Valley High School Robotics Team / MODDMA

Fork of MODDMA by Andy K

Committer:
AjK
Date:
Sat Feb 05 08:53:26 2011 +0000
Revision:
8:cb4d323ce6fd
Parent:
7:347110c7aefc
1.5 See ChangeLog.c

Who changed what in which revision?

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