Spi: fix chip select handling
This commit is contained in:
parent
f975a37bf3
commit
3093a80f2a
@ -9,7 +9,9 @@ const uint8_t buf[] = "Test";
|
||||
int main(void)
|
||||
{
|
||||
Gpio led_1(17);
|
||||
Spi spi_0(0, 2, 3, 4, 25);
|
||||
Gpio lcd_chip_select(25);
|
||||
|
||||
Spi spi_0(0, 2, 3, 4, lcd_chip_select);
|
||||
|
||||
while(1) {
|
||||
delay_ms(200);
|
||||
|
@ -3,17 +3,22 @@
|
||||
#include "platform/hal.h"
|
||||
#include "st7789.h"
|
||||
|
||||
hal::Gpio led_1(17);
|
||||
|
||||
hal::Gpio lcd_reset(26);
|
||||
hal::Gpio lcd_data_command(18);
|
||||
hal::Gpio lcd_backlight(23);
|
||||
hal::Gpio lcd_chip_select(25);
|
||||
hal::Spi lcd_spi(0, 2, 3, 4, 25);
|
||||
hal::Spi lcd_spi(0, 2, 3, 4, lcd_chip_select);
|
||||
|
||||
St7789 lcd(lcd_spi, lcd_reset, lcd_data_command, lcd_backlight, lcd_chip_select);
|
||||
St7789 lcd(lcd_spi, lcd_reset, lcd_data_command, lcd_backlight);
|
||||
|
||||
int main(void)
|
||||
{
|
||||
lcd.init();
|
||||
lcd.clear(0);
|
||||
while(true) {
|
||||
delay_ms(200);
|
||||
led_1.toggle();
|
||||
}
|
||||
}
|
||||
|
@ -12,7 +12,8 @@ extern "C" {
|
||||
|
||||
using namespace platform::nrf52;
|
||||
|
||||
Spi::Spi(uint32_t instance, uint32_t sck, uint32_t mosi, uint32_t miso, uint32_t cs)
|
||||
Spi::Spi(uint32_t instance, uint32_t sck, uint32_t mosi, uint32_t miso, interfaces::GpioInterface & cs)
|
||||
: chip_select(cs)
|
||||
{
|
||||
assert(instance < 3);
|
||||
|
||||
@ -24,6 +25,8 @@ Spi::Spi(uint32_t instance, uint32_t sck, uint32_t mosi, uint32_t miso, uint32_t
|
||||
SPI_REGS = reinterpret_cast<NRF_SPI_Type *>(NRF_SPI2_BASE);
|
||||
}
|
||||
|
||||
this->chip_select.set();
|
||||
|
||||
SPI_REGS->ENABLE = 0;
|
||||
SPI_REGS->PSELSCK = sck;
|
||||
SPI_REGS->PSELMOSI = mosi;
|
||||
@ -41,13 +44,11 @@ Spi::~Spi()
|
||||
|
||||
void Spi::send(const uint8_t * buffer, uint32_t len)
|
||||
{
|
||||
//FIXME: missing CS handling
|
||||
|
||||
this->chip_select.clear();
|
||||
for(unsigned int i = 0; i < len; i++) {
|
||||
this->transfer(buffer[i]);
|
||||
}
|
||||
|
||||
//FIXME: missing CS handling
|
||||
this->chip_select.set();
|
||||
}
|
||||
|
||||
void Spi::recv(uint8_t * buffer, uint32_t len)
|
||||
|
@ -1,6 +1,7 @@
|
||||
#ifndef __PLATFORM_NRF52_SPI_H__
|
||||
#define __PLATFORM_NRF52_SPI_H__
|
||||
|
||||
#include "gpio_interface.h"
|
||||
#include "spi_interface.h"
|
||||
|
||||
namespace platform::nrf52 {
|
||||
@ -8,13 +9,15 @@ namespace platform::nrf52 {
|
||||
class Spi : public interfaces::SpiInterface
|
||||
{
|
||||
public:
|
||||
Spi(uint32_t instance, uint32_t sck, uint32_t mosi, uint32_t miso, uint32_t cs);
|
||||
Spi(uint32_t instance, uint32_t sck, uint32_t mosi, uint32_t miso, interfaces::GpioInterface & cs);
|
||||
~Spi();
|
||||
void send(const uint8_t * buffer, uint32_t len) override;
|
||||
void recv(uint8_t * buffer, uint32_t len) override;
|
||||
|
||||
private:
|
||||
uint32_t transfer(uint32_t);
|
||||
|
||||
interfaces::GpioInterface & chip_select;
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -6,27 +6,21 @@
|
||||
St7789::St7789(interfaces::SpiInterface & spi_if,
|
||||
interfaces::GpioInterface & rst,
|
||||
interfaces::GpioInterface & dc,
|
||||
interfaces::GpioInterface & bl,
|
||||
interfaces::GpioInterface & cs)
|
||||
interfaces::GpioInterface & bl)
|
||||
: spi(spi_if)
|
||||
, reset(rst)
|
||||
, data_command(dc)
|
||||
, backlight(bl)
|
||||
, select(cs)
|
||||
{
|
||||
this->reset.set();
|
||||
this->data_command.set();
|
||||
this->backlight.set();
|
||||
this->select.clear();
|
||||
|
||||
// hard reset
|
||||
this->reset.clear();
|
||||
delay_ms(100);
|
||||
this->reset.set();
|
||||
delay_ms(100);
|
||||
|
||||
this->init();
|
||||
this->clear(0x0000);
|
||||
}
|
||||
|
||||
void St7789::init()
|
||||
|
@ -9,22 +9,21 @@ class St7789
|
||||
{
|
||||
public:
|
||||
St7789(interfaces::SpiInterface &,
|
||||
interfaces::GpioInterface &,
|
||||
interfaces::GpioInterface &,
|
||||
interfaces::GpioInterface &,
|
||||
interfaces::GpioInterface &);
|
||||
|
||||
void init();
|
||||
void clear(uint16_t Color);
|
||||
|
||||
private:
|
||||
interfaces::SpiInterface & spi;
|
||||
interfaces::GpioInterface & reset;
|
||||
interfaces::GpioInterface & data_command;
|
||||
interfaces::GpioInterface & backlight;
|
||||
interfaces::GpioInterface & select;
|
||||
|
||||
void init();
|
||||
void send_cmd(uint8_t);
|
||||
void send_data(uint8_t);
|
||||
void clear(uint16_t Color);
|
||||
void set_windows(uint16_t x_start, uint16_t y_start, uint16_t x_end, uint16_t y_end);
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user