works fine on STM

Dependencies:   mbed

Fork of Sample_manerine_SPI_LSM9DS0 by SHENG-HEN HSIEH

Committer:
open4416
Date:
Thu Sep 01 16:37:11 2016 +0000
Revision:
1:b42c3522a50a
Parent:
sample_timebase.cpp@0:d68e088dfbcd
Child:
2:0d90c0436797
just finished GYRO/ACC's  configuration

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 1:b42c3522a50a 12 //~~~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 1:b42c3522a50a 27 //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑end of Varible registor↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑//
open4416 1:b42c3522a50a 28
open4416 0:d68e088dfbcd 29
open4416 0:d68e088dfbcd 30
open4416 1:b42c3522a50a 31 //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓Function registor↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓//
open4416 1:b42c3522a50a 32 void init_IO(); //initialize IO state
open4416 1:b42c3522a50a 33 void init_IMU(); //initialize IMU
open4416 1:b42c3522a50a 34 void init_TIMER(); //set TT_main() rate
open4416 1:b42c3522a50a 35 void TT_main(); //timebase function rated by TT
open4416 1:b42c3522a50a 36 //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑end of Function registor↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑//
open4416 1:b42c3522a50a 37
open4416 1:b42c3522a50a 38
open4416 1:b42c3522a50a 39
open4416 1:b42c3522a50a 40 //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓main funtion↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓//
open4416 0:d68e088dfbcd 41 int main()
open4416 0:d68e088dfbcd 42 {
open4416 1:b42c3522a50a 43 init_IO(); //initialized value
open4416 1:b42c3522a50a 44 init_IMU(); //initialize IMU
open4416 1:b42c3522a50a 45 init_TIMER(); //start TT_main
open4416 1:b42c3522a50a 46 pc.baud(115200); //set baud rate
open4416 0:d68e088dfbcd 47
open4416 1:b42c3522a50a 48 while(1) { //main() loop
open4416 1:b42c3522a50a 49 if(count >= 200) { //check if main working
open4416 0:d68e088dfbcd 50 count=0;
open4416 0:d68e088dfbcd 51 led = !led;
open4416 0:d68e088dfbcd 52 }
open4416 1:b42c3522a50a 53 }
open4416 0:d68e088dfbcd 54
open4416 0:d68e088dfbcd 55 }
open4416 1:b42c3522a50a 56 //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑end of main funtion↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑//
open4416 0:d68e088dfbcd 57
open4416 0:d68e088dfbcd 58
open4416 0:d68e088dfbcd 59
open4416 1:b42c3522a50a 60 //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓init_IO funtion↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓//
open4416 1:b42c3522a50a 61 void init_IO(void) //initialize
open4416 1:b42c3522a50a 62 {
open4416 1:b42c3522a50a 63 TT_ext = 0;
open4416 1:b42c3522a50a 64 led = 1;
open4416 1:b42c3522a50a 65 }
open4416 1:b42c3522a50a 66 //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑end of init_IO funtion↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑//
open4416 0:d68e088dfbcd 67
open4416 0:d68e088dfbcd 68
open4416 0:d68e088dfbcd 69
open4416 1:b42c3522a50a 70 //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓init_IMU funtion↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓//
open4416 1:b42c3522a50a 71 void init_IMU(void) //initialize
open4416 0:d68e088dfbcd 72 {
open4416 1:b42c3522a50a 73 SPI_CSXM = 1; //high as init for disable SPI
open4416 1:b42c3522a50a 74 SPI_CSG = 1;
open4416 1:b42c3522a50a 75 spi.format(8, 0); //byte width, spi mode
open4416 1:b42c3522a50a 76 spi.frequency(4000000); //8MHz
open4416 1:b42c3522a50a 77
open4416 1:b42c3522a50a 78 //for GYRO config
open4416 1:b42c3522a50a 79 SPI_CSG = 0; //start spi talking
open4416 1:b42c3522a50a 80 spi.write(CTRL_REG1_G);
open4416 1:b42c3522a50a 81 spi.write(0x9F); //data rate 380 Hz/ cut off 25 Hz
open4416 1:b42c3522a50a 82 SPI_CSG = 1; //end spi talking
open4416 1:b42c3522a50a 83
open4416 1:b42c3522a50a 84 SPI_CSG = 0; //start spi talking
open4416 1:b42c3522a50a 85 spi.write(CTRL_REG4_G);
open4416 1:b42c3522a50a 86 spi.write(0x10); //Scle 500dps
open4416 1:b42c3522a50a 87 SPI_CSG = 1; //end spi talking
open4416 1:b42c3522a50a 88
open4416 1:b42c3522a50a 89 //for ACC config
open4416 1:b42c3522a50a 90 SPI_CSXM = 0; //start spi talking
open4416 1:b42c3522a50a 91 spi.write(CTRL_REG1_XM);
open4416 1:b42c3522a50a 92 spi.write(0x87); //data rate 400 Hz/ Enable
open4416 1:b42c3522a50a 93 SPI_CSXM = 1; //end spi talking
open4416 1:b42c3522a50a 94
open4416 1:b42c3522a50a 95 SPI_CSXM = 0; //start spi talking
open4416 1:b42c3522a50a 96 spi.write(CTRL_REG2_XM);
open4416 1:b42c3522a50a 97 spi.write(0xC0); //cut off 50 Hz/ Scale +-2g
open4416 1:b42c3522a50a 98 SPI_CSXM = 1; //end spi talking
open4416 1:b42c3522a50a 99
open4416 0:d68e088dfbcd 100 }
open4416 1:b42c3522a50a 101 //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑end of init_IMU funtion↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑//
open4416 0:d68e088dfbcd 102
open4416 0:d68e088dfbcd 103
open4416 0:d68e088dfbcd 104
open4416 1:b42c3522a50a 105 //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓Timebase funtion↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓//
open4416 1:b42c3522a50a 106 void init_TIMER() //set TT_main{} rate
open4416 0:d68e088dfbcd 107 {
open4416 1:b42c3522a50a 108 TT.attach_us(&TT_main, 5000);
open4416 0:d68e088dfbcd 109 }
open4416 1:b42c3522a50a 110 void TT_main() //interrupt function by TT
open4416 1:b42c3522a50a 111 {
open4416 1:b42c3522a50a 112 TT_ext = !TT_ext; //indicate TT_main() function working
open4416 1:b42c3522a50a 113 count = count+1; //one second counter
open4416 0:d68e088dfbcd 114
open4416 1:b42c3522a50a 115 SPI_CSG = 0; //start spi talking
open4416 1:b42c3522a50a 116 spi.write(0x8f); //read WHO_AM_I_G 0x0f | B1000 0000
open4416 1:b42c3522a50a 117 int temp = spi.write(0);
open4416 1:b42c3522a50a 118 SPI_CSG = 1; //end spi talking
open4416 1:b42c3522a50a 119
open4416 1:b42c3522a50a 120
open4416 1:b42c3522a50a 121 SPI_CSXM = 0; //start spi talking
open4416 1:b42c3522a50a 122 spi.write(0x8f); //read WHO_AM_I_XM 0x0f | B1000 0000
open4416 1:b42c3522a50a 123 int temp2 = spi.write(0);
open4416 1:b42c3522a50a 124 SPI_CSXM = 1; //end spi talking
open4416 1:b42c3522a50a 125
open4416 1:b42c3522a50a 126 pc.printf("who_am_I_G:%d\t", temp);
open4416 1:b42c3522a50a 127 pc.printf("who_am_I_XM:%d\n", temp2);
open4416 0:d68e088dfbcd 128 }
open4416 1:b42c3522a50a 129 //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑end of Timebase funtion↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑//