Mostly touch screen changes

This commit is contained in:
KTOWN 2013-10-07 21:35:08 +02:00
parent 1ac4e022a3
commit 02d8870981
2 changed files with 279 additions and 261 deletions

View File

@ -55,7 +55,6 @@ void Adafruit_RA8875::softReset(void) {
} }
void Adafruit_RA8875::PLLinit(void) { void Adafruit_RA8875::PLLinit(void) {
// for 480 x 272
if (_size == RA8875_480x272) { if (_size == RA8875_480x272) {
writeReg(RA8875_PLLC1, RA8875_PLLC1_PLLDIV1 + 10); writeReg(RA8875_PLLC1, RA8875_PLLC1_PLLDIV1 + 10);
delay(1); delay(1);
@ -70,67 +69,78 @@ void Adafruit_RA8875::PLLinit(void) {
} }
} }
void Adafruit_RA8875::initialize(void) { void Adafruit_RA8875::initialize(void) {
PLLinit(); PLLinit();
writeReg(RA8875_SYSR, RA8875_SYSR_16BPP | RA8875_SYSR_MCU8); writeReg(RA8875_SYSR, RA8875_SYSR_16BPP | RA8875_SYSR_MCU8);
// for 480 x 272 /* Timing values */
uint8_t pixclk, hsync_start, hsync_pw, hsync_finetune, hsync_nondisp, vsync_pw; uint8_t pixclk;
uint16_t vsync_nondisp, vsync_start; uint8_t hsync_start;
if (_size == RA8875_480x272) { uint8_t hsync_pw;
pixclk = RA8875_PCSR_PDATL | RA8875_PCSR_8CLK; uint8_t hsync_finetune;
hsync_nondisp = 10; uint8_t hsync_nondisp;
hsync_start = 8; uint8_t vsync_pw;
hsync_pw = 48; uint16_t vsync_nondisp;
hsync_finetune = 0; uint16_t vsync_start;
vsync_nondisp = 3;
vsync_start = 8;
vsync_pw = 10;
} else if (_size == RA8875_800x480) {
pixclk = RA8875_PCSR_PDATL | RA8875_PCSR_2CLK;
hsync_nondisp = 26;
hsync_start = 32;
hsync_pw = 96;
hsync_finetune = 0;
vsync_nondisp = 32; /* Set the correct values for the display being used */
vsync_start = 23; if (_size == RA8875_480x272)
vsync_pw = 2; {
pixclk = RA8875_PCSR_PDATL | RA8875_PCSR_8CLK;
hsync_nondisp = 10;
hsync_start = 8;
hsync_pw = 48;
hsync_finetune = 0;
vsync_nondisp = 3;
vsync_start = 8;
vsync_pw = 10;
}
else if (_size == RA8875_800x480)
{
pixclk = RA8875_PCSR_PDATL | RA8875_PCSR_2CLK;
hsync_nondisp = 26;
hsync_start = 32;
hsync_pw = 96;
hsync_finetune = 0;
vsync_nondisp = 32;
vsync_start = 23;
vsync_pw = 2;
} }
writeReg(RA8875_PCSR, pixclk); writeReg(RA8875_PCSR, pixclk);
delay(1); delay(1);
// Horizontal settings registers
writeReg(RA8875_HDWR, (_width / 8) - 1); // H width: (HDWR + 1) * 8 = 480 /* Horizontal settings registers */
writeReg(RA8875_HDWR, (_width / 8) - 1); // H width: (HDWR + 1) * 8 = 480
writeReg(RA8875_HNDFTR, RA8875_HNDFTR_DE_HIGH + hsync_finetune); writeReg(RA8875_HNDFTR, RA8875_HNDFTR_DE_HIGH + hsync_finetune);
writeReg(RA8875_HNDR, (hsync_nondisp - hsync_finetune - 2)/8); // H non-display: HNDR * 8 + HNDFTR + 2 = 10 writeReg(RA8875_HNDR, (hsync_nondisp - hsync_finetune - 2)/8); // H non-display: HNDR * 8 + HNDFTR + 2 = 10
writeReg(RA8875_HSTR, hsync_start/8 - 1); // Hsync start: (HSTR + 1)*8 writeReg(RA8875_HSTR, hsync_start/8 - 1); // Hsync start: (HSTR + 1)*8
writeReg(RA8875_HPWR, RA8875_HPWR_LOW + (hsync_pw/8 - 1)); // HSync pulse width = (HPWR+1) * 8 writeReg(RA8875_HPWR, RA8875_HPWR_LOW + (hsync_pw/8 - 1)); // HSync pulse width = (HPWR+1) * 8
// Vertical settings registers
/* Vertical settings registers */
writeReg(RA8875_VDHR0, (uint16_t)(_height - 1) & 0xFF); writeReg(RA8875_VDHR0, (uint16_t)(_height - 1) & 0xFF);
writeReg(RA8875_VDHR1, (uint16_t)(_height - 1) >> 8); writeReg(RA8875_VDHR1, (uint16_t)(_height - 1) >> 8);
writeReg(RA8875_VNDR0, vsync_nondisp-1); // V non-display period = VNDR + 1 writeReg(RA8875_VNDR0, vsync_nondisp-1); // V non-display period = VNDR + 1
writeReg(RA8875_VNDR1, vsync_nondisp >> 8); writeReg(RA8875_VNDR1, vsync_nondisp >> 8);
writeReg(RA8875_VSTR0, vsync_start-1); // Vsync start position = VSTR + 1 writeReg(RA8875_VSTR0, vsync_start-1); // Vsync start position = VSTR + 1
writeReg(RA8875_VSTR1, vsync_start >> 8); writeReg(RA8875_VSTR1, vsync_start >> 8);
writeReg(RA8875_VPWR, RA8875_VPWR_LOW + vsync_pw - 1); // Vsync pulse width = VPWR + 1 writeReg(RA8875_VPWR, RA8875_VPWR_LOW + vsync_pw - 1); // Vsync pulse width = VPWR + 1
// Set active window X /* Set active window X */
writeReg(RA8875_HSAW0, 0); // horizontal start point writeReg(RA8875_HSAW0, 0); // horizontal start point
writeReg(RA8875_HSAW1, 0); writeReg(RA8875_HSAW1, 0);
writeReg(RA8875_HEAW0, (uint16_t)(_width - 1) & 0xFF); // horizontal end point writeReg(RA8875_HEAW0, (uint16_t)(_width - 1) & 0xFF); // horizontal end point
writeReg(RA8875_HEAW1, (uint16_t)(_width - 1) >> 8); writeReg(RA8875_HEAW1, (uint16_t)(_width - 1) >> 8);
// Set active window Y /* Set active window Y */
writeReg(RA8875_VSAW0, 0); // vertical start point writeReg(RA8875_VSAW0, 0); // vertical start point
writeReg(RA8875_VSAW1, 0); writeReg(RA8875_VSAW1, 0);
writeReg(RA8875_VEAW0, (uint16_t)(_height - 1) & 0xFF); // horizontal end point writeReg(RA8875_VEAW0, (uint16_t)(_height - 1) & 0xFF); // horizontal end point
writeReg(RA8875_VEAW1, (uint16_t)(_height - 1) >> 8); writeReg(RA8875_VEAW1, (uint16_t)(_height - 1) >> 8);
// touch panel? /* ToDo: Setup touch panel? */
// clear full window /* Clear the entire window */
writeReg(RA8875_MCLR, RA8875_MCLR_START | RA8875_MCLR_FULL); writeReg(RA8875_MCLR, RA8875_MCLR_START | RA8875_MCLR_FULL);
delay(500); delay(500);
} }
@ -138,8 +148,6 @@ void Adafruit_RA8875::initialize(void) {
uint16_t Adafruit_RA8875::width(void) { return _width; } uint16_t Adafruit_RA8875::width(void) { return _width; }
uint16_t Adafruit_RA8875::height(void) { return _height; } uint16_t Adafruit_RA8875::height(void) { return _height; }
/************************* Graphics ***********************************/ /************************* Graphics ***********************************/
void Adafruit_RA8875::pushPixels(uint32_t num, uint16_t p) { void Adafruit_RA8875::pushPixels(uint32_t num, uint16_t p) {
@ -205,63 +213,69 @@ void Adafruit_RA8875::PWM2config(boolean on, uint8_t clock) {
} }
} }
void Adafruit_RA8875::touchEnable(boolean on) { void Adafruit_RA8875::touchEnable(boolean on)
if (on) { {
writeReg(RA8875_TPCR0, RA8875_TPCR0_ENABLE | RA8875_TPCR0_WAIT_4096CLK | if (on)
RA8875_TPCR0_WAKEDISABLE | RA8875_TPCR0_ADCCLK_DIV4); // 10mhz max! {
writeReg(RA8875_TPCR1, RA8875_TPCR1_AUTO | RA8875_TPCR1_VREFEXT /* Enable Touch Panel (Reg 0x70) */
| RA8875_TPCR1_DEBOUNCE); writeReg(RA8875_TPCR0, RA8875_TPCR0_ENABLE |
writeReg(RA8875_INTC1, readReg(RA8875_INTC1) | RA8875_INTC1_TP); RA8875_TPCR0_WAIT_4096CLK |
} else { RA8875_TPCR0_WAKEDISABLE |
RA8875_TPCR0_ADCCLK_DIV4); // 10mhz max!
/* Set Auto Mode (Reg 0x71) */
writeReg(RA8875_TPCR1, RA8875_TPCR1_AUTO |
RA8875_TPCR1_VREFEXT |
RA8875_TPCR1_DEBOUNCE);
/* Enable TP INT */
writeReg(RA8875_INTC1, readReg(RA8875_INTC1) | RA8875_INTC1_TP);
}
else
{
/* Disable TP INT */
writeReg(RA8875_INTC1, readReg(RA8875_INTC1) & ~RA8875_INTC1_TP); writeReg(RA8875_INTC1, readReg(RA8875_INTC1) & ~RA8875_INTC1_TP);
/* Disable Touch Panel (Reg 0x70) */
writeReg(RA8875_TPCR0, RA8875_TPCR0_DISABLE); writeReg(RA8875_TPCR0, RA8875_TPCR0_DISABLE);
} }
} }
boolean Adafruit_RA8875::touched(void) { boolean Adafruit_RA8875::touched(void)
{
if (readReg(RA8875_INTC2) & RA8875_INTC2_TP) return true; if (readReg(RA8875_INTC2) & RA8875_INTC2_TP) return true;
return false; return false;
} }
boolean Adafruit_RA8875::touchRead(uint16_t *x, uint16_t *y) { boolean Adafruit_RA8875::touchRead(uint16_t *x, uint16_t *y)
{
uint16_t tx, ty; uint16_t tx, ty;
uint8_t temp; uint8_t temp;
writeCommand(RA8875_TPXH);
tx = readData();
ty = readData();
temp = readData();
Serial.print("[0x");
Serial.print(tx, HEX); Serial.print(", ");
Serial.print(ty, HEX); Serial.print(", ");
Serial.print(temp, HEX); Serial.println("]");
/*
tx = readReg(RA8875_TPXH); tx = readReg(RA8875_TPXH);
ty = readReg(RA8875_TPYH); ty = readReg(RA8875_TPYH);
temp = readReg(RA8875_TPXYL); temp = readReg(RA8875_TPXYL);
*/
tx <<= 2; tx <<= 2;
ty <<= 2; ty <<= 2;
tx |= temp & 0x03; // get the bottom x bits tx |= temp & 0x03; // get the bottom x bits
ty |= (temp >> 2) & 0x03; // get the bottom y bits ty |= (temp >> 2) & 0x03; // get the bottom y bits
*x = tx; *x = tx;
*y = ty; *y = ty;
/* Clear TP INT Status */
writeReg(RA8875_INTC2, RA8875_INTC2_TP); writeReg(RA8875_INTC2, RA8875_INTC2_TP);
return true; return true;
} }
void Adafruit_RA8875::displayOn(boolean on) { void Adafruit_RA8875::displayOn(boolean on)
{
if (on) if (on)
writeReg(RA8875_PWRR, RA8875_PWRR_NORMAL | RA8875_PWRR_DISPON); writeReg(RA8875_PWRR, RA8875_PWRR_NORMAL | RA8875_PWRR_DISPON);
else else
writeReg(RA8875_PWRR, RA8875_PWRR_NORMAL | RA8875_PWRR_DISPOFF); writeReg(RA8875_PWRR, RA8875_PWRR_NORMAL | RA8875_PWRR_DISPOFF);
} }
void Adafruit_RA8875::sleep(boolean sleep) { void Adafruit_RA8875::sleep(boolean sleep)
{
if (sleep) if (sleep)
writeReg(RA8875_PWRR, RA8875_PWRR_DISPOFF | RA8875_PWRR_SLEEP); writeReg(RA8875_PWRR, RA8875_PWRR_DISPOFF | RA8875_PWRR_SLEEP);
else else
@ -270,26 +284,28 @@ void Adafruit_RA8875::sleep(boolean sleep) {
/************************* Low Level ***********************************/ /************************* Low Level ***********************************/
void Adafruit_RA8875::writeReg(uint8_t reg, uint8_t val) { void Adafruit_RA8875::writeReg(uint8_t reg, uint8_t val)
{
writeCommand(reg); writeCommand(reg);
writeData(val); writeData(val);
} }
uint8_t Adafruit_RA8875::readReg(uint8_t reg) { uint8_t Adafruit_RA8875::readReg(uint8_t reg)
{
writeCommand(reg); writeCommand(reg);
return readData(); return readData();
} }
void Adafruit_RA8875::writeData(uint8_t d) { void Adafruit_RA8875::writeData(uint8_t d)
{
digitalWrite(_cs, LOW); digitalWrite(_cs, LOW);
SPI.transfer(RA8875_DATAWRITE); SPI.transfer(RA8875_DATAWRITE);
SPI.transfer(d); SPI.transfer(d);
digitalWrite(_cs, HIGH); digitalWrite(_cs, HIGH);
Serial.print(" = 0x"); Serial.println(d, HEX);
} }
uint8_t Adafruit_RA8875::readData(void) { uint8_t Adafruit_RA8875::readData(void)
{
digitalWrite(_cs, LOW); digitalWrite(_cs, LOW);
SPI.transfer(RA8875_DATAREAD); SPI.transfer(RA8875_DATAREAD);
uint8_t x = SPI.transfer(0x0); uint8_t x = SPI.transfer(0x0);
@ -297,15 +313,16 @@ uint8_t Adafruit_RA8875::readData(void) {
return x; return x;
} }
void Adafruit_RA8875::writeCommand(uint8_t d) { void Adafruit_RA8875::writeCommand(uint8_t d)
//Serial.print("$"); Serial.print(d, HEX); {
digitalWrite(_cs, LOW); digitalWrite(_cs, LOW);
SPI.transfer(RA8875_CMDWRITE); SPI.transfer(RA8875_CMDWRITE);
SPI.transfer(d); SPI.transfer(d);
digitalWrite(_cs, HIGH); digitalWrite(_cs, HIGH);
} }
uint8_t Adafruit_RA8875::readStatus(void) { uint8_t Adafruit_RA8875::readStatus(void)
{
digitalWrite(_cs, LOW); digitalWrite(_cs, LOW);
SPI.transfer(RA8875_CMDREAD); SPI.transfer(RA8875_CMDREAD);
uint8_t x = SPI.transfer(0x0); uint8_t x = SPI.transfer(0x0);

View File

@ -3,36 +3,38 @@
// Sizes! // Sizes!
enum RA8875sizes { RA8875_480x272, RA8875_800x480 }; enum RA8875sizes { RA8875_480x272, RA8875_800x480 };
class Adafruit_RA8875 { class Adafruit_RA8875 {
public: public:
Adafruit_RA8875(uint8_t cs, uint8_t rst); Adafruit_RA8875(uint8_t cs, uint8_t rst);
boolean begin(enum RA8875sizes s);
void softReset(void);
void displayOn(boolean on);
void sleep(boolean sleep);
void pushPixels(uint32_t num, uint16_t p);
void graphicsMode(void);
void setXY(uint16_t x, uint16_t y);
void fillRect(void);
void GPIOX(boolean on); boolean begin(enum RA8875sizes s);
void PWM1config(boolean on, uint8_t clock); void softReset(void);
void PWM2config(boolean on, uint8_t clock); void displayOn(boolean on);
void PWM1out(uint8_t p); void sleep(boolean sleep);
void PWM2out(uint8_t p);
void touchEnable(boolean on); void pushPixels(uint32_t num, uint16_t p);
void graphicsMode(void);
void setXY(uint16_t x, uint16_t y);
void fillRect(void);
/* Backlight */
void GPIOX(boolean on);
void PWM1config(boolean on, uint8_t clock);
void PWM2config(boolean on, uint8_t clock);
void PWM1out(uint8_t p);
void PWM2out(uint8_t p);
/* Touch screen */
void touchEnable(boolean on);
boolean touched(void); boolean touched(void);
boolean touchRead(uint16_t *x, uint16_t *y); boolean touchRead(uint16_t *x, uint16_t *y);
void writeReg(uint8_t reg, uint8_t val); /* Low level access */
void writeReg(uint8_t reg, uint8_t val);
uint8_t readReg(uint8_t reg); uint8_t readReg(uint8_t reg);
void writeData(uint8_t d); void writeData(uint8_t d);
uint8_t readData(void); uint8_t readData(void);
void writeCommand(uint8_t d); void writeCommand(uint8_t d);
uint8_t readStatus(void); uint8_t readStatus(void);
uint16_t width(void); uint16_t width(void);
@ -47,202 +49,201 @@ class Adafruit_RA8875 {
enum RA8875sizes _size; enum RA8875sizes _size;
}; };
// Colors (RGB565)
// Colors! #define RA8875_BLACK 0x0000
#define RA8875_BLACK 0x0000 #define RA8875_BLUE 0x001F
#define RA8875_BLUE 0x001F #define RA8875_RED 0xF800
#define RA8875_RED 0xF800 #define RA8875_GREEN 0x07E0
#define RA8875_GREEN 0x07E0 #define RA8875_CYAN 0x07FF
#define RA8875_CYAN 0x07FF #define RA8875_MAGENTA 0xF81F
#define RA8875_MAGENTA 0xF81F #define RA8875_YELLOW 0xFFE0
#define RA8875_YELLOW 0xFFE0 #define RA8875_WHITE 0xFFFF
#define RA8875_WHITE 0xFFFF
// Command/Data pins for SPI // Command/Data pins for SPI
#define RA8875_DATAWRITE 0x00 #define RA8875_DATAWRITE 0x00
#define RA8875_DATAREAD 0x40 #define RA8875_DATAREAD 0x40
#define RA8875_CMDWRITE 0x80 #define RA8875_CMDWRITE 0x80
#define RA8875_CMDREAD 0xC0 #define RA8875_CMDREAD 0xC0
// Registers & bits // Registers & bits
#define RA8875_PWRR 0x01 #define RA8875_PWRR 0x01
#define RA8875_PWRR_DISPON 0x80 #define RA8875_PWRR_DISPON 0x80
#define RA8875_PWRR_DISPOFF 0x00 #define RA8875_PWRR_DISPOFF 0x00
#define RA8875_PWRR_SLEEP 0x02 #define RA8875_PWRR_SLEEP 0x02
#define RA8875_PWRR_NORMAL 0x00 #define RA8875_PWRR_NORMAL 0x00
#define RA8875_PWRR_SOFTRESET 0x01 #define RA8875_PWRR_SOFTRESET 0x01
#define RA8875_MRWC 0x02 #define RA8875_MRWC 0x02
#define RA8875_GPIOX 0xC7 #define RA8875_GPIOX 0xC7
#define RA8875_PLLC1 0x88 #define RA8875_PLLC1 0x88
#define RA8875_PLLC1_PLLDIV2 0x80 #define RA8875_PLLC1_PLLDIV2 0x80
#define RA8875_PLLC1_PLLDIV1 0x00 #define RA8875_PLLC1_PLLDIV1 0x00
#define RA8875_PLLC2 0x89 #define RA8875_PLLC2 0x89
#define RA8875_PLLC2_DIV1 0x00 #define RA8875_PLLC2_DIV1 0x00
#define RA8875_PLLC2_DIV2 0x01 #define RA8875_PLLC2_DIV2 0x01
#define RA8875_PLLC2_DIV4 0x02 #define RA8875_PLLC2_DIV4 0x02
#define RA8875_PLLC2_DIV8 0x03 #define RA8875_PLLC2_DIV8 0x03
#define RA8875_PLLC2_DIV16 0x04 #define RA8875_PLLC2_DIV16 0x04
#define RA8875_PLLC2_DIV32 0x05 #define RA8875_PLLC2_DIV32 0x05
#define RA8875_PLLC2_DIV64 0x06 #define RA8875_PLLC2_DIV64 0x06
#define RA8875_PLLC2_DIV128 0x07 #define RA8875_PLLC2_DIV128 0x07
#define RA8875_SYSR 0x10 #define RA8875_SYSR 0x10
#define RA8875_SYSR_8BPP 0x00 #define RA8875_SYSR_8BPP 0x00
#define RA8875_SYSR_16BPP 0x0C #define RA8875_SYSR_16BPP 0x0C
#define RA8875_SYSR_MCU8 0x00 #define RA8875_SYSR_MCU8 0x00
#define RA8875_SYSR_MCU16 0x03 #define RA8875_SYSR_MCU16 0x03
#define RA8875_PCSR 0x04 #define RA8875_PCSR 0x04
#define RA8875_PCSR_PDATR 0x00 #define RA8875_PCSR_PDATR 0x00
#define RA8875_PCSR_PDATL 0x80 #define RA8875_PCSR_PDATL 0x80
#define RA8875_PCSR_CLK 0x00 #define RA8875_PCSR_CLK 0x00
#define RA8875_PCSR_2CLK 0x01 #define RA8875_PCSR_2CLK 0x01
#define RA8875_PCSR_4CLK 0x02 #define RA8875_PCSR_4CLK 0x02
#define RA8875_PCSR_8CLK 0x03 #define RA8875_PCSR_8CLK 0x03
#define RA8875_HDWR 0x14 #define RA8875_HDWR 0x14
#define RA8875_HNDFTR 0x15 #define RA8875_HNDFTR 0x15
#define RA8875_HNDFTR_DE_HIGH 0x00 #define RA8875_HNDFTR_DE_HIGH 0x00
#define RA8875_HNDFTR_DE_LOW 0x80 #define RA8875_HNDFTR_DE_LOW 0x80
#define RA8875_HNDR 0x16 #define RA8875_HNDR 0x16
#define RA8875_HSTR 0x17 #define RA8875_HSTR 0x17
#define RA8875_HPWR 0x18 #define RA8875_HPWR 0x18
#define RA8875_HPWR_LOW 0x00 #define RA8875_HPWR_LOW 0x00
#define RA8875_HPWR_HIGH 0x80 #define RA8875_HPWR_HIGH 0x80
#define RA8875_VDHR0 0x19 #define RA8875_VDHR0 0x19
#define RA8875_VDHR1 0x1A #define RA8875_VDHR1 0x1A
#define RA8875_VNDR0 0x1B #define RA8875_VNDR0 0x1B
#define RA8875_VNDR1 0x1C #define RA8875_VNDR1 0x1C
#define RA8875_VSTR0 0x1D #define RA8875_VSTR0 0x1D
#define RA8875_VSTR1 0x1E #define RA8875_VSTR1 0x1E
#define RA8875_VPWR 0x1F #define RA8875_VPWR 0x1F
#define RA8875_VPWR_LOW 0x00 #define RA8875_VPWR_LOW 0x00
#define RA8875_VPWR_HIGH 0x80 #define RA8875_VPWR_HIGH 0x80
#define RA8875_HSAW0 0x30 #define RA8875_HSAW0 0x30
#define RA8875_HSAW1 0x31 #define RA8875_HSAW1 0x31
#define RA8875_VSAW0 0x32 #define RA8875_VSAW0 0x32
#define RA8875_VSAW1 0x33 #define RA8875_VSAW1 0x33
#define RA8875_HEAW0 0x34 #define RA8875_HEAW0 0x34
#define RA8875_HEAW1 0x35 #define RA8875_HEAW1 0x35
#define RA8875_VEAW0 0x36 #define RA8875_VEAW0 0x36
#define RA8875_VEAW1 0x37 #define RA8875_VEAW1 0x37
#define RA8875_MCLR 0x8E #define RA8875_MCLR 0x8E
#define RA8875_MCLR_START 0x80 #define RA8875_MCLR_START 0x80
#define RA8875_MCLR_STOP 0x00 #define RA8875_MCLR_STOP 0x00
#define RA8875_MCLR_READSTATUS 0x80 #define RA8875_MCLR_READSTATUS 0x80
#define RA8875_MCLR_FULL 0x00 #define RA8875_MCLR_FULL 0x00
#define RA8875_MCLR_ACTIVE 0x40 #define RA8875_MCLR_ACTIVE 0x40
#define RA8875_DCR 0x90 #define RA8875_DCR 0x90
#define RA8875_DCR_LINESQUTRI_START 0x80 #define RA8875_DCR_LINESQUTRI_START 0x80
#define RA8875_DCR_LINESQUTRI_STOP 0x00 #define RA8875_DCR_LINESQUTRI_STOP 0x00
#define RA8875_DCR_LINESQUTRI_STATUS 0x80 #define RA8875_DCR_LINESQUTRI_STATUS 0x80
#define RA8875_DCR_CIRCLE_START 0x40 #define RA8875_DCR_CIRCLE_START 0x40
#define RA8875_DCR_CIRCLE_STATUS 0x40 #define RA8875_DCR_CIRCLE_STATUS 0x40
#define RA8875_DCR_CIRCLE_STOP 0x00 #define RA8875_DCR_CIRCLE_STOP 0x00
#define RA8875_DCR_FILL 0x20 #define RA8875_DCR_FILL 0x20
#define RA8875_DCR_NOFILL 0x00 #define RA8875_DCR_NOFILL 0x00
#define RA8875_DCR_DRAWLINE 0x00 #define RA8875_DCR_DRAWLINE 0x00
#define RA8875_DCR_DRAWSQUARE 0x10 #define RA8875_DCR_DRAWSQUARE 0x10
#define RA8875_MWCR0 0x40 #define RA8875_MWCR0 0x40
#define RA8875_MWCR0_GFXMODE 0x00 #define RA8875_MWCR0_GFXMODE 0x00
#define RA8875_MWCR0_TXTMODE 0x80 #define RA8875_MWCR0_TXTMODE 0x80
#define RA8875_CURH0 0x46 #define RA8875_CURH0 0x46
#define RA8875_CURH1 0x47 #define RA8875_CURH1 0x47
#define RA8875_CURV0 0x48 #define RA8875_CURV0 0x48
#define RA8875_CURV1 0x49 #define RA8875_CURV1 0x49
#define RA8875_P1CR 0x8A #define RA8875_P1CR 0x8A
#define RA8875_P1CR_ENABLE 0x80 #define RA8875_P1CR_ENABLE 0x80
#define RA8875_P1CR_DISABLE 0x00 #define RA8875_P1CR_DISABLE 0x00
#define RA8875_P1CR_CLKOUT 0x10 #define RA8875_P1CR_CLKOUT 0x10
#define RA8875_P1CR_PWMOUT 0x00 #define RA8875_P1CR_PWMOUT 0x00
#define RA8875_P1DCR 0x8B #define RA8875_P1DCR 0x8B
#define RA8875_P2CR 0x8C #define RA8875_P2CR 0x8C
#define RA8875_P2CR_ENABLE 0x80 #define RA8875_P2CR_ENABLE 0x80
#define RA8875_P2CR_DISABLE 0x00 #define RA8875_P2CR_DISABLE 0x00
#define RA8875_P2CR_CLKOUT 0x10 #define RA8875_P2CR_CLKOUT 0x10
#define RA8875_P2CR_PWMOUT 0x00 #define RA8875_P2CR_PWMOUT 0x00
#define RA8875_P2DCR 0x8D #define RA8875_P2DCR 0x8D
#define RA8875_PWM_CLK_DIV1 0x00 #define RA8875_PWM_CLK_DIV1 0x00
#define RA8875_PWM_CLK_DIV2 0x01 #define RA8875_PWM_CLK_DIV2 0x01
#define RA8875_PWM_CLK_DIV4 0x02 #define RA8875_PWM_CLK_DIV4 0x02
#define RA8875_PWM_CLK_DIV8 0x03 #define RA8875_PWM_CLK_DIV8 0x03
#define RA8875_PWM_CLK_DIV16 0x04 #define RA8875_PWM_CLK_DIV16 0x04
#define RA8875_PWM_CLK_DIV32 0x05 #define RA8875_PWM_CLK_DIV32 0x05
#define RA8875_PWM_CLK_DIV64 0x06 #define RA8875_PWM_CLK_DIV64 0x06
#define RA8875_PWM_CLK_DIV128 0x07 #define RA8875_PWM_CLK_DIV128 0x07
#define RA8875_PWM_CLK_DIV256 0x08 #define RA8875_PWM_CLK_DIV256 0x08
#define RA8875_PWM_CLK_DIV512 0x09 #define RA8875_PWM_CLK_DIV512 0x09
#define RA8875_PWM_CLK_DIV1024 0x0A #define RA8875_PWM_CLK_DIV1024 0x0A
#define RA8875_PWM_CLK_DIV2048 0x0B #define RA8875_PWM_CLK_DIV2048 0x0B
#define RA8875_PWM_CLK_DIV4096 0x0C #define RA8875_PWM_CLK_DIV4096 0x0C
#define RA8875_PWM_CLK_DIV8192 0x0D #define RA8875_PWM_CLK_DIV8192 0x0D
#define RA8875_PWM_CLK_DIV16384 0x0E #define RA8875_PWM_CLK_DIV16384 0x0E
#define RA8875_PWM_CLK_DIV32768 0x0F #define RA8875_PWM_CLK_DIV32768 0x0F
#define RA8875_TPCR0 0x70 #define RA8875_TPCR0 0x70
#define RA8875_TPCR0_ENABLE 0x80 #define RA8875_TPCR0_ENABLE 0x80
#define RA8875_TPCR0_DISABLE 0x00 #define RA8875_TPCR0_DISABLE 0x00
#define RA8875_TPCR0_WAIT_512CLK 0x00 #define RA8875_TPCR0_WAIT_512CLK 0x00
#define RA8875_TPCR0_WAIT_1024CLK 0x10 #define RA8875_TPCR0_WAIT_1024CLK 0x10
#define RA8875_TPCR0_WAIT_2048CLK 0x20 #define RA8875_TPCR0_WAIT_2048CLK 0x20
#define RA8875_TPCR0_WAIT_4096CLK 0x30 #define RA8875_TPCR0_WAIT_4096CLK 0x30
#define RA8875_TPCR0_WAIT_8192CLK 0x40 #define RA8875_TPCR0_WAIT_8192CLK 0x40
#define RA8875_TPCR0_WAIT_16384CLK 0x50 #define RA8875_TPCR0_WAIT_16384CLK 0x50
#define RA8875_TPCR0_WAIT_32768CLK 0x60 #define RA8875_TPCR0_WAIT_32768CLK 0x60
#define RA8875_TPCR0_WAIT_65536CLK 0x70 #define RA8875_TPCR0_WAIT_65536CLK 0x70
#define RA8875_TPCR0_WAKEENABLE 0x08 #define RA8875_TPCR0_WAKEENABLE 0x08
#define RA8875_TPCR0_WAKEDISABLE 0x00 #define RA8875_TPCR0_WAKEDISABLE 0x00
#define RA8875_TPCR0_ADCCLK_DIV1 0x00 #define RA8875_TPCR0_ADCCLK_DIV1 0x00
#define RA8875_TPCR0_ADCCLK_DIV2 0x01 #define RA8875_TPCR0_ADCCLK_DIV2 0x01
#define RA8875_TPCR0_ADCCLK_DIV4 0x02 #define RA8875_TPCR0_ADCCLK_DIV4 0x02
#define RA8875_TPCR0_ADCCLK_DIV8 0x03 #define RA8875_TPCR0_ADCCLK_DIV8 0x03
#define RA8875_TPCR0_ADCCLK_DIV16 0x04 #define RA8875_TPCR0_ADCCLK_DIV16 0x04
#define RA8875_TPCR0_ADCCLK_DIV32 0x05 #define RA8875_TPCR0_ADCCLK_DIV32 0x05
#define RA8875_TPCR0_ADCCLK_DIV64 0x06 #define RA8875_TPCR0_ADCCLK_DIV64 0x06
#define RA8875_TPCR0_ADCCLK_DIV128 0x07 #define RA8875_TPCR0_ADCCLK_DIV128 0x07
#define RA8875_TPCR1 0x71 #define RA8875_TPCR1 0x71
#define RA8875_TPCR1_AUTO 0x00 #define RA8875_TPCR1_AUTO 0x00
#define RA8875_TPCR1_MANUAL 0x40 #define RA8875_TPCR1_MANUAL 0x40
#define RA8875_TPCR1_VREFINT 0x00 #define RA8875_TPCR1_VREFINT 0x00
#define RA8875_TPCR1_VREFEXT 0x20 #define RA8875_TPCR1_VREFEXT 0x20
#define RA8875_TPCR1_DEBOUNCE 0x04 #define RA8875_TPCR1_DEBOUNCE 0x04
#define RA8875_TPCR1_NODEBOUNCE 0x00 #define RA8875_TPCR1_NODEBOUNCE 0x00
#define RA8875_TPCR1_IDLE 0x00 #define RA8875_TPCR1_IDLE 0x00
#define RA8875_TPCR1_WAIT 0x01 #define RA8875_TPCR1_WAIT 0x01
#define RA8875_TPCR1_LATCHX 0x02 #define RA8875_TPCR1_LATCHX 0x02
#define RA8875_TPCR1_LATCHY 0x03 #define RA8875_TPCR1_LATCHY 0x03
#define RA8875_TPXH 0x72 #define RA8875_TPXH 0x72
#define RA8875_TPYH 0x73 #define RA8875_TPYH 0x73
#define RA8875_TPXYL 0x74 #define RA8875_TPXYL 0x74
#define RA8875_INTC1 0xF0 #define RA8875_INTC1 0xF0
#define RA8875_INTC1_KEY 0x10 #define RA8875_INTC1_KEY 0x10
#define RA8875_INTC1_DMA 0x08 #define RA8875_INTC1_DMA 0x08
#define RA8875_INTC1_TP 0x04 #define RA8875_INTC1_TP 0x04
#define RA8875_INTC1_BTE 0x02 #define RA8875_INTC1_BTE 0x02
#define RA8875_INTC2 0xF1 #define RA8875_INTC2 0xF1
#define RA8875_INTC2_KEY 0x10 #define RA8875_INTC2_KEY 0x10
#define RA8875_INTC2_DMA 0x08 #define RA8875_INTC2_DMA 0x08
#define RA8875_INTC2_TP 0x04 #define RA8875_INTC2_TP 0x04
#define RA8875_INTC2_BTE 0x02 #define RA8875_INTC2_BTE 0x02