works fine on STM

Dependencies:   mbed

Fork of Sample_manerine_SPI_LSM9DS0 by SHENG-HEN HSIEH

Committer:
open4416
Date:
Thu Sep 01 17:14:29 2016 +0000
Revision:
2:0d90c0436797
Parent:
1:b42c3522a50a
Child:
3:502b83f7761c
serial out Ax  Wx

Who changed what in which revision?

UserRevisionLine numberNew contents of line
open4416 0:d68e088dfbcd 1 #include "mbed.h"
open4416 1:b42c3522a50a 2 #include "LSM9DS0_SH.h"
open4416 1:b42c3522a50a 3 #define pi 3.141592
open4416 1:b42c3522a50a 4 #define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt)))
open4416 0:d68e088dfbcd 5
open4416 0:d68e088dfbcd 6
open4416 1:b42c3522a50a 7 //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓GPIO registor↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓//
open4416 1:b42c3522a50a 8 //~~~structure~~~//
open4416 1:b42c3522a50a 9 DigitalOut led(D13); //detection
open4416 1:b42c3522a50a 10 DigitalOut TT_ext(D12);
open4416 1:b42c3522a50a 11
open4416 2:0d90c0436797 12 //~~~IMU_SPI~~~//
open4416 1:b42c3522a50a 13 DigitalOut SPI_CSG(D7,1); //low for GYRO enable
open4416 1:b42c3522a50a 14 DigitalOut SPI_CSXM(D6,1); //low for ACC/MAG enable
open4416 1:b42c3522a50a 15 SPI spi(D4, D5, D3); //MOSI MISO SCLK
open4416 1:b42c3522a50a 16
open4416 1:b42c3522a50a 17 //~~~Serial~~~//
open4416 1:b42c3522a50a 18 Serial pc(D1, D0); //Serial reg(TX RX)
open4416 1:b42c3522a50a 19 //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑end of GPIO registor↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑//
open4416 1:b42c3522a50a 20
open4416 0:d68e088dfbcd 21
open4416 0:d68e088dfbcd 22
open4416 1:b42c3522a50a 23 //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓Varible registor↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓//
open4416 1:b42c3522a50a 24 //~~~globle~~~//
open4416 1:b42c3522a50a 25 Ticker TT; //call a timer
open4416 1:b42c3522a50a 26 int count = 0; //one second counter for extrenal led blink
open4416 2:0d90c0436797 27
open4416 2:0d90c0436797 28 //~~~IMU_SPI~~~//
open4416 2:0d90c0436797 29 short low_byte = 0x00; //buffer
open4416 2:0d90c0436797 30 short high_byte = 0x00;
open4416 2:0d90c0436797 31
open4416 2:0d90c0436797 32 short Wx = 0x00;
open4416 2:0d90c0436797 33 short Wy = 0x00;
open4416 2:0d90c0436797 34 short Wz = 0x00;
open4416 2:0d90c0436797 35
open4416 2:0d90c0436797 36 short Ax = 0x00;
open4416 2:0d90c0436797 37 short Ay = 0x00;
open4416 2:0d90c0436797 38 short Az = 0x00;
open4416 1:b42c3522a50a 39 //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑end of Varible registor↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑//
open4416 1:b42c3522a50a 40
open4416 0:d68e088dfbcd 41
open4416 0:d68e088dfbcd 42
open4416 1:b42c3522a50a 43 //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓Function registor↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓//
open4416 1:b42c3522a50a 44 void init_IO(); //initialize IO state
open4416 1:b42c3522a50a 45 void init_IMU(); //initialize IMU
open4416 1:b42c3522a50a 46 void init_TIMER(); //set TT_main() rate
open4416 1:b42c3522a50a 47 void TT_main(); //timebase function rated by TT
open4416 1:b42c3522a50a 48 //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑end of Function registor↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑//
open4416 1:b42c3522a50a 49
open4416 1:b42c3522a50a 50
open4416 1:b42c3522a50a 51
open4416 1:b42c3522a50a 52 //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓main funtion↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓//
open4416 0:d68e088dfbcd 53 int main()
open4416 0:d68e088dfbcd 54 {
open4416 1:b42c3522a50a 55 init_IO(); //initialized value
open4416 1:b42c3522a50a 56 init_IMU(); //initialize IMU
open4416 1:b42c3522a50a 57 init_TIMER(); //start TT_main
open4416 1:b42c3522a50a 58 pc.baud(115200); //set baud rate
open4416 0:d68e088dfbcd 59
open4416 1:b42c3522a50a 60 while(1) { //main() loop
open4416 1:b42c3522a50a 61 if(count >= 200) { //check if main working
open4416 0:d68e088dfbcd 62 count=0;
open4416 0:d68e088dfbcd 63 led = !led;
open4416 0:d68e088dfbcd 64 }
open4416 1:b42c3522a50a 65 }
open4416 0:d68e088dfbcd 66
open4416 0:d68e088dfbcd 67 }
open4416 1:b42c3522a50a 68 //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑end of main funtion↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑//
open4416 0:d68e088dfbcd 69
open4416 0:d68e088dfbcd 70
open4416 0:d68e088dfbcd 71
open4416 1:b42c3522a50a 72 //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓init_IO funtion↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓//
open4416 1:b42c3522a50a 73 void init_IO(void) //initialize
open4416 1:b42c3522a50a 74 {
open4416 1:b42c3522a50a 75 TT_ext = 0;
open4416 1:b42c3522a50a 76 led = 1;
open4416 1:b42c3522a50a 77 }
open4416 1:b42c3522a50a 78 //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑end of init_IO funtion↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑//
open4416 0:d68e088dfbcd 79
open4416 0:d68e088dfbcd 80
open4416 0:d68e088dfbcd 81
open4416 1:b42c3522a50a 82 //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓init_IMU funtion↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓//
open4416 1:b42c3522a50a 83 void init_IMU(void) //initialize
open4416 0:d68e088dfbcd 84 {
open4416 1:b42c3522a50a 85 SPI_CSXM = 1; //high as init for disable SPI
open4416 1:b42c3522a50a 86 SPI_CSG = 1;
open4416 1:b42c3522a50a 87 spi.format(8, 0); //byte width, spi mode
open4416 1:b42c3522a50a 88 spi.frequency(4000000); //8MHz
open4416 1:b42c3522a50a 89
open4416 1:b42c3522a50a 90 //for GYRO config
open4416 1:b42c3522a50a 91 SPI_CSG = 0; //start spi talking
open4416 1:b42c3522a50a 92 spi.write(CTRL_REG1_G);
open4416 1:b42c3522a50a 93 spi.write(0x9F); //data rate 380 Hz/ cut off 25 Hz
open4416 1:b42c3522a50a 94 SPI_CSG = 1; //end spi talking
open4416 1:b42c3522a50a 95
open4416 1:b42c3522a50a 96 SPI_CSG = 0; //start spi talking
open4416 1:b42c3522a50a 97 spi.write(CTRL_REG4_G);
open4416 1:b42c3522a50a 98 spi.write(0x10); //Scle 500dps
open4416 1:b42c3522a50a 99 SPI_CSG = 1; //end spi talking
open4416 1:b42c3522a50a 100
open4416 1:b42c3522a50a 101 //for ACC config
open4416 1:b42c3522a50a 102 SPI_CSXM = 0; //start spi talking
open4416 1:b42c3522a50a 103 spi.write(CTRL_REG1_XM);
open4416 1:b42c3522a50a 104 spi.write(0x87); //data rate 400 Hz/ Enable
open4416 1:b42c3522a50a 105 SPI_CSXM = 1; //end spi talking
open4416 1:b42c3522a50a 106
open4416 1:b42c3522a50a 107 SPI_CSXM = 0; //start spi talking
open4416 1:b42c3522a50a 108 spi.write(CTRL_REG2_XM);
open4416 1:b42c3522a50a 109 spi.write(0xC0); //cut off 50 Hz/ Scale +-2g
open4416 1:b42c3522a50a 110 SPI_CSXM = 1; //end spi talking
open4416 0:d68e088dfbcd 111 }
open4416 1:b42c3522a50a 112 //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑end of init_IMU funtion↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑//
open4416 0:d68e088dfbcd 113
open4416 0:d68e088dfbcd 114
open4416 0:d68e088dfbcd 115
open4416 1:b42c3522a50a 116 //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓Timebase funtion↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓//
open4416 1:b42c3522a50a 117 void init_TIMER() //set TT_main{} rate
open4416 0:d68e088dfbcd 118 {
open4416 1:b42c3522a50a 119 TT.attach_us(&TT_main, 5000);
open4416 0:d68e088dfbcd 120 }
open4416 1:b42c3522a50a 121 void TT_main() //interrupt function by TT
open4416 1:b42c3522a50a 122 {
open4416 1:b42c3522a50a 123 TT_ext = !TT_ext; //indicate TT_main() function working
open4416 1:b42c3522a50a 124 count = count+1; //one second counter
open4416 0:d68e088dfbcd 125
open4416 1:b42c3522a50a 126 SPI_CSG = 0; //start spi talking
open4416 2:0d90c0436797 127 spi.write(0xE8); //read B11101000 read/multi/address
open4416 2:0d90c0436797 128 low_byte = spi.write(0);
open4416 2:0d90c0436797 129 high_byte = spi.write(0);
open4416 2:0d90c0436797 130 Wx = high_byte << 8 |low_byte;
open4416 1:b42c3522a50a 131 SPI_CSG = 1; //end spi talking
open4416 1:b42c3522a50a 132
open4416 1:b42c3522a50a 133
open4416 1:b42c3522a50a 134 SPI_CSXM = 0; //start spi talking
open4416 2:0d90c0436797 135 spi.write(0xE8); //read B11101000 read/multi/address
open4416 2:0d90c0436797 136 low_byte = spi.write(0);
open4416 2:0d90c0436797 137 high_byte = spi.write(0);
open4416 2:0d90c0436797 138 Ax = high_byte << 8 |low_byte;
open4416 1:b42c3522a50a 139 SPI_CSXM = 1; //end spi talking
open4416 1:b42c3522a50a 140
open4416 2:0d90c0436797 141 pc.printf("%d\t%d\n", Wx, Ax);
open4416 0:d68e088dfbcd 142 }
open4416 1:b42c3522a50a 143 //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑end of Timebase funtion↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑//