SPI slave DMA-read program for FRDMKL46Z, verified, working

Dependencies:   SimpleDMA mbed-rtos mbed

Committer:
shreeshas95
Date:
Fri Apr 22 17:58:23 2016 +0000
Revision:
3:e59d61aac1e1
Parent:
2:16545dbc88ae
Child:
4:33fc4fec3087
added new function restart

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shreeshas95 0:f0f5102ed9ca 1 #include "mbed.h"
shreeshas95 0:f0f5102ed9ca 2 #include "SimpleDMA.h"
shreeshas95 0:f0f5102ed9ca 3 #include "dmaSPIslave.h"
shreeshas95 0:f0f5102ed9ca 4
shreeshas95 3:e59d61aac1e1 5 #define PAYLOAD_LENGTH 6723
shreeshas95 1:3cceef118195 6
shreeshas95 3:e59d61aac1e1 7 #define PAY_SPI_MOSI PTE18
shreeshas95 3:e59d61aac1e1 8 #define PAY_SPI_MISO PTE19
shreeshas95 3:e59d61aac1e1 9 #define PAY_SPI_CLK PTE17
shreeshas95 3:e59d61aac1e1 10 #define PAY_SPI_CS PTE16
shreeshas95 3:e59d61aac1e1 11
shreeshas95 3:e59d61aac1e1 12 dmaSPISlave spi(PAY_SPI_MOSI, PAY_SPI_MISO, PAY_SPI_CLK, PAY_SPI_CS);
shreeshas95 0:f0f5102ed9ca 13 RawSerial pc(USBTX, USBRX);
shreeshas95 3:e59d61aac1e1 14 //DigitalOut ledg(LED_GREEN);
shreeshas95 3:e59d61aac1e1 15 //DigitalOut ledr(LED_RED);
shreeshas95 0:f0f5102ed9ca 16
shreeshas95 1:3cceef118195 17 bool flag = false;
shreeshas95 1:3cceef118195 18
shreeshas95 1:3cceef118195 19 void do_this(void){
shreeshas95 1:3cceef118195 20 flag = true;
shreeshas95 1:3cceef118195 21 }
shreeshas95 3:e59d61aac1e1 22 void do_this2(void){
shreeshas95 3:e59d61aac1e1 23 flag = true;
shreeshas95 3:e59d61aac1e1 24 }
shreeshas95 1:3cceef118195 25
shreeshas95 0:f0f5102ed9ca 26 int main(){
shreeshas95 3:e59d61aac1e1 27 // ledr = 1;
shreeshas95 3:e59d61aac1e1 28 // ledg = 1;
shreeshas95 3:e59d61aac1e1 29 pc.baud(1200);
shreeshas95 0:f0f5102ed9ca 30 pc.printf("inside main\r\n");
shreeshas95 1:3cceef118195 31 spi.format(8,0);
shreeshas95 3:e59d61aac1e1 32 spi.frequency(1000000);
shreeshas95 0:f0f5102ed9ca 33
shreeshas95 1:3cceef118195 34 uint8_t buffer[PAYLOAD_LENGTH] = {0};
shreeshas95 0:f0f5102ed9ca 35 pc.printf("welcome to dma test, start sending data now\r\n");
shreeshas95 2:16545dbc88ae 36
shreeshas95 2:16545dbc88ae 37 // initialise the buffer for dma
shreeshas95 2:16545dbc88ae 38 spi.bulkRead_init(buffer, PAYLOAD_LENGTH, &do_this);
shreeshas95 2:16545dbc88ae 39 // start dma read
shreeshas95 2:16545dbc88ae 40 spi.bulkRead_start();
shreeshas95 3:e59d61aac1e1 41 int count = 0;
shreeshas95 0:f0f5102ed9ca 42
shreeshas95 1:3cceef118195 43 while(true){
shreeshas95 3:e59d61aac1e1 44 // int i = 0;
shreeshas95 3:e59d61aac1e1 45 // while(i < PAYLOAD_LENGTH){
shreeshas95 3:e59d61aac1e1 46 // if(spi.receive()){
shreeshas95 3:e59d61aac1e1 47 // buffer[i] = spi.read();
shreeshas95 3:e59d61aac1e1 48 // ++i;
shreeshas95 3:e59d61aac1e1 49 // }
shreeshas95 3:e59d61aac1e1 50 // }
shreeshas95 3:e59d61aac1e1 51 // ledr = !ledr;
shreeshas95 3:e59d61aac1e1 52 // for(int j = 0 ; j < PAYLOAD_LENGTH ; ++j){
shreeshas95 3:e59d61aac1e1 53 // printf("%02x ", buffer[j]);
shreeshas95 3:e59d61aac1e1 54 // }
shreeshas95 3:e59d61aac1e1 55
shreeshas95 3:e59d61aac1e1 56
shreeshas95 1:3cceef118195 57 if(flag){
shreeshas95 3:e59d61aac1e1 58 count++;
shreeshas95 1:3cceef118195 59 flag = false;
shreeshas95 3:e59d61aac1e1 60 // ledg = !ledg;
shreeshas95 2:16545dbc88ae 61
shreeshas95 2:16545dbc88ae 62 // for(int i = 0 ; i < PAYLOAD_LENGTH ; ++i){
shreeshas95 2:16545dbc88ae 63 // pc.printf("%02x ", buffer[i]);
shreeshas95 2:16545dbc88ae 64 // }
shreeshas95 3:e59d61aac1e1 65 pc.printf("DATA RECEIVED\r\n");
shreeshas95 3:e59d61aac1e1 66
shreeshas95 2:16545dbc88ae 67 // start dma again after handling the data
shreeshas95 3:e59d61aac1e1 68 if(count == 3){
shreeshas95 3:e59d61aac1e1 69 count = 0;
shreeshas95 3:e59d61aac1e1 70 spi.bulkRead_end();
shreeshas95 3:e59d61aac1e1 71 pc.printf("tried END\r\n");
shreeshas95 3:e59d61aac1e1 72 wait(1);
shreeshas95 3:e59d61aac1e1 73 pc.printf("restarting the procedure\r\n");
shreeshas95 3:e59d61aac1e1 74 spi.bulkRead_restart();
shreeshas95 3:e59d61aac1e1 75 spi.bulkRead_start();
shreeshas95 3:e59d61aac1e1 76 }
shreeshas95 3:e59d61aac1e1 77 else{
shreeshas95 3:e59d61aac1e1 78 spi.bulkRead_start();
shreeshas95 3:e59d61aac1e1 79 }
shreeshas95 1:3cceef118195 80 }
shreeshas95 0:f0f5102ed9ca 81 }
shreeshas95 0:f0f5102ed9ca 82
shreeshas95 0:f0f5102ed9ca 83 }