ra8876 esp32

This commit is contained in:
gemu2015 2020-05-18 10:19:13 +02:00
parent dcde10eac4
commit 21656fdd81
3 changed files with 61 additions and 9 deletions

View File

@ -66,13 +66,14 @@ RA8876::RA8876(int8_t cs,int8_t mosi,int8_t miso,int8_t sclk,int8_t bp) : Render
//#define RA8876_CS_LOW digitalWrite(m_csPin, LOW)
//#define RA8876_CS_HIGH digitalWrite(m_csPin, HIGH)
#ifdef ESP8266
#ifndef ESP32
#define RA8876_CS_LOW GPOC=(1<<m_csPin);
#define RA8876_CS_HIGH GPOS=(1<<m_csPin);
#else
#define RA8876_CS_LOW digitalWrite(1<<m_csPin,0);
#define RA8876_CS_HIGH digitalWrite(1<<m_csPin,1);
#define RA8876_CS_LOW digitalWrite(m_csPin,0);
#define RA8876_CS_HIGH digitalWrite(m_csPin,1);
#endif
/*
extern void ICACHE_RAM_ATTR RA8876_digitalWrite(uint8_t pin, uint8_t val) {
//stopWaveform(pin);
@ -173,10 +174,8 @@ void RA8876::DisplayOnff(int8_t on) {
uint8_t dpcr;
SPI.beginTransaction(m_spiSettings);
dpcr = readReg(RA8876_REG_DPCR);
if (on) {
dpcr |= 0x40; // Display on
dim(dimmer);
} else {
dpcr &= 0x40^0xff; // Display off
// backlight off
@ -185,12 +184,14 @@ void RA8876::DisplayOnff(int8_t on) {
}
writeReg(RA8876_REG_DPCR, dpcr);
SPI.endTransaction();
if (on) {
dim(dimmer);
}
}
// 0-15
void RA8876::dim(uint8_t contrast) {
SPI.beginTransaction(m_spiSettings);
dimmer=contrast;
// pwm0 duty
uint32_t duty=(contrast*1024)/15;
@ -671,10 +672,18 @@ bool RA8876::begin(void) {
return false;
}
#ifndef ESP32
SPI.begin();
#else
SPI.begin(_sclk,_miso,_mosi , -1);
#endif
m_spiSettings = SPISettings(RA8876_SPI_SPEED, MSBFIRST, SPI_MODE3);
#ifdef RA8876_DEBUG
Serial.printf("RA8876 init\n");
#endif
softReset();
if (!initPLL()) {
@ -682,24 +691,44 @@ bool RA8876::begin(void) {
return false;
}
#ifdef RA8876_DEBUG
Serial.printf("RA8876 init pll OK\n");
#endif
if (!initMemory(m_sdramInfo)) {
//Serial.println("initMemory failed");
return false;
}
#ifdef RA8876_DEBUG
Serial.printf("RA8876 init sdram OK\n");
#endif
if (!initDisplay()) {
//Serial.println("initDisplay failed");
return false;
}
#ifdef RA8876_DEBUG
Serial.printf("RA8876 init display OK\n");
#endif
// Set default font
selectInternalFont(RA8876_FONT_SIZE_16);
setTextScale(1);
#ifdef RA8876_DEBUG
Serial.printf("RA8876 set scale OK\n");
#endif
setRotation(0);
clearScreen(0);
#ifdef RA8876_DEBUG
Serial.printf("RA8876 init complete\n");
#endif
return true;
}
@ -899,7 +928,8 @@ void RA8876::setAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) {
writeCmd(RA8876_REG_MRWDP); //04h();
if (flag) SPI.endTransaction();
//if (flag) SPI.endTransaction();
SPI.endTransaction();
}
void RA8876::pushColors(uint16_t *data, uint8_t len, boolean first) {
@ -980,7 +1010,9 @@ void RA8876::waitWriteFifo(void) {
// timeout, soft reset
softReset();
SPI.beginTransaction(m_spiSettings);
#ifdef RA8876_DEBUG
Serial.printf("iter timeout fifo\n");
#endif
return;
}
}
@ -1001,7 +1033,9 @@ void RA8876::wait_ready(void) {
// timeout, soft reset
softReset();
SPI.beginTransaction(m_spiSettings);
#ifdef RA8876_DEBUG
Serial.printf("iter timeout cmd\n");
#endif
return;
}
}
@ -1188,11 +1222,13 @@ void RA8876::setTextMode(void) {
uint8_t icr = readReg(RA8876_REG_ICR);
writeReg(RA8876_REG_ICR, icr | 0x04);
SPI.endTransaction();
if (textcolor==textbgcolor) {
setDrawMode_reg(1);
} else {
setDrawMode_reg(0);
}
SPI.beginTransaction(m_spiSettings);
}
@ -1368,7 +1404,9 @@ size_t RA8876::xwrite(const uint8_t *buffer, size_t size) {
; // Ignored
else if (c == '\n')
{
SPI.endTransaction();
setCursor(0, getCursorY() + getTextSizeY());
SPI.beginTransaction(m_spiSettings);
writeCmd(RA8876_REG_MRWDP); // Reset current register for writing to memory
}
else if ((m_fontFlags & RA8876_FONT_FLAG_XLAT_FULLWIDTH) && ((c >= 0x21) || (c <= 0x7F)))

View File

@ -23,6 +23,7 @@
#include <SPI.h>
#include <renderer.h>
#undef SPRINT
#define SPRINT(A) {char str[32];sprintf(str,"val: %d ",A);Serial.println((char*)str);}

View File

@ -71,11 +71,24 @@ void RA8876_InitDriver()
fg_color = RA8876_WHITE;
bg_color = RA8876_BLACK;
#ifdef ESP32
#define HW_SPI_MOSI 23
#define HW_SPI_MISO 19
#define HW_SPI_CLK 18
#else
#undef HW_SPI_MOSI
#define HW_SPI_MOSI 13
#undef HW_SPI_MISO
#define HW_SPI_MISO 12
#undef HW_SPI_CLK
#define HW_SPI_CLK 14
#endif
// init renderer, must use hardware spi
if (PinUsed(GPIO_SSPI_CS) && (Pin(GPIO_SSPI_MOSI)==13) && (Pin(GPIO_SSPI_MISO)==12) && (Pin(GPIO_SSPI_SCLK)==14)) {
if (PinUsed(GPIO_SSPI_CS) && (Pin(GPIO_SSPI_MOSI)==HW_SPI_MOSI) && (Pin(GPIO_SSPI_MISO)==HW_SPI_MISO) && (Pin(GPIO_SSPI_SCLK)==HW_SPI_CLK)) {
ra8876 = new RA8876(Pin(GPIO_SSPI_CS),Pin(GPIO_SSPI_MOSI),Pin(GPIO_SSPI_MISO),Pin(GPIO_SSPI_SCLK),Pin(GPIO_BACKLIGHT));
} else {
if (PinUsed(GPIO_SPI_CS) && (Pin(GPIO_SPI_MOSI)==13) && (Pin(GPIO_SPI_MISO)==12) && (Pin(GPIO_SPI_CLK)==14)) {
if (PinUsed(GPIO_SPI_CS) && (Pin(GPIO_SPI_MOSI)==HW_SPI_MOSI) && (Pin(GPIO_SPI_MISO)==HW_SPI_MISO) && (Pin(GPIO_SPI_CLK)==HW_SPI_CLK)) {
ra8876 = new RA8876(Pin(GPIO_SPI_CS),Pin(GPIO_SPI_MOSI),Pin(GPIO_SPI_MISO),Pin(GPIO_SPI_CLK),Pin(GPIO_BACKLIGHT));
} else {
return;