Dependencies:   mbed

Committer:
BenRJG
Date:
Sun Apr 01 15:43:02 2018 +0000
Revision:
1:acc66d3a1a1c
Child:
2:b615682e3e4f
Converted supplied SPI code to separate SPI files

Who changed what in which revision?

UserRevisionLine numberNew contents of line
BenRJG 1:acc66d3a1a1c 1 #include "SPI.h"
BenRJG 1:acc66d3a1a1c 2
BenRJG 1:acc66d3a1a1c 3 SPI spi(PA_7, PA_6, PA_5); // Ordered as: mosi, miso, sclk could use forth parameter ssel
BenRJG 1:acc66d3a1a1c 4 // However using multi SPI devices within FPGA with a seperate chip select
BenRJG 1:acc66d3a1a1c 5 SPI spi_cmd(PA_7, PA_6, PA_5); // NB another instance call spi_cmd for 8 bit SPI dataframe see later line 37
BenRJG 1:acc66d3a1a1c 6 // For each device NB PA_7 PA_6 PA_5 are D11 D12 D13 respectively
BenRJG 1:acc66d3a1a1c 7 DigitalOut cs(PC_6); // Chip Select for Basic Outputs to illuminate Onboard FPGA DEO nano LEDs CN7 pin 1
BenRJG 1:acc66d3a1a1c 8 DigitalOut LCD_cs(PB_15); // Chip Select for the LCD via FPGA CN7 pin 3
BenRJG 1:acc66d3a1a1c 9 DigitalOut ADC_cs(PB_9); // Chip Select for the ADC via FPGA CN7 pin 4
BenRJG 1:acc66d3a1a1c 10
BenRJG 1:acc66d3a1a1c 11 //NBB the following line for F429ZI !!!!
BenRJG 1:acc66d3a1a1c 12 DigitalIn DO_NOT_USE(PB_12); // MAKE PB_12 (D19) an INPUT do NOT make an OUTPUT under any circumstances !!!!! ************* !!!!!!!!!!!
BenRJG 1:acc66d3a1a1c 13 // This Pin is connected to the 5VDC from the FPGA card and an INPUT is 5V Tolerant
BenRJG 1:acc66d3a1a1c 14
BenRJG 1:acc66d3a1a1c 15 //Ticker ticktock;
BenRJG 1:acc66d3a1a1c 16
BenRJG 1:acc66d3a1a1c 17
BenRJG 1:acc66d3a1a1c 18 int lcd_cls(void){
BenRJG 1:acc66d3a1a1c 19 LCD_cs = 0;spi_cmd.write(0);spi.write(0x0001);LCD_cs = 1;wait_us(CD); //Clear Screen
BenRJG 1:acc66d3a1a1c 20 return 0;
BenRJG 1:acc66d3a1a1c 21 }
BenRJG 1:acc66d3a1a1c 22
BenRJG 1:acc66d3a1a1c 23 int lcd_locate(uint8_t line, uint8_t column){
BenRJG 1:acc66d3a1a1c 24 uint8_t line_addr;
BenRJG 1:acc66d3a1a1c 25 uint8_t column_addr;
BenRJG 1:acc66d3a1a1c 26 switch(line){
BenRJG 1:acc66d3a1a1c 27 case 1: line_addr=0x80; break;
BenRJG 1:acc66d3a1a1c 28 case 2: line_addr=0xC0; break;
BenRJG 1:acc66d3a1a1c 29 default: return -1; //return code !=0 is error
BenRJG 1:acc66d3a1a1c 30 }
BenRJG 1:acc66d3a1a1c 31 if(column<16){column_addr=column;}
BenRJG 1:acc66d3a1a1c 32 else{return -1;}
BenRJG 1:acc66d3a1a1c 33 LCD_cs = 0;
BenRJG 1:acc66d3a1a1c 34 spi_cmd.write(0);
BenRJG 1:acc66d3a1a1c 35 spi.write(line_addr+column_addr);
BenRJG 1:acc66d3a1a1c 36 LCD_cs = 1;
BenRJG 1:acc66d3a1a1c 37 wait_us(CD); //DDRAM location Second line is 0x00C0 first line starts at 0x0080
BenRJG 1:acc66d3a1a1c 38 return 0;
BenRJG 1:acc66d3a1a1c 39 }
BenRJG 1:acc66d3a1a1c 40
BenRJG 1:acc66d3a1a1c 41 int lcd_display(char* str){
BenRJG 1:acc66d3a1a1c 42
BenRJG 1:acc66d3a1a1c 43 if (strlen(str)>16){return -1;} //return code !=0 is error
BenRJG 1:acc66d3a1a1c 44
BenRJG 1:acc66d3a1a1c 45 uint8_t command_data=1;
BenRJG 1:acc66d3a1a1c 46 uint32_t wait_time;
BenRJG 1:acc66d3a1a1c 47
BenRJG 1:acc66d3a1a1c 48 switch(command_data){
BenRJG 1:acc66d3a1a1c 49 case 0: wait_time=DD; break;
BenRJG 1:acc66d3a1a1c 50 case 1: wait_time=CD; break;
BenRJG 1:acc66d3a1a1c 51 default: return -1;
BenRJG 1:acc66d3a1a1c 52 }
BenRJG 1:acc66d3a1a1c 53
BenRJG 1:acc66d3a1a1c 54 for (int i=0; i<strlen(str);i++){
BenRJG 1:acc66d3a1a1c 55 LCD_cs = 0;
BenRJG 1:acc66d3a1a1c 56 spi_cmd.write(0);
BenRJG 1:acc66d3a1a1c 57 spi.write((command_data<<8)+str[i]);
BenRJG 1:acc66d3a1a1c 58 LCD_cs = 1;
BenRJG 1:acc66d3a1a1c 59 wait_us(wait_time);
BenRJG 1:acc66d3a1a1c 60 }
BenRJG 1:acc66d3a1a1c 61 return 0;
BenRJG 1:acc66d3a1a1c 62 }
BenRJG 1:acc66d3a1a1c 63
BenRJG 1:acc66d3a1a1c 64 int bar_graph(uint8_t level){
BenRJG 1:acc66d3a1a1c 65 if (level>16){return -1;} //return code !=0 is error
BenRJG 1:acc66d3a1a1c 66 LCD_cs = 0;spi_cmd.write(0);spi.write(0x00C0);LCD_cs = 1;wait_us(CD); //DDRAM location Second line is 0x00C0 first line starts at 0x0080
BenRJG 1:acc66d3a1a1c 67 for (int i=1; i<=level ;i++)
BenRJG 1:acc66d3a1a1c 68 {
BenRJG 1:acc66d3a1a1c 69 if(level>0){LCD_cs = 0;spi_cmd.write(0);spi.write(0x01FF);LCD_cs = 1;wait_us(DD);} // BLACK SPACE
BenRJG 1:acc66d3a1a1c 70 else{LCD_cs = 0;spi_cmd.write(0);spi.write(0x0120);LCD_cs = 1;wait_us(DD);} // WHITE SPACE
BenRJG 1:acc66d3a1a1c 71 }
BenRJG 1:acc66d3a1a1c 72 for (int i=level; i<=16 ;i++)
BenRJG 1:acc66d3a1a1c 73 {
BenRJG 1:acc66d3a1a1c 74 LCD_cs = 0;spi_cmd.write(0);spi.write(0x0120);LCD_cs = 1;wait_us(DD); // SPACE
BenRJG 1:acc66d3a1a1c 75 }
BenRJG 1:acc66d3a1a1c 76 return 0; // return code ==0 is OK
BenRJG 1:acc66d3a1a1c 77 }
BenRJG 1:acc66d3a1a1c 78
BenRJG 1:acc66d3a1a1c 79 int read_adc(void){
BenRJG 1:acc66d3a1a1c 80 int adval_d;
BenRJG 1:acc66d3a1a1c 81 float adval_f;
BenRJG 1:acc66d3a1a1c 82 ADC_cs = 0;
BenRJG 1:acc66d3a1a1c 83 adval_d = spi.write(0x00);
BenRJG 1:acc66d3a1a1c 84 ADC_cs =1 ;
BenRJG 1:acc66d3a1a1c 85 adval_f = 3.3f*((float)adval_d/4095);
BenRJG 1:acc66d3a1a1c 86 printf("%d %.3fV\r\n",adval_d,adval_f);
BenRJG 1:acc66d3a1a1c 87 return adval_d;
BenRJG 1:acc66d3a1a1c 88 }
BenRJG 1:acc66d3a1a1c 89
BenRJG 1:acc66d3a1a1c 90 void pulse_bar_graph(void){
BenRJG 1:acc66d3a1a1c 91 for (uint8_t i=0;i<16;i++)
BenRJG 1:acc66d3a1a1c 92 {
BenRJG 1:acc66d3a1a1c 93 printf("%u\r\n",i);
BenRJG 1:acc66d3a1a1c 94 bar_graph(i);
BenRJG 1:acc66d3a1a1c 95 wait_ms(100);
BenRJG 1:acc66d3a1a1c 96 }
BenRJG 1:acc66d3a1a1c 97 for (int8_t i=15;i>=0;i--)
BenRJG 1:acc66d3a1a1c 98 {
BenRJG 1:acc66d3a1a1c 99 printf("%u\r\n",i);
BenRJG 1:acc66d3a1a1c 100 bar_graph(i);
BenRJG 1:acc66d3a1a1c 101 wait_ms(100);
BenRJG 1:acc66d3a1a1c 102 }
BenRJG 1:acc66d3a1a1c 103 }
BenRJG 1:acc66d3a1a1c 104
BenRJG 1:acc66d3a1a1c 105 int read_switches(void){
BenRJG 1:acc66d3a1a1c 106 int sw_val;
BenRJG 1:acc66d3a1a1c 107 cs = 0;
BenRJG 1:acc66d3a1a1c 108 spi_cmd.write(0);
BenRJG 1:acc66d3a1a1c 109 sw_val = spi.write(0x00)&0x0F; // Just want lower 4bit nibble
BenRJG 1:acc66d3a1a1c 110 cs = 1 ;
BenRJG 1:acc66d3a1a1c 111 if (sw_val&(1<<0)){printf("Switch 0 :");}
BenRJG 1:acc66d3a1a1c 112 if (sw_val&(1<<1)){printf("Switch 1 :");}
BenRJG 1:acc66d3a1a1c 113 if (sw_val&(1<<2)){printf("Switch 2 :");}
BenRJG 1:acc66d3a1a1c 114 if (sw_val&(1<<3)){printf("Switch 3 :");}
BenRJG 1:acc66d3a1a1c 115 if (sw_val>0){printf("\r\n");}
BenRJG 1:acc66d3a1a1c 116 return sw_val;
BenRJG 1:acc66d3a1a1c 117 }