MCUFRIEND_kbv library for MBED depends on ADA_GFX_kbv library

Dependents:   TFT_Touch_botao_v1 TFT_Touch_exemplo5_git_touch TESTE_1 TFT_Touch_exemplo6_git_touch_button_3_ ... more

Revision:
0:6f633078852b
Child:
2:12c1ed9dba30
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/utility/mcufriend_mbed.h	Mon Apr 26 14:44:21 2021 +0000
@@ -0,0 +1,101 @@
+#ifndef MCUFRIEND_MBED_H_
+#define MCUFRIEND_MBED_H_
+
+#include <mbed.h>
+
+#if defined(USE_SERIAL)
+#include "mcufriend_keil_spi.h"
+#else
+
+BusOut digitalL(D0, D1, D2, D3, D4, D5, D6, D7);
+BusOut digitalH(D8, D9, D10, D11, D12, D13, NC, NC);
+BusOut analog(A0, A1, A2, A3, A4, A5, NC, NC);
+
+#include "pin_shield_1.h"     //shield pin macros e.g. A2_PORT, PIN_OUTPUT()
+#include "pin_shield_8.h"     //macros for write_8(), read_8(), setWriteDir(), ...
+
+// control pins as used in MCUFRIEND shields 
+  #define RD_PORT A0_PORT
+  #define RD_PIN  A0_PIN
+  #define WR_PORT A1_PORT
+  #define WR_PIN  A1_PIN
+  #define CD_PORT A2_PORT
+  #define CD_PIN  A2_PIN
+  #define CS_PORT A3_PORT
+  #define CS_PIN  A3_PIN
+  #define RESET_PORT A4_PORT
+  #define RESET_PIN  A4_PIN
+
+// general purpose pin macros
+ #define RD_ACTIVE  PIN_LOW(RD_PORT, RD_PIN)
+ #define RD_IDLE    PIN_HIGH(RD_PORT, RD_PIN)
+ #define RD_OUTPUT  PIN_OUTPUT(RD_PORT, RD_PIN)
+ #define WR_ACTIVE  PIN_LOW(WR_PORT, WR_PIN)
+ #define WR_IDLE    PIN_HIGH(WR_PORT, WR_PIN)
+ #define WR_OUTPUT  PIN_OUTPUT(WR_PORT, WR_PIN)
+ #define CD_COMMAND PIN_LOW(CD_PORT, CD_PIN)
+ #define CD_DATA    PIN_HIGH(CD_PORT, CD_PIN)
+ #define CD_OUTPUT  PIN_OUTPUT(CD_PORT, CD_PIN)
+ #define CS_ACTIVE  PIN_LOW(CS_PORT, CS_PIN)
+ #define CS_IDLE    PIN_HIGH(CS_PORT, CS_PIN)
+ #define CS_OUTPUT  PIN_OUTPUT(CS_PORT, CS_PIN)
+ #define RESET_ACTIVE  PIN_LOW(RESET_PORT, RESET_PIN)
+ #define RESET_IDLE    PIN_HIGH(RESET_PORT, RESET_PIN)
+ #define RESET_OUTPUT  PIN_OUTPUT(RESET_PORT, RESET_PIN)
+
+#define WR_ACTIVE2  {WR_ACTIVE; WR_ACTIVE;}
+#define WR_ACTIVE4  {WR_ACTIVE2; WR_ACTIVE2;}
+#define WR_ACTIVE8  {WR_ACTIVE4; WR_ACTIVE4;}
+#define RD_ACTIVE2  {RD_ACTIVE; RD_ACTIVE;}
+#define RD_ACTIVE4  {RD_ACTIVE2; RD_ACTIVE2;}
+#define RD_ACTIVE8  {RD_ACTIVE4; RD_ACTIVE4;}
+#define RD_ACTIVE16 {RD_ACTIVE8; RD_ACTIVE8;}
+#define WR_IDLE2  {WR_IDLE; WR_IDLE;}
+#define WR_IDLE4  {WR_IDLE2; WR_IDLE2;}
+#define RD_IDLE2  {RD_IDLE; RD_IDLE;}
+#define RD_IDLE4  {RD_IDLE2; RD_IDLE2;}
+
+#if defined(__MK20DX128__) || defined(___MK20DX256__) // Teensy3.0 || 3.2 96MHz
+#define WRITE_DELAY { WR_ACTIVE2; }
+#define READ_DELAY  { RD_ACTIVE4; RD_ACTIVE; }
+#elif defined(__MK64FX512__) || defined(TARGET_M4) // Teensy3.5 120MHz thanks to PeteJohno
+#define WRITE_DELAY { WR_ACTIVE4; }
+#define READ_DELAY  { RD_ACTIVE8; }
+#elif defined(__MK66FX1M0__) || defined(TARGET_M4) // Teensy3.6 180MHz untested.   delays can possibly be reduced.
+#define WRITE_DELAY { WR_ACTIVE8; }
+#define READ_DELAY  { RD_ACTIVE8; RD_ACTIVE8; }
+#elif defined(TARGET_M7) // Nucleo-F767 216MHz untested.   delays can possibly be reduced.
+#define WRITE_DELAY { WR_ACTIVE8; WR_ACTIVE2; }
+#define IDLE_DELAY  { WR_IDLE2;WR_IDLE; }
+#define READ_DELAY  { RD_ACTIVE16; RD_ACTIVE16; RD_ACTIVE4; }
+#define READ_IDLE   { RD_IDLE2;RD_IDLE; }
+#else
+//#error unspecified delays
+//#define WRITE_DELAY { WR_ACTIVE2; }
+//#define READ_DELAY  { RD_ACTIVE4; RD_ACTIVE; }
+#define WRITE_DELAY 
+#define READ_DELAY  
+#endif
+
+#if !defined(IDLE_DELAY)
+#define IDLE_DELAY WR_IDLE
+#endif
+#if !defined(READ_IDLE)
+#define READ_IDLE RD_IDLE
+#endif
+
+// General macros.   IOCLR registers are 1 cycle when optimised.
+#define WR_STROBE { WR_ACTIVE; WR_IDLE; }         //PWLW=TWRL=50ns
+#define RD_STROBE RD_IDLE, RD_ACTIVE, RD_ACTIVE, RD_ACTIVE   //PWLR=TRDL=150ns
+#define write8(d) { write_8(d); WRITE_DELAY; WR_STROBE; IDLE_DELAY; } // STROBEs are defined later
+#define write16(x)    { uint8_t h = (x)>>8, l = x; write8(h); write8(l); }
+#define READ_8(dst) { RD_STROBE; READ_DELAY; dst = read_8(); READ_IDLE; } // read 250ns after RD_ACTIVE goes low
+#define READ_16(dst) { uint8_t hi; READ_8(hi); READ_8(dst); dst |= (hi << 8); }
+
+#define CTL_INIT()   { RD_OUTPUT; WR_OUTPUT; CD_OUTPUT; CS_OUTPUT; RESET_OUTPUT; }
+#define WriteCmd(x)  { CD_COMMAND; write16(x); CD_DATA; }
+#define WriteData(x) { write16(x); }
+
+#endif   //!USE_SERIAL
+#endif   //MCUFRIEND_KEIL_H_
+