SHENG-HEN HSIEH
/
LSM9DS0_STM32compatible
works fine on STM
Fork of Sample_manerine_SPI_LSM9DS0 by
main.cpp@1:b42c3522a50a, 2016-09-01 (annotated)
- 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?
User | Revision | Line number | New 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↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑// |