motion library for mpu6050, mpu9250 and etc, supports i2c and spi
mbed_spi.c
- Committer:
- yihui
- Date:
- 2016-07-05
- Revision:
- 0:814475fdc553
File content as of revision 0:814475fdc553:
#include <stdio.h> #include "spi_api.h" #include "gpio_api.h" #ifdef TARGET_MCU_NRF51822 #include "nrf51.h" static PinName mbed_spi_mosi; static PinName mbed_spi_miso; static PinName mbed_spi_sclk; static PinName mbed_spi_cs; static uint32_t mbed_spi_mosi_cnf; static uint32_t mbed_spi_miso_cnf; static uint32_t mbed_spi_sclk_cnf; static uint32_t mbed_spi_cs_cnf; #endif static spi_t mbed_spi_object; static gpio_t mbed_cs_object; void mbed_spi_init(PinName mosi, PinName miso, PinName sclk, PinName cs) { spi_init(&mbed_spi_object, mosi, miso, sclk, NC); spi_format(&mbed_spi_object, 8, 0, 0); spi_frequency(&mbed_spi_object, 1000000); gpio_init_out(&mbed_cs_object, cs); gpio_write(&mbed_cs_object, 1); #ifdef TARGET_MCU_NRF51822 mbed_spi_mosi = mosi; mbed_spi_miso = miso; mbed_spi_sclk = sclk; mbed_spi_cs = cs; mbed_spi_mosi_cnf = NRF_GPIO->PIN_CNF[mosi]; mbed_spi_miso_cnf = NRF_GPIO->PIN_CNF[miso]; mbed_spi_sclk_cnf = NRF_GPIO->PIN_CNF[sclk]; mbed_spi_cs_cnf = NRF_GPIO->PIN_CNF[cs]; #endif } int mbed_spi_write(unsigned char reg_addr, unsigned char length, unsigned char const *data) { int i; gpio_write(&mbed_cs_object, 0); spi_master_write(&mbed_spi_object, reg_addr); for (i = 0; i < length; i++) { spi_master_write(&mbed_spi_object, data[i]); } gpio_write(&mbed_cs_object, 1); return 0; } int mbed_spi_read(unsigned char reg_addr, unsigned char length, unsigned char *data) { int i; gpio_write(&mbed_cs_object, 0); spi_master_write(&mbed_spi_object, reg_addr | 0x80); for (i = 0; i < length; i++) { data[i] = spi_master_write(&mbed_spi_object, 0xff); } gpio_write(&mbed_cs_object, 1); return 0; } void mbed_spi_enable(void) { #if defined(TARGET_MCU_NRF51822) && !defined(DEBUG) // NRF_GPIO->PIN_CNF[mbed_spi_mosi] = mbed_spi_mosi_cnf; // NRF_GPIO->PIN_CNF[mbed_spi_miso] = mbed_spi_miso_cnf; // NRF_GPIO->PIN_CNF[mbed_spi_sclk] = mbed_spi_sclk_cnf; // NRF_GPIO->PIN_CNF[mbed_spi_cs] = mbed_spi_cs_cnf; mbed_spi_object.spi->ENABLE = 1; #endif } void mbed_spi_disable(void) { #if defined(TARGET_MCU_NRF51822) && !defined(DEBUG) mbed_spi_mosi_cnf = NRF_GPIO->PIN_CNF[mbed_spi_mosi]; mbed_spi_miso_cnf = NRF_GPIO->PIN_CNF[mbed_spi_miso]; mbed_spi_sclk_cnf = NRF_GPIO->PIN_CNF[mbed_spi_sclk]; mbed_spi_cs_cnf = NRF_GPIO->PIN_CNF[mbed_spi_cs]; mbed_spi_object.spi->ENABLE = 0; // NRF_GPIO->PIN_CNF[mbed_spi_mosi] = 2; // NRF_GPIO->PIN_CNF[mbed_spi_miso] = 2; // NRF_GPIO->PIN_CNF[mbed_spi_sclk] = 2; // NRF_GPIO->PIN_CNF[mbed_spi_cs] = 2; #endif }