17 #include <arch/board/board.h> 18 #include "board_config.h" 19 #include <drivers/device/spi.h> 68 #define MHZ (1000U*1000U) 72 #if defined(PX4_SPIDEV_MPU) 75 #if defined(PX4_SPIDEV_EXT_BARO) 78 #if defined(PX4_SPIDEV_ICM) 81 #if defined(PX4_SPIDEV_ACCEL_MAG) 85 #if CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_PX4_V4 92 #ifdef PX4_SPIDEV_BARO 95 #if defined(PX4_SPIDEV_ACCEL_MAG) 98 #ifdef PX4_SPIDEV_EXT_ACCEL_MAG 101 #if defined(PX4_SPIDEV_GYRO) 104 #ifdef PX4_SPIDEV_EXT_GYRO 107 #if defined(PX4_SPIDEV_MPU) 111 #ifdef PX4_SPIDEV_EXT_MPU 116 #ifdef PX4_SPIDEV_HMC 119 #ifdef PX4_SPIDEV_LIS 123 #ifdef PX4_SPI_BUS_EXT 124 #ifdef PX4_SPIDEV_EXT0 130 #ifdef PX4_SPIDEV_EXT1 133 #ifdef PX4_SPIDEV_EXT2 136 #ifdef PX4_SPIDEV_EXT3 141 #ifdef CYRF_SPI_PX4_SPI_BUS 145 SPIDesc(
nullptr, 0, (spi_dev_e)0, (spi_mode_e)0, 0, 0),
150 , device_desc(_device_desc)
160 printf(
"SPI device %s on %u:%u at speed %u mode %u\n",
206 bool use_irq_save = up_spi_use_irq_save(
bus.
dev);
217 SPI_EXCHANGE(
bus.
dev, send, recv, len);
229 uint8_t *recv, uint32_t recv_len)
231 if (send_len == recv_len && send == recv) {
236 uint8_t buf[send_len+recv_len];
238 memcpy(buf, send, send_len);
241 memset(&buf[send_len], 0, recv_len);
245 memcpy(recv, &buf[send_len], recv_len);
253 memcpy(buf, send, len);
255 memcpy(recv, buf, len);
294 for (i = 0; device_table[i].name; i++) {
295 if (strcmp(device_table[i].name, name) == 0) {
299 if (device_table[i].name ==
nullptr) {
300 printf(
"SPI: Invalid device name: %s\n", name);
304 SPIDesc &desc = device_table[i];
308 for (busp = buses; busp; busp = (
SPIBus *)busp->
next) {
309 if (busp->
bus == desc.bus) {
313 if (busp ==
nullptr) {
316 if (busp ==
nullptr) {
320 busp->
bus = desc.bus;
321 busp->
dev = up_spiinitialize(desc.bus);
AP_HAL::Device::PeriodicHandle register_periodic_callback(uint32_t period_usec, AP_HAL::Device::PeriodicCb) override
int printf(const char *fmt,...)
bool transfer_fullduplex(const uint8_t *send, uint8_t *recv, uint32_t len) override
struct F4Light::SPIDESC SPIDesc
bool adjust_timer(AP_HAL::Device::PeriodicHandle h, uint32_t period_usec)
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
bool set_chip_select(bool set) override
AP_HAL::Device::PeriodicHandle register_periodic_callback(uint32_t period_usec, AP_HAL::Device::PeriodicCb, AP_HAL::Device *hal_device)
AP_HAL::OwnPtr< AP_HAL::SPIDevice > get_device(const char *name)
bool transfer(const uint8_t *send, uint32_t send_len, uint8_t *recv, uint32_t recv_len) override
void do_transfer(const uint8_t *send, uint8_t *recv, uint32_t len)
static SPIDesc device_table[]
bool set_speed(AP_HAL::Device::Speed speed) override
int asprintf(char **strp, const char *fmt,...)
void set_device_address(uint8_t address)