Add spi endian setting.
parent
9ed4e8604c
commit
ad401d5b09
|
@ -90,6 +90,7 @@ public:
|
|||
virtual object_ptr<spi_device_driver> get_device(spi_mode_t mode, spi_frame_format_t frame_format, uint32_t chip_select_mask, uint32_t data_bit_length) override;
|
||||
|
||||
double set_clock_rate(k_spi_device_driver &device, double clock_rate);
|
||||
void set_endian(k_spi_device_driver &device, uint32_t endian);
|
||||
int read(k_spi_device_driver &device, gsl::span<uint8_t> buffer);
|
||||
int write(k_spi_device_driver &device, gsl::span<const uint8_t> buffer);
|
||||
int transfer_full_duplex(k_spi_device_driver &device, gsl::span<const uint8_t> write_buffer, gsl::span<uint8_t> read_buffer);
|
||||
|
@ -562,6 +563,11 @@ public:
|
|||
return spi_->set_clock_rate(*this, clock_rate);
|
||||
}
|
||||
|
||||
virtual void set_endian(uint32_t endian) override
|
||||
{
|
||||
spi_->set_endian(*this, endian);
|
||||
}
|
||||
|
||||
virtual int read(gsl::span<uint8_t> buffer) override
|
||||
{
|
||||
return spi_->read(*this, buffer);
|
||||
|
@ -626,6 +632,7 @@ private:
|
|||
spi_inst_addr_trans_mode_t trans_mode_;
|
||||
uint32_t baud_rate_ = 0x2;
|
||||
uint32_t buffer_width_ = 0;
|
||||
uint32_t endian_ = 0;
|
||||
};
|
||||
|
||||
object_ptr<spi_device_driver> k_spi_driver::get_device(spi_mode_t mode, spi_frame_format_t frame_format, uint32_t chip_select_mask, uint32_t data_bit_length)
|
||||
|
@ -645,6 +652,11 @@ double k_spi_driver::set_clock_rate(k_spi_device_driver &device, double clock_ra
|
|||
return clk / div;
|
||||
}
|
||||
|
||||
void k_spi_driver::set_endian(k_spi_device_driver &device, uint32_t endian)
|
||||
{
|
||||
device.endian_ = endian;
|
||||
}
|
||||
|
||||
int k_spi_driver::read(k_spi_device_driver &device, gsl::span<uint8_t> buffer)
|
||||
{
|
||||
COMMON_ENTRY;
|
||||
|
@ -994,6 +1006,7 @@ void k_spi_driver::setup_device(k_spi_device_driver &device)
|
|||
uint32_t addr_l = device.address_length_ / 4;
|
||||
|
||||
spi_.spi_ctrlr0 = (device.wait_cycles_ << 11) | (inst_l << 8) | (addr_l << 2) | trans;
|
||||
spi_.endian = device.endian_;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -319,6 +319,8 @@ void spi_dev_config_non_standard(handle_t file, uint32_t instruction_length, uin
|
|||
*/
|
||||
double spi_dev_set_clock_rate(handle_t file, double clock_rate);
|
||||
|
||||
void spi_dev_set_endian(handle_t file, uint32_t endian);
|
||||
|
||||
/**
|
||||
* @brief Transfer data between a SPI device using full duplex
|
||||
*
|
||||
|
|
|
@ -243,6 +243,7 @@ class spi_device_driver : public driver
|
|||
public:
|
||||
virtual void config_non_standard(uint32_t instruction_length, uint32_t address_length, uint32_t wait_cycles, spi_inst_addr_trans_mode_t trans_mode) = 0;
|
||||
virtual double set_clock_rate(double clock_rate) = 0;
|
||||
virtual void set_endian(uint32_t endian) = 0;
|
||||
virtual int read(gsl::span<uint8_t> buffer) = 0;
|
||||
virtual int write(gsl::span<const uint8_t> buffer) = 0;
|
||||
virtual int transfer_full_duplex(gsl::span<const uint8_t> write_buffer, gsl::span<uint8_t> read_buffer) = 0;
|
||||
|
|
|
@ -488,6 +488,12 @@ double spi_dev_set_clock_rate(handle_t file, double clock_rate)
|
|||
return spi_device->set_clock_rate(clock_rate);
|
||||
}
|
||||
|
||||
void spi_dev_set_endian(handle_t file, uint32_t endian)
|
||||
{
|
||||
COMMON_ENTRY(spi_device);
|
||||
return spi_device->set_endian(endian);
|
||||
}
|
||||
|
||||
int spi_dev_transfer_full_duplex(handle_t file, const uint8_t *write_buffer, size_t write_len, uint8_t *read_buffer, size_t read_len)
|
||||
{
|
||||
COMMON_ENTRY(spi_device);
|
||||
|
|
Loading…
Reference in New Issue