Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: FirstTest WaveSim IO-dma-memmem DACDMAfuncgenlib ... more
example1.cpp@8:cb4d323ce6fd, 2011-02-05 (annotated)
- 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?
| User | Revision | Line number | New 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 |