17 #include <arch/board/board.h> 18 #include "board_config.h" 19 #include <drivers/device/spi.h> 68 #define MHZ (1000U*1000U) 73 #if defined(SPIDEV_MS5611) 76 #if defined(SPIDEV_EXP_MS5611) 79 #if defined(SPIDEV_EXP_MPU6000) 82 #if defined(SPIDEV_EXP_HMC5983) 85 #if defined(SPIDEV_MPU6000) 88 #if defined(SPIDEV_IMU_MS5611) 91 #if defined(SPIDEV_IMU_MPU6000) 94 #if defined(SPIDEV_IMU_HMC5983) 97 #if defined(SPIDEV_MPU9250) 146 SPIDesc(
nullptr, 0, (spi_dev_e)0, (spi_mode_e)0, 0, 0),
151 , device_desc(_device_desc)
161 printf(
"SPI device %s on %u:%u at speed %u mode %u\n",
207 bool use_irq_save = up_spi_use_irq_save(
bus.
dev);
218 SPI_EXCHANGE(
bus.
dev, send, recv, len);
230 uint8_t *recv, uint32_t recv_len)
232 if (send_len == recv_len && send == recv) {
237 uint8_t buf[send_len+recv_len];
239 memcpy(buf, send, send_len);
242 memset(&buf[send_len], 0, recv_len);
246 memcpy(recv, &buf[send_len], recv_len);
254 memcpy(buf, send, len);
256 memcpy(recv, buf, len);
295 for (i = 0; device_table[i].name; i++) {
296 if (strcmp(device_table[i].name, name) == 0) {
300 if (device_table[i].name ==
nullptr) {
301 printf(
"SPI: Invalid device name: %s\n", name);
305 SPIDesc &desc = device_table[i];
309 for (busp = buses; busp; busp = (
SPIBus *)busp->
next) {
310 if (busp->
bus == desc.bus) {
314 if (busp ==
nullptr) {
317 if (busp ==
nullptr) {
321 busp->
bus = desc.bus;
322 busp->
dev = up_spiinitialize(desc.bus);
bool transfer_fullduplex(const uint8_t *send, uint8_t *recv, uint32_t len) override
int printf(const char *fmt,...)
struct F4Light::SPIDESC SPIDesc
bool adjust_periodic_callback(AP_HAL::Device::PeriodicHandle h, uint32_t period_usec) override
void set_device_bus(uint8_t bus)
AP_HAL::Semaphore * get_semaphore() override
void do_transfer(const uint8_t *send, uint8_t *recv, uint32_t len)
bool transfer(const uint8_t *send, uint32_t send_len, uint8_t *recv, uint32_t recv_len) override
AP_HAL::Device::PeriodicHandle register_periodic_callback(uint32_t period_usec, AP_HAL::Device::PeriodicCb, AP_HAL::Device *hal_device)
bool set_speed(AP_HAL::Device::Speed speed) override
AP_HAL::OwnPtr< AP_HAL::SPIDevice > get_device(const char *name)
AP_HAL::Device::PeriodicHandle register_periodic_callback(uint32_t period_usec, AP_HAL::Device::PeriodicCb) override
bool set_chip_select(bool set) override
int asprintf(char **strp, const char *fmt,...)
void set_device_address(uint8_t address)
static SPIDesc device_table[]
bool adjust_timer(AP_HAL::Device::PeriodicHandle h, uint32_t period_usec)