Fork of https://os.mbed.com/users/sebastiken/code/Adafruit_RA8875/ ; Adapted for use with K64F and in the process of adding more functions.

Dependencies:   mbed BNO055

Revision:
0:66c1aa3d198e
Child:
1:ac22f0f36d6b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RA8875.h	Fri Sep 08 14:05:04 2017 +0000
@@ -0,0 +1,325 @@
+#ifndef RA8875_H
+#define RA8875_H
+#include "mbed.h"
+
+// Sizes!
+enum RA8875sizes { RA8875_480x272, RA8875_800x480 };
+
+// Touch screen cal structs
+typedef struct Point 
+{
+  int32_t x;
+  int32_t y;
+} tsPoint_t;
+
+typedef struct //Matrix
+{
+  int32_t An,
+          Bn,
+          Cn,
+          Dn,
+          En,
+          Fn,
+          Divider ;
+} tsMatrix_t;
+
+class Adafruit_RA8875 { // : public Adafruit_GFX {
+ public:
+  Adafruit_RA8875(PinName MOSI, PinName MISO, PinName SCLK,
+        PinName CS, PinName RST);
+  
+  bool begin(enum RA8875sizes s);
+  void    softReset(void);
+  void    displayOn(bool on);
+  void    sleep(bool sleep);
+
+  /* Text functions */
+  void    textMode(void);
+  void    textSetCursor(uint16_t x, uint16_t y);
+  void    textColor(uint16_t foreColor, uint16_t bgColor);
+  void    textTransparent(uint16_t foreColor);
+  void    textEnlarge(uint8_t scale);
+  void    textWrite(const char* buffer, uint16_t len=0);
+
+  /* Graphics functions */
+  void    graphicsMode(void);
+  void    setXY(uint16_t x, uint16_t y);
+  void    pushPixels(uint32_t num, uint16_t p);
+  void    fillRect(void);
+
+  /* Adafruit_GFX functions */
+  void    drawPixel(int16_t x, int16_t y, uint16_t color);
+  void    drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color);
+  void    drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color);
+  
+  /* HW accelerated wrapper functions (override Adafruit_GFX prototypes) */
+  void    fillScreen(uint16_t color);
+  void    drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color);
+//  void    drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
+//  void    fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
+//  void    drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color);
+//  void    fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color);
+//  void    drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color);
+//  void    fillTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color);
+//  void    drawEllipse(int16_t xCenter, int16_t yCenter, int16_t longAxis, int16_t shortAxis, uint16_t color);
+//  void    fillEllipse(int16_t xCenter, int16_t yCenter, int16_t longAxis, int16_t shortAxis, uint16_t color);
+//  void    drawCurve(int16_t xCenter, int16_t yCenter, int16_t longAxis, int16_t shortAxis, uint8_t curvePart, uint16_t color);
+//  void    fillCurve(int16_t xCenter, int16_t yCenter, int16_t longAxis, int16_t shortAxis, uint8_t curvePart, uint16_t color);
+  
+  /* Backlight */
+  void    GPIOX(bool on);
+  void    PWM1config(bool on, uint8_t clock);
+  void    PWM2config(bool on, uint8_t clock);
+  void    PWM1out(uint8_t p);
+  void    PWM2out(uint8_t p);
+
+  /* Touch screen */
+  void    touchEnable(bool on);
+  bool touched(void);
+  bool touchRead(uint16_t *x, uint16_t *y);
+
+  /* Low level access */
+  void    writeReg(uint8_t reg, uint8_t val);
+  uint8_t readReg(uint8_t reg);
+  void    writeData(uint8_t d);
+  uint8_t readData(void);
+  void    writeCommand(uint8_t d);
+  uint8_t readStatus(void);
+  bool waitPoll(uint8_t r, uint8_t f);
+  uint16_t width(void);
+  uint16_t height(void);
+
+  /* Play nice with Arduino's Print class */
+  virtual size_t write(uint8_t b) {
+    textWrite((const char *)&b, 1);
+    return 1;
+  }
+  virtual size_t write(const uint8_t *buffer, size_t size) {
+    textWrite((const char *)buffer, size);
+    return size;
+  }
+
+ private:
+  void PLLinit(void);
+  void initialize(void);
+  
+//  /* GFX Helper Functions */
+  void circleHelper(int16_t x0, int16_t y0, int16_t r, uint16_t color, bool filled);
+  void rectHelper  (int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color, bool filled);
+  void triangleHelper(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color, bool filled);
+  void ellipseHelper(int16_t xCenter, int16_t yCenter, int16_t longAxis, int16_t shortAxis, uint16_t color, bool filled);
+  void curveHelper(int16_t xCenter, int16_t yCenter, int16_t longAxis, int16_t shortAxis, uint8_t curvePart, uint16_t color, bool filled);
+
+  DigitalOut _cs, _rst;
+  uint16_t _width, _height;
+  uint8_t _textScale;
+  enum RA8875sizes _size;
+
+  SPI spi;                        ///< spi port
+};
+
+// Colors (RGB565)
+#define	RA8875_BLACK            0x0000
+#define	RA8875_BLUE             0x001F
+#define	RA8875_RED              0xF800
+#define	RA8875_GREEN            0x07E0
+#define RA8875_CYAN             0x07FF
+#define RA8875_MAGENTA          0xF81F
+#define RA8875_YELLOW           0xFFE0  
+#define RA8875_WHITE            0xFFFF
+
+// Command/Data pins for SPI
+#define RA8875_DATAWRITE        0x00
+#define RA8875_DATAREAD         0x40
+#define RA8875_CMDWRITE         0x80
+#define RA8875_CMDREAD          0xC0
+
+// Registers & bits
+#define RA8875_PWRR             0x01
+#define RA8875_PWRR_DISPON      0x80
+#define RA8875_PWRR_DISPOFF     0x00
+#define RA8875_PWRR_SLEEP       0x02
+#define RA8875_PWRR_NORMAL      0x00
+#define RA8875_PWRR_SOFTRESET   0x01
+
+#define RA8875_MRWC             0x02
+
+#define RA8875_GPIOX            0xC7
+
+#define RA8875_PLLC1            0x88
+#define RA8875_PLLC1_PLLDIV2    0x80
+#define RA8875_PLLC1_PLLDIV1    0x00
+
+#define RA8875_PLLC2            0x89
+#define RA8875_PLLC2_DIV1       0x00
+#define RA8875_PLLC2_DIV2       0x01
+#define RA8875_PLLC2_DIV4       0x02
+#define RA8875_PLLC2_DIV8       0x03
+#define RA8875_PLLC2_DIV16      0x04
+#define RA8875_PLLC2_DIV32      0x05
+#define RA8875_PLLC2_DIV64      0x06
+#define RA8875_PLLC2_DIV128     0x07
+
+#define RA8875_SYSR             0x10
+#define RA8875_SYSR_8BPP        0x00
+#define RA8875_SYSR_16BPP       0x0C
+#define RA8875_SYSR_MCU8        0x00
+#define RA8875_SYSR_MCU16       0x03
+
+#define RA8875_PCSR             0x04
+#define RA8875_PCSR_PDATR       0x00
+#define RA8875_PCSR_PDATL       0x80
+#define RA8875_PCSR_CLK         0x00
+#define RA8875_PCSR_2CLK        0x01
+#define RA8875_PCSR_4CLK        0x02
+#define RA8875_PCSR_8CLK        0x03
+
+#define RA8875_HDWR             0x14
+
+#define RA8875_HNDFTR           0x15
+#define RA8875_HNDFTR_DE_HIGH   0x00
+#define RA8875_HNDFTR_DE_LOW    0x80
+
+#define RA8875_HNDR             0x16
+#define RA8875_HSTR             0x17
+#define RA8875_HPWR             0x18
+#define RA8875_HPWR_LOW         0x00
+#define RA8875_HPWR_HIGH        0x80
+
+#define RA8875_VDHR0            0x19
+#define RA8875_VDHR1            0x1A
+#define RA8875_VNDR0            0x1B
+#define RA8875_VNDR1            0x1C
+#define RA8875_VSTR0            0x1D
+#define RA8875_VSTR1            0x1E
+#define RA8875_VPWR             0x1F
+#define RA8875_VPWR_LOW         0x00
+#define RA8875_VPWR_HIGH        0x80
+
+#define RA8875_HSAW0            0x30
+#define RA8875_HSAW1            0x31
+#define RA8875_VSAW0            0x32
+#define RA8875_VSAW1            0x33
+
+#define RA8875_HEAW0            0x34
+#define RA8875_HEAW1            0x35
+#define RA8875_VEAW0            0x36
+#define RA8875_VEAW1            0x37
+
+#define RA8875_MCLR             0x8E
+#define RA8875_MCLR_START       0x80
+#define RA8875_MCLR_STOP        0x00
+#define RA8875_MCLR_READSTATUS  0x80
+#define RA8875_MCLR_FULL        0x00
+#define RA8875_MCLR_ACTIVE      0x40
+
+#define RA8875_DCR                    0x90
+#define RA8875_DCR_LINESQUTRI_START   0x80
+#define RA8875_DCR_LINESQUTRI_STOP    0x00
+#define RA8875_DCR_LINESQUTRI_STATUS  0x80
+#define RA8875_DCR_CIRCLE_START       0x40
+#define RA8875_DCR_CIRCLE_STATUS      0x40
+#define RA8875_DCR_CIRCLE_STOP        0x00
+#define RA8875_DCR_FILL               0x20
+#define RA8875_DCR_NOFILL             0x00
+#define RA8875_DCR_DRAWLINE           0x00
+#define RA8875_DCR_DRAWTRIANGLE       0x01
+#define RA8875_DCR_DRAWSQUARE         0x10
+
+
+#define RA8875_ELLIPSE                0xA0
+#define RA8875_ELLIPSE_STATUS         0x80
+
+#define RA8875_MWCR0            0x40
+#define RA8875_MWCR0_GFXMODE    0x00
+#define RA8875_MWCR0_TXTMODE    0x80
+
+#define RA8875_CURH0            0x46
+#define RA8875_CURH1            0x47
+#define RA8875_CURV0            0x48
+#define RA8875_CURV1            0x49
+
+#define RA8875_P1CR             0x8A
+#define RA8875_P1CR_ENABLE      0x80
+#define RA8875_P1CR_DISABLE     0x00
+#define RA8875_P1CR_CLKOUT      0x10
+#define RA8875_P1CR_PWMOUT      0x00
+
+#define RA8875_P1DCR            0x8B
+
+#define RA8875_P2CR             0x8C
+#define RA8875_P2CR_ENABLE      0x80
+#define RA8875_P2CR_DISABLE     0x00
+#define RA8875_P2CR_CLKOUT      0x10
+#define RA8875_P2CR_PWMOUT      0x00
+
+#define RA8875_P2DCR            0x8D
+
+#define RA8875_PWM_CLK_DIV1     0x00
+#define RA8875_PWM_CLK_DIV2     0x01
+#define RA8875_PWM_CLK_DIV4     0x02
+#define RA8875_PWM_CLK_DIV8     0x03
+#define RA8875_PWM_CLK_DIV16    0x04
+#define RA8875_PWM_CLK_DIV32    0x05
+#define RA8875_PWM_CLK_DIV64    0x06
+#define RA8875_PWM_CLK_DIV128   0x07
+#define RA8875_PWM_CLK_DIV256   0x08
+#define RA8875_PWM_CLK_DIV512   0x09
+#define RA8875_PWM_CLK_DIV1024  0x0A
+#define RA8875_PWM_CLK_DIV2048  0x0B
+#define RA8875_PWM_CLK_DIV4096  0x0C
+#define RA8875_PWM_CLK_DIV8192  0x0D
+#define RA8875_PWM_CLK_DIV16384 0x0E
+#define RA8875_PWM_CLK_DIV32768 0x0F
+
+#define RA8875_TPCR0                  0x70
+#define RA8875_TPCR0_ENABLE           0x80
+#define RA8875_TPCR0_DISABLE          0x00
+#define RA8875_TPCR0_WAIT_512CLK      0x00
+#define RA8875_TPCR0_WAIT_1024CLK     0x10
+#define RA8875_TPCR0_WAIT_2048CLK     0x20
+#define RA8875_TPCR0_WAIT_4096CLK     0x30
+#define RA8875_TPCR0_WAIT_8192CLK     0x40
+#define RA8875_TPCR0_WAIT_16384CLK    0x50
+#define RA8875_TPCR0_WAIT_32768CLK    0x60
+#define RA8875_TPCR0_WAIT_65536CLK    0x70
+#define RA8875_TPCR0_WAKEENABLE       0x08
+#define RA8875_TPCR0_WAKEDISABLE      0x00
+#define RA8875_TPCR0_ADCCLK_DIV1      0x00
+#define RA8875_TPCR0_ADCCLK_DIV2      0x01
+#define RA8875_TPCR0_ADCCLK_DIV4      0x02
+#define RA8875_TPCR0_ADCCLK_DIV8      0x03
+#define RA8875_TPCR0_ADCCLK_DIV16     0x04
+#define RA8875_TPCR0_ADCCLK_DIV32     0x05
+#define RA8875_TPCR0_ADCCLK_DIV64     0x06
+#define RA8875_TPCR0_ADCCLK_DIV128    0x07
+
+#define RA8875_TPCR1            0x71
+#define RA8875_TPCR1_AUTO       0x00
+#define RA8875_TPCR1_MANUAL     0x40
+#define RA8875_TPCR1_VREFINT    0x00
+#define RA8875_TPCR1_VREFEXT    0x20
+#define RA8875_TPCR1_DEBOUNCE   0x04
+#define RA8875_TPCR1_NODEBOUNCE 0x00
+#define RA8875_TPCR1_IDLE       0x00
+#define RA8875_TPCR1_WAIT       0x01
+#define RA8875_TPCR1_LATCHX     0x02
+#define RA8875_TPCR1_LATCHY     0x03
+
+#define RA8875_TPXH             0x72
+#define RA8875_TPYH             0x73
+#define RA8875_TPXYL            0x74
+
+#define RA8875_INTC1            0xF0
+#define RA8875_INTC1_KEY        0x10
+#define RA8875_INTC1_DMA        0x08
+#define RA8875_INTC1_TP         0x04
+#define RA8875_INTC1_BTE        0x02
+
+#define RA8875_INTC2            0xF1
+#define RA8875_INTC2_KEY        0x10
+#define RA8875_INTC2_DMA        0x08
+#define RA8875_INTC2_TP         0x04
+#define RA8875_INTC2_BTE        0x02
+
+#endif