dev/c++ #7
@@ -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);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user