library for MPU6050 and MPU9250, supports both I2C and SPI
Dependents: Seeed_nRF51822_MPU9250
mbed_spi.c@0:972f3778c19c, 2015-12-10 (annotated)
- Committer:
- yihui
- Date:
- Thu Dec 10 07:39:48 2015 +0000
- Revision:
- 0:972f3778c19c
initial
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
yihui | 0:972f3778c19c | 1 | |
yihui | 0:972f3778c19c | 2 | #include <stdio.h> |
yihui | 0:972f3778c19c | 3 | #include "spi_api.h" |
yihui | 0:972f3778c19c | 4 | #include "gpio_api.h" |
yihui | 0:972f3778c19c | 5 | #include "nrf_delay.h" |
yihui | 0:972f3778c19c | 6 | #include "nrf51.h" |
yihui | 0:972f3778c19c | 7 | |
yihui | 0:972f3778c19c | 8 | static spi_t mbed_i2c_object = {0,}; |
yihui | 0:972f3778c19c | 9 | static gpio_t mbed_spi_cs; |
yihui | 0:972f3778c19c | 10 | |
yihui | 0:972f3778c19c | 11 | void mbed_spi_init(PinName mosi, PinName miso, PinName sclk, PinName cs) |
yihui | 0:972f3778c19c | 12 | { |
yihui | 0:972f3778c19c | 13 | spi_init(&mbed_i2c_object, mosi, miso, sclk, NC); |
yihui | 0:972f3778c19c | 14 | spi_format(&mbed_i2c_object, 8, 0, 0); |
yihui | 0:972f3778c19c | 15 | spi_frequency(&mbed_i2c_object, 1000000); |
yihui | 0:972f3778c19c | 16 | |
yihui | 0:972f3778c19c | 17 | gpio_init_out(&mbed_spi_cs, cs); |
yihui | 0:972f3778c19c | 18 | gpio_write(&mbed_spi_cs, 1); |
yihui | 0:972f3778c19c | 19 | } |
yihui | 0:972f3778c19c | 20 | |
yihui | 0:972f3778c19c | 21 | int mbed_spi_write(unsigned char reg_addr, |
yihui | 0:972f3778c19c | 22 | unsigned char length, |
yihui | 0:972f3778c19c | 23 | unsigned char const *data) |
yihui | 0:972f3778c19c | 24 | { |
yihui | 0:972f3778c19c | 25 | int i; |
yihui | 0:972f3778c19c | 26 | |
yihui | 0:972f3778c19c | 27 | gpio_write(&mbed_spi_cs, 0); |
yihui | 0:972f3778c19c | 28 | spi_master_write(&mbed_i2c_object, reg_addr); |
yihui | 0:972f3778c19c | 29 | for (i = 0; i < length; i++) { |
yihui | 0:972f3778c19c | 30 | spi_master_write(&mbed_i2c_object, data[i]); |
yihui | 0:972f3778c19c | 31 | } |
yihui | 0:972f3778c19c | 32 | gpio_write(&mbed_spi_cs, 1); |
yihui | 0:972f3778c19c | 33 | nrf_delay_us(50); |
yihui | 0:972f3778c19c | 34 | return 0; |
yihui | 0:972f3778c19c | 35 | } |
yihui | 0:972f3778c19c | 36 | |
yihui | 0:972f3778c19c | 37 | int mbed_spi_read(unsigned char reg_addr, |
yihui | 0:972f3778c19c | 38 | unsigned char length, |
yihui | 0:972f3778c19c | 39 | unsigned char *data) |
yihui | 0:972f3778c19c | 40 | { |
yihui | 0:972f3778c19c | 41 | int i; |
yihui | 0:972f3778c19c | 42 | |
yihui | 0:972f3778c19c | 43 | gpio_write(&mbed_spi_cs, 0); |
yihui | 0:972f3778c19c | 44 | spi_master_write(&mbed_i2c_object, reg_addr | 0x80); |
yihui | 0:972f3778c19c | 45 | for (i = 0; i < length; i++) { |
yihui | 0:972f3778c19c | 46 | data[i] = spi_master_write(&mbed_i2c_object, 0xff); |
yihui | 0:972f3778c19c | 47 | } |
yihui | 0:972f3778c19c | 48 | |
yihui | 0:972f3778c19c | 49 | gpio_write(&mbed_spi_cs, 1); |
yihui | 0:972f3778c19c | 50 | nrf_delay_us(50); |
yihui | 0:972f3778c19c | 51 | return 0; |
yihui | 0:972f3778c19c | 52 | } |
yihui | 0:972f3778c19c | 53 | |
yihui | 0:972f3778c19c | 54 | void mbed_spi_enable(void) |
yihui | 0:972f3778c19c | 55 | { |
yihui | 0:972f3778c19c | 56 | |
yihui | 0:972f3778c19c | 57 | } |
yihui | 0:972f3778c19c | 58 | |
yihui | 0:972f3778c19c | 59 | void mbed_spi_disable(void) |
yihui | 0:972f3778c19c | 60 | { |
yihui | 0:972f3778c19c | 61 | |
yihui | 0:972f3778c19c | 62 | } |