working version

Dependencies:   mbed mbed-rtos SimpleDMA FreescaleIAP eeprom

Fork of CDMS_CODE_FM_28JAN2017 by samp Srinivasan

Committer:
samp1234
Date:
Sun Apr 03 15:35:53 2022 +0000
Revision:
357:f3d48d62e00e
Parent:
338:d63eb331a67d
First commit test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ee12b079 338:d63eb331a67d 1 #ifndef DMASPISLAVE_H // To make sure you don't declare the function more than once by including the header multiple times.
ee12b079 338:d63eb331a67d 2 #define DMASPISLAVE_H
ee12b079 338:d63eb331a67d 3
shreeshas95 101:bece931236a2 4 #ifdef TARGET_KL46Z
shreeshas95 101:bece931236a2 5 class dmaSPISlave : public SPISlave{
shreeshas95 101:bece931236a2 6 public:
shreeshas95 101:bece931236a2 7 /*
shreeshas95 101:bece931236a2 8 @brief: constructor : initialise the spi slave pins
shreeshas95 101:bece931236a2 9 @param: mosi, miso, sclk, ssel
shreeshas95 101:bece931236a2 10 @return: none
shreeshas95 101:bece931236a2 11 */
shreeshas95 101:bece931236a2 12 dmaSPISlave(PinName mosi, PinName miso, PinName sclk, PinName ssel) : SPISlave(mosi, miso, sclk, ssel){
shreeshas95 101:bece931236a2 13 // trigger appropriate spi for dma
shreeshas95 101:bece931236a2 14 if(_spi.spi == SPI0){
shreeshas95 101:bece931236a2 15 read_dma.trigger(Trigger_SPI0_RX);
shreeshas95 101:bece931236a2 16 }
shreeshas95 101:bece931236a2 17 else{
shreeshas95 101:bece931236a2 18 read_dma.trigger(Trigger_SPI1_RX);
shreeshas95 101:bece931236a2 19 }
shreeshas95 101:bece931236a2 20
shreeshas95 101:bece931236a2 21 // set source for spi slave dma : mosi
shreeshas95 101:bece931236a2 22 read_dma.source(&_spi.spi->DL, false);
shreeshas95 101:bece931236a2 23 }
shreeshas95 101:bece931236a2 24
shreeshas95 101:bece931236a2 25 /*
shreeshas95 101:bece931236a2 26 @brief: initialise the dma buffer to store the recevied data
shreeshas95 101:bece931236a2 27 @param: read_data : pointer to the buffer
shreeshas95 101:bece931236a2 28 len : length in bytes to store in the buffer
shreeshas95 101:bece931236a2 29 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 101:bece931236a2 30 @return: none
shreeshas95 101:bece931236a2 31 */
shreeshas95 101:bece931236a2 32 void bulkRead_init(uint8_t *read_data, int len, void (*fun)(void) ){
shreeshas95 101:bece931236a2 33 // acquire();
shreeshas95 101:bece931236a2 34 _spi.spi->C2 |= SPI_C2_RXDMAE_MASK;
shreeshas95 101:bece931236a2 35
shreeshas95 101:bece931236a2 36 // auto increment is true
shreeshas95 101:bece931236a2 37 read_dma.destination(read_data, true);
shreeshas95 101:bece931236a2 38
shreeshas95 101:bece931236a2 39 // specify length
shreeshas95 101:bece931236a2 40 length = len;
shreeshas95 101:bece931236a2 41
shreeshas95 101:bece931236a2 42 // attach interrupt function
shreeshas95 101:bece931236a2 43 read_dma.attach(fun);
shreeshas95 101:bece931236a2 44
shreeshas95 101:bece931236a2 45 }
shreeshas95 101:bece931236a2 46
ee12b079 245:da9d1bd999da 47 void bulkRead_pause(){
ee12b079 245:da9d1bd999da 48 read_dma.attach(NULL);
ee12b079 245:da9d1bd999da 49 }
ee12b079 245:da9d1bd999da 50
ee12b079 245:da9d1bd999da 51 void bulkRead_resume(void (*fun)(void)){
ee12b079 245:da9d1bd999da 52 read_dma.attach(fun);
ee12b079 245:da9d1bd999da 53 }
shreeshas95 101:bece931236a2 54 /*
shreeshas95 101:bece931236a2 55 @brief: start the dma read process : has to be done everytime the buffer gets filled, can be used repeatedly
shreeshas95 101:bece931236a2 56 @param: none
shreeshas95 101:bece931236a2 57 @return: none
shreeshas95 101:bece931236a2 58 */
shreeshas95 101:bece931236a2 59 void bulkRead_start(){
shreeshas95 101:bece931236a2 60 // start the read_dma
shreeshas95 101:bece931236a2 61 read_dma.start(length);
shreeshas95 101:bece931236a2 62 }
shreeshas95 101:bece931236a2 63
shreeshas95 101:bece931236a2 64 /*
ee12b079 178:5b42117b2ef1 65 @brief: end dma process and return back to normal spi mode, there should not be an unfinished 'start' when running end
shreeshas95 101:bece931236a2 66 @param: none
shreeshas95 101:bece931236a2 67 @return: none
shreeshas95 101:bece931236a2 68 */
shreeshas95 101:bece931236a2 69 void bulkRead_end(){
shreeshas95 101:bece931236a2 70 // turn off dma
shreeshas95 101:bece931236a2 71 _spi.spi->C2 &= ~(SPI_C2_RXDMAE_MASK);
shreeshas95 101:bece931236a2 72 }
shreeshas95 101:bece931236a2 73
ee12b079 178:5b42117b2ef1 74 /*
ee12b079 178:5b42117b2ef1 75 @brief: restart the dma process after 'end'ing
ee12b079 178:5b42117b2ef1 76 @param: none
ee12b079 178:5b42117b2ef1 77 @return: none
ee12b079 178:5b42117b2ef1 78 */
ee12b079 178:5b42117b2ef1 79 void bulkRead_restart(){
ee12b079 178:5b42117b2ef1 80 _spi.spi->C2 |= SPI_C2_RXDMAE_MASK;
ee12b079 178:5b42117b2ef1 81 }
shreeshas95 101:bece931236a2 82 private:
shreeshas95 101:bece931236a2 83 int length;
shreeshas95 101:bece931236a2 84 SimpleDMA read_dma;
shreeshas95 101:bece931236a2 85 };
ee12b079 245:da9d1bd999da 86 #endif
ee12b079 338:d63eb331a67d 87 #endif