A simple library to access the DMA functionality.
Fork of SimpleDMA by
SimpleDMA.h
- Committer:
- Sissors
- Date:
- 2013-10-18
- Revision:
- 0:d77ea45fa625
- Child:
- 1:0b73b00bcee8
File content as of revision 0:d77ea45fa625:
#ifndef SIMPLEDMA_H #define SIMPLEDMA_H #include "mbed.h" #include "SimpleDMA_KL25.h" /** * SimpleDMA, DMA made simple! (Okay that was bad) * * A class to easily make basic DMA operations happen. Not all features * of the DMA peripherals are used, but the main ones are: From and to memory * and peripherals, either continiously or triggered */ class SimpleDMA { public: SimpleDMA(int channel = 0); /** * Set the source of the DMA transfer * * Autoincrement increments the pointer after each transfer. If the source * is an array this should be true, if it is a peripheral or a single memory * location it should be false. * * The source can be any pointer to any memory location. Automatically * the wordsize is calculated depending on the type, if required you can * also override this. * * @param pointer - pointer to the memory location * @param autoinc - should the pointer be incremented by the DMA module * @param size - size of the transfer (optional, generally can be omitted) * @return - 0 on success */ template<typename Type> int source(Type* pointer, bool autoinc, int size = sizeof(Type*)) { return setMemory((uint32_t)pointer, size, true, autoinc); } /** * Set the destination of the DMA transfer * * Autoincrement increments the pointer after each transfer. If the source * is an array this should be true, if it is a peripheral or a single memory * location it should be false. * * The destination can be any pointer to any memory location. Automatically * the wordsize is calculated depending on the type, if required you can * also override this. * * @param pointer - pointer to the memory location * @param autoinc - should the pointer be incremented by the DMA module * @param size - size of the transfer (optional, generally can be omitted) * @return - 0 on success */ template<typename Type> int destination(Type* pointer, bool autoinc, int size = sizeof(Type*)) { return setMemory((uint32_t)pointer, size, false, autoinc); } /** * Set the trigger for the DMA operation * * In SimpleDMA_[yourdevice].h you can find the names of the different triggers. * Trigger_ALWAYS is defined for all devices, it will simply move the data * as fast as possible. Used for memory-memory transfers. If nothing else is set * that will be used by default. * * @param trig - trigger to use * @param return - 0 on success */ int trigger(SimpleDMA_Trigger trig); /** * Start the transfer * * @param length - number of BYTES to be moved by the DMA */ int start(int length); /** * Set the DMA channel * * @param chan - DMA channel to use */ void channel(int chan); /** * Is the DMA channel busy * * @return - true if it is busy */ bool isBusy( void ); protected: int setMemory(uint32_t address, int wordsize, bool source, bool autoinc); int _channel; }; #endif