SHENG-HEN HSIEH
/
LSM9DS0_STM32compatible
works fine on STM
Fork of Sample_manerine_SPI_LSM9DS0 by
main.cpp@2:0d90c0436797, 2016-09-01 (annotated)
- 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?
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 | 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↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑// |