A simple library to access the DMA functionality.
Fork of SimpleDMA by
Diff: SimpleDMA.h
- Revision:
- 2:fe2fcaa72434
- Parent:
- 1:0b73b00bcee8
- Child:
- 3:34f5bf8adfa0
--- a/SimpleDMA.h Fri Dec 20 20:48:17 2013 +0000 +++ b/SimpleDMA.h Sun Dec 22 21:42:49 2013 +0000 @@ -1,8 +1,11 @@ #ifndef SIMPLEDMA_H #define SIMPLEDMA_H +#ifdef RTOS_H +#include "rtos.h" +#endif + #include "mbed.h" -#include "rtos.h" #include "SimpleDMA_KL25.h" @@ -35,7 +38,7 @@ */ template<typename Type> int source(Type* pointer, bool autoinc, int size = sizeof(Type*)) { - return setMemory((uint32_t)pointer, size, true, autoinc); + return setAddress((uint32_t)pointer, size, true, autoinc); } /** @@ -56,7 +59,7 @@ */ template<typename Type> int destination(Type* pointer, bool autoinc, int size = sizeof(Type*)) { - return setMemory((uint32_t)pointer, size, false, autoinc); + return setAddress((uint32_t)pointer, size, false, autoinc); } /** @@ -102,13 +105,14 @@ _callback.attach(object, member); } -void wait(void) { +#ifdef RTOS_H +void wait(int length) { id = Thread::gettid(); this->attach(this, &SimpleDMA::waitCallback); - this->start(8); + this->start(length); Thread::signal_wait(0x1); } - +#endif protected: /** @@ -117,15 +121,17 @@ * @param chan - DMA channel to use */ void channel(int chan); +int setAddress(uint32_t address, int wordsize, bool source, bool autoinc); -int setMemory(uint32_t address, int wordsize, bool source, bool autoinc); int _channel; +uint32_t SAR, DAR, DSR, DCR; +uint8_t CHCFG; + +//IRQ handlers FunctionPointer _callback; bool irq_en; void irq_handler(void); -//IRQ handlers - static SimpleDMA *irq_owner[4]; static void irq_handler0( void ) { @@ -144,14 +150,14 @@ if (irq_owner[3]!=NULL) irq_owner[3]->irq_handler(); } -public: + + +#ifdef RTOS_H osThreadId id; void waitCallback(void) { - - //id = Thread::gettid(); - osSignalSet(id, 0x1); - + osSignalSet(id, 0x1); } +#endif }; #endif \ No newline at end of file