test

Dependencies:   SimpleDMA mbed-rtos mbed

Fork of spiDMAtest by Shreesha S

Committer:
Piasiv1206
Date:
Mon Dec 21 08:57:48 2015 +0000
Revision:
3:972fa06ef0aa
Parent:
2:16545dbc88ae
gfkiuk

Who changed what in which revision?

UserRevisionLine numberNew 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 1:3cceef118195 41
shreeshas95 1:3cceef118195 42 }
shreeshas95 1:3cceef118195 43
shreeshas95 2:16545dbc88ae 44 /*
shreeshas95 2:16545dbc88ae 45 @brief: start the dma read process : has to be done everytime the buffer gets filled, can be used repeatedly
shreeshas95 2:16545dbc88ae 46 @param: none
shreeshas95 2:16545dbc88ae 47 @return: none
shreeshas95 2:16545dbc88ae 48 */
shreeshas95 1:3cceef118195 49 void bulkRead_start(){
shreeshas95 0:f0f5102ed9ca 50 // start the read_dma
shreeshas95 0:f0f5102ed9ca 51 read_dma.start(length);
shreeshas95 1:3cceef118195 52 }
shreeshas95 2:16545dbc88ae 53
shreeshas95 2:16545dbc88ae 54 /*
shreeshas95 2:16545dbc88ae 55 @brief: end dma process and return back to normal spi mode
shreeshas95 2:16545dbc88ae 56 @param: none
shreeshas95 2:16545dbc88ae 57 @return: none
shreeshas95 2:16545dbc88ae 58 */
shreeshas95 2:16545dbc88ae 59 void bulkRead_end(){
shreeshas95 2:16545dbc88ae 60 // turn off dma
shreeshas95 2:16545dbc88ae 61 _spi.spi->C2 &= ~(SPI_C2_RXDMAE_MASK);
shreeshas95 2:16545dbc88ae 62 }
shreeshas95 0:f0f5102ed9ca 63
shreeshas95 0:f0f5102ed9ca 64 private:
shreeshas95 1:3cceef118195 65 int length;
shreeshas95 0:f0f5102ed9ca 66 SimpleDMA read_dma;
shreeshas95 0:f0f5102ed9ca 67 };
shreeshas95 0:f0f5102ed9ca 68 #endif