I2C code testing

Dependencies:   FreescaleIAP SimpleDMA mbed-rtos mbed

Fork of COM_MNG_TMTC_SIMPLE_pl123 by Siva ram

Committer:
ee12b079
Date:
Wed Mar 30 14:04:48 2016 +0000
Revision:
139:17353d6311ce
Parent:
101:bece931236a2
PL I2C worked

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shreeshas95 101:bece931236a2 1 #ifdef TARGET_KL46Z
shreeshas95 101:bece931236a2 2 class dmaSPISlave : public SPISlave{
shreeshas95 101:bece931236a2 3 public:
shreeshas95 101:bece931236a2 4 /*
shreeshas95 101:bece931236a2 5 @brief: constructor : initialise the spi slave pins
shreeshas95 101:bece931236a2 6 @param: mosi, miso, sclk, ssel
shreeshas95 101:bece931236a2 7 @return: none
shreeshas95 101:bece931236a2 8 */
shreeshas95 101:bece931236a2 9 dmaSPISlave(PinName mosi, PinName miso, PinName sclk, PinName ssel) : SPISlave(mosi, miso, sclk, ssel){
shreeshas95 101:bece931236a2 10 // trigger appropriate spi for dma
shreeshas95 101:bece931236a2 11 if(_spi.spi == SPI0){
shreeshas95 101:bece931236a2 12 read_dma.trigger(Trigger_SPI0_RX);
shreeshas95 101:bece931236a2 13 }
shreeshas95 101:bece931236a2 14 else{
shreeshas95 101:bece931236a2 15 read_dma.trigger(Trigger_SPI1_RX);
shreeshas95 101:bece931236a2 16 }
shreeshas95 101:bece931236a2 17
shreeshas95 101:bece931236a2 18 // set source for spi slave dma : mosi
shreeshas95 101:bece931236a2 19 read_dma.source(&_spi.spi->DL, false);
shreeshas95 101:bece931236a2 20 }
shreeshas95 101:bece931236a2 21
shreeshas95 101:bece931236a2 22 /*
shreeshas95 101:bece931236a2 23 @brief: initialise the dma buffer to store the recevied data
shreeshas95 101:bece931236a2 24 @param: read_data : pointer to the buffer
shreeshas95 101:bece931236a2 25 len : length in bytes to store in the buffer
shreeshas95 101:bece931236a2 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 101:bece931236a2 27 @return: none
shreeshas95 101:bece931236a2 28 */
shreeshas95 101:bece931236a2 29 void bulkRead_init(uint8_t *read_data, int len, void (*fun)(void) ){
shreeshas95 101:bece931236a2 30 // acquire();
shreeshas95 101:bece931236a2 31 _spi.spi->C2 |= SPI_C2_RXDMAE_MASK;
shreeshas95 101:bece931236a2 32
shreeshas95 101:bece931236a2 33 // auto increment is true
shreeshas95 101:bece931236a2 34 read_dma.destination(read_data, true);
shreeshas95 101:bece931236a2 35
shreeshas95 101:bece931236a2 36 // specify length
shreeshas95 101:bece931236a2 37 length = len;
shreeshas95 101:bece931236a2 38
shreeshas95 101:bece931236a2 39 // attach interrupt function
shreeshas95 101:bece931236a2 40 read_dma.attach(fun);
shreeshas95 101:bece931236a2 41
shreeshas95 101:bece931236a2 42 }
shreeshas95 101:bece931236a2 43
shreeshas95 101:bece931236a2 44 /*
shreeshas95 101:bece931236a2 45 @brief: start the dma read process : has to be done everytime the buffer gets filled, can be used repeatedly
shreeshas95 101:bece931236a2 46 @param: none
shreeshas95 101:bece931236a2 47 @return: none
shreeshas95 101:bece931236a2 48 */
shreeshas95 101:bece931236a2 49 void bulkRead_start(){
shreeshas95 101:bece931236a2 50 // start the read_dma
shreeshas95 101:bece931236a2 51 read_dma.start(length);
shreeshas95 101:bece931236a2 52 }
shreeshas95 101:bece931236a2 53
shreeshas95 101:bece931236a2 54 /*
shreeshas95 101:bece931236a2 55 @brief: end dma process and return back to normal spi mode
shreeshas95 101:bece931236a2 56 @param: none
shreeshas95 101:bece931236a2 57 @return: none
shreeshas95 101:bece931236a2 58 */
shreeshas95 101:bece931236a2 59 void bulkRead_end(){
shreeshas95 101:bece931236a2 60 // turn off dma
shreeshas95 101:bece931236a2 61 _spi.spi->C2 &= ~(SPI_C2_RXDMAE_MASK);
shreeshas95 101:bece931236a2 62 }
shreeshas95 101:bece931236a2 63
shreeshas95 101:bece931236a2 64 private:
shreeshas95 101:bece931236a2 65 int length;
shreeshas95 101:bece931236a2 66 SimpleDMA read_dma;
shreeshas95 101:bece931236a2 67 };
shreeshas95 101:bece931236a2 68 #endif