DMA for Science thread
Dependencies: SimpleDMA mbed-rtos mbed
Fork of spiDMAtest by
dmaSPIslave.h@3:e59d61aac1e1, 2016-04-22 (annotated)
- Committer:
- shreeshas95
- Date:
- Fri Apr 22 17:58:23 2016 +0000
- Revision:
- 3:e59d61aac1e1
- Parent:
- 2:16545dbc88ae
added new function restart
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
shreeshas95 | 0:f0f5102ed9ca | 1 | #ifdef TARGET_KL46Z |
shreeshas95 | 0:f0f5102ed9ca | 2 | class dmaSPISlave : public SPISlave{ |
shreeshas95 | 0:f0f5102ed9ca | 3 | public: |
shreeshas95 | 2:16545dbc88ae | 4 | /* |
shreeshas95 | 2:16545dbc88ae | 5 | @brief: constructor : initialise the spi slave pins |
shreeshas95 | 2:16545dbc88ae | 6 | @param: mosi, miso, sclk, ssel |
shreeshas95 | 2:16545dbc88ae | 7 | @return: none |
shreeshas95 | 2:16545dbc88ae | 8 | */ |
shreeshas95 | 0:f0f5102ed9ca | 9 | dmaSPISlave(PinName mosi, PinName miso, PinName sclk, PinName ssel) : SPISlave(mosi, miso, sclk, ssel){ |
shreeshas95 | 0:f0f5102ed9ca | 10 | // trigger appropriate spi for dma |
shreeshas95 | 0:f0f5102ed9ca | 11 | if(_spi.spi == SPI0){ |
shreeshas95 | 0:f0f5102ed9ca | 12 | read_dma.trigger(Trigger_SPI0_RX); |
shreeshas95 | 0:f0f5102ed9ca | 13 | } |
shreeshas95 | 0:f0f5102ed9ca | 14 | else{ |
shreeshas95 | 0:f0f5102ed9ca | 15 | read_dma.trigger(Trigger_SPI1_RX); |
shreeshas95 | 0:f0f5102ed9ca | 16 | } |
shreeshas95 | 0:f0f5102ed9ca | 17 | |
shreeshas95 | 0:f0f5102ed9ca | 18 | // set source for spi slave dma : mosi |
shreeshas95 | 0:f0f5102ed9ca | 19 | read_dma.source(&_spi.spi->DL, false); |
shreeshas95 | 0:f0f5102ed9ca | 20 | } |
shreeshas95 | 0:f0f5102ed9ca | 21 | |
shreeshas95 | 2:16545dbc88ae | 22 | /* |
shreeshas95 | 2:16545dbc88ae | 23 | @brief: initialise the dma buffer to store the recevied data |
shreeshas95 | 2:16545dbc88ae | 24 | @param: read_data : pointer to the buffer |
shreeshas95 | 2:16545dbc88ae | 25 | len : length in bytes to store in the buffer |
shreeshas95 | 2:16545dbc88ae | 26 | 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 |
shreeshas95 | 2:16545dbc88ae | 27 | @return: none |
shreeshas95 | 2:16545dbc88ae | 28 | */ |
shreeshas95 | 1:3cceef118195 | 29 | void bulkRead_init(uint8_t *read_data, int len, void (*fun)(void) ){ |
shreeshas95 | 0:f0f5102ed9ca | 30 | // acquire(); |
shreeshas95 | 0:f0f5102ed9ca | 31 | _spi.spi->C2 |= SPI_C2_RXDMAE_MASK; |
shreeshas95 | 0:f0f5102ed9ca | 32 | |
shreeshas95 | 0:f0f5102ed9ca | 33 | // auto increment is true |
shreeshas95 | 0:f0f5102ed9ca | 34 | read_dma.destination(read_data, true); |
shreeshas95 | 0:f0f5102ed9ca | 35 | |
shreeshas95 | 1:3cceef118195 | 36 | // specify length |
shreeshas95 | 1:3cceef118195 | 37 | length = len; |
shreeshas95 | 1:3cceef118195 | 38 | |
shreeshas95 | 1:3cceef118195 | 39 | // attach interrupt function |
shreeshas95 | 1:3cceef118195 | 40 | read_dma.attach(fun); |
shreeshas95 | 3:e59d61aac1e1 | 41 | } |
shreeshas95 | 3:e59d61aac1e1 | 42 | |
shreeshas95 | 3:e59d61aac1e1 | 43 | void bulkRead_restart(){ |
shreeshas95 | 3:e59d61aac1e1 | 44 | _spi.spi->C2 |= SPI_C2_RXDMAE_MASK; |
shreeshas95 | 1:3cceef118195 | 45 | } |
shreeshas95 | 1:3cceef118195 | 46 | |
shreeshas95 | 2:16545dbc88ae | 47 | /* |
shreeshas95 | 2:16545dbc88ae | 48 | @brief: start the dma read process : has to be done everytime the buffer gets filled, can be used repeatedly |
shreeshas95 | 2:16545dbc88ae | 49 | @param: none |
shreeshas95 | 2:16545dbc88ae | 50 | @return: none |
shreeshas95 | 2:16545dbc88ae | 51 | */ |
shreeshas95 | 1:3cceef118195 | 52 | void bulkRead_start(){ |
shreeshas95 | 0:f0f5102ed9ca | 53 | // start the read_dma |
shreeshas95 | 0:f0f5102ed9ca | 54 | read_dma.start(length); |
shreeshas95 | 1:3cceef118195 | 55 | } |
shreeshas95 | 2:16545dbc88ae | 56 | |
shreeshas95 | 2:16545dbc88ae | 57 | /* |
shreeshas95 | 2:16545dbc88ae | 58 | @brief: end dma process and return back to normal spi mode |
shreeshas95 | 2:16545dbc88ae | 59 | @param: none |
shreeshas95 | 2:16545dbc88ae | 60 | @return: none |
shreeshas95 | 2:16545dbc88ae | 61 | */ |
shreeshas95 | 2:16545dbc88ae | 62 | void bulkRead_end(){ |
shreeshas95 | 2:16545dbc88ae | 63 | // turn off dma |
shreeshas95 | 2:16545dbc88ae | 64 | _spi.spi->C2 &= ~(SPI_C2_RXDMAE_MASK); |
shreeshas95 | 2:16545dbc88ae | 65 | } |
shreeshas95 | 0:f0f5102ed9ca | 66 | |
shreeshas95 | 0:f0f5102ed9ca | 67 | private: |
shreeshas95 | 1:3cceef118195 | 68 | int length; |
shreeshas95 | 0:f0f5102ed9ca | 69 | SimpleDMA read_dma; |
shreeshas95 | 0:f0f5102ed9ca | 70 | }; |
shreeshas95 | 0:f0f5102ed9ca | 71 | #endif |