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
Diff: example1.cpp
- Revision:
- 4:67f327b9278e
- Parent:
- 0:c409efd8df78
- Child:
- 5:c39b22fa0c60
--- a/example1.cpp Tue Nov 23 15:08:21 2010 +0000
+++ b/example1.cpp Tue Nov 23 15:33:30 2010 +0000
@@ -2,24 +2,78 @@
#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);
+Serial pc(USBTX, USBRX);
+
+// Function prototypes for IRQ callbacks.
+// See definitions following main() below.
+void dmaTCCallback(void);
+void dmaERRCallback(void);
+void TC0_callback(void);
+void ERR0_callback(void);
-void dmaCallback(void) {
+int main() {
+ char s[] = "**DMA** ABCDEFGHIJKLMNOPQRSTUVWXYZ **DMA**";
+
+ pc.baud(PC_BAUD);
+
+ dma.isrIntTCStat.attach(&dmaTCCallback);
+ dma.isrIntErrStat.attach(&dmaERRCallback);
+
+ 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 )
+ ; // config end
+
+ // Attach configuration callbacks if required.
+ config->isrIntTCStat->attach(&TC0_callback);
+ config->isrIntErrStat->attach(&ERR0_callback);
+
+ // Setup the configuration.
+ dma.Setup(config);
+
+ //dma.Enable( MODDMA::Channel_0 );
+ dma.Enable( config->channelNum() );
+
+ while (1) {
+ led1 = !led1;
+ wait(0.25);
+ }
+}
+
+// Main controller TC IRQ callback
+void dmaTCCallback(void) {
led2 = 1;
}
-void C0callback(void) {
+// Main controller ERR IRQ callback
+void dmaERRCallback(void) {
+ error("Oh no! My Mbed exploded! :( Only kidding, find the problem");
+}
+
+// Configuration callback on TC
+void TC0_callback(void) {
MODDMA_Config *config = dma.getConfig();
dma.haltAndWaitChannelComplete( (MODDMA::CHANNELS)config->channelNum());
dma.Disable( (MODDMA::CHANNELS)config->channelNum() );
+
+ // Configurations have two IRQ callbacks for TC and Err so you
+ // know which you are processing. However, if you want to use
+ // a single callback function you can tell what type of IRQ
+ // is being processed thus:-
if (dma.irqType() == MODDMA::TcIrq) {
led3 = 1;
dma.clearTcIrq();
@@ -30,42 +84,9 @@
}
}
-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);
- }
+// Configuration cakllback on Error
+void ERR0_callback(void) {
+ error("Oh no! My Mbed exploded! :( Only kidding, find the problem");
}
#endif