test
Dependencies: SimpleDMA mbed-rtos mbed
Fork of spiDMAtest by
dmaSPIslave.h
- Committer:
- shreeshas95
- Date:
- 2015-07-16
- Revision:
- 2:16545dbc88ae
- Parent:
- 1:3cceef118195
File content as of revision 2:16545dbc88ae:
#ifdef TARGET_KL46Z class dmaSPISlave : public SPISlave{ public: /* @brief: constructor : initialise the spi slave pins @param: mosi, miso, sclk, ssel @return: none */ dmaSPISlave(PinName mosi, PinName miso, PinName sclk, PinName ssel) : SPISlave(mosi, miso, sclk, ssel){ // trigger appropriate spi for dma if(_spi.spi == SPI0){ read_dma.trigger(Trigger_SPI0_RX); } else{ read_dma.trigger(Trigger_SPI1_RX); } // set source for spi slave dma : mosi read_dma.source(&_spi.spi->DL, false); } /* @brief: initialise the dma buffer to store the recevied data @param: read_data : pointer to the buffer len : length in bytes to store in the buffer fun : address of the function to attach to the dma interrupt, interrupt is called when the len num of bytes are written to the buffer @return: none */ void bulkRead_init(uint8_t *read_data, int len, void (*fun)(void) ){ // acquire(); _spi.spi->C2 |= SPI_C2_RXDMAE_MASK; // auto increment is true read_dma.destination(read_data, true); // specify length length = len; // attach interrupt function read_dma.attach(fun); } /* @brief: start the dma read process : has to be done everytime the buffer gets filled, can be used repeatedly @param: none @return: none */ void bulkRead_start(){ // start the read_dma read_dma.start(length); } /* @brief: end dma process and return back to normal spi mode @param: none @return: none */ void bulkRead_end(){ // turn off dma _spi.spi->C2 &= ~(SPI_C2_RXDMAE_MASK); } private: int length; SimpleDMA read_dma; }; #endif