test

Dependencies:   SimpleDMA mbed-rtos mbed

Fork of spiDMAtest by Siva ram

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