library for MPU6050 and MPU9250, supports both I2C and SPI

Dependents:   Seeed_nRF51822_MPU9250

mbed_spi.c

Committer:
yihui
Date:
2015-12-10
Revision:
0:972f3778c19c

File content as of revision 0:972f3778c19c:


#include <stdio.h>
#include "spi_api.h"
#include "gpio_api.h"
#include "nrf_delay.h"
#include "nrf51.h"

static spi_t mbed_i2c_object = {0,};
static gpio_t mbed_spi_cs;

void mbed_spi_init(PinName mosi, PinName miso, PinName sclk, PinName cs)
{
    spi_init(&mbed_i2c_object, mosi, miso, sclk, NC);
    spi_format(&mbed_i2c_object, 8, 0, 0);
    spi_frequency(&mbed_i2c_object, 1000000);

    gpio_init_out(&mbed_spi_cs, cs);
    gpio_write(&mbed_spi_cs, 1);
}

int mbed_spi_write(unsigned char reg_addr,
                   unsigned char length,
                   unsigned char const *data)
{
    int i;

    gpio_write(&mbed_spi_cs, 0);
    spi_master_write(&mbed_i2c_object, reg_addr);
    for (i = 0; i < length; i++) {
        spi_master_write(&mbed_i2c_object, data[i]);
    }
    gpio_write(&mbed_spi_cs, 1);
    nrf_delay_us(50);
    return 0;
}

int mbed_spi_read(unsigned char reg_addr,
                  unsigned char length,
                  unsigned char *data)
{
    int i;

    gpio_write(&mbed_spi_cs, 0);
    spi_master_write(&mbed_i2c_object, reg_addr | 0x80);
    for (i = 0; i < length; i++) {
        data[i] = spi_master_write(&mbed_i2c_object, 0xff);
    }

    gpio_write(&mbed_spi_cs, 1);
    nrf_delay_us(50);
    return 0;
}

void mbed_spi_enable(void)
{

}

void mbed_spi_disable(void)
{

}