From 9d57cf9d4566192dda241aeedfaeee5e494afc4a Mon Sep 17 00:00:00 2001 From: prenticedavid Date: Fri, 8 Jun 2018 20:39:31 +0100 Subject: [PATCH 1/3] target specific OPENSMART defines --- utility/mcufriend_special.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/utility/mcufriend_special.h b/utility/mcufriend_special.h index ed7e3e3..ffa9aca 100644 --- a/utility/mcufriend_special.h +++ b/utility/mcufriend_special.h @@ -12,7 +12,9 @@ //#define USE_DUE_16BIT_SHIELD //RD on PA15 (D24) //#define USE_BOBCACHELOT_TEENSY //#define USE_FRDM_K20 -//#define USE_OPENSMART_SHIELD_PINOUT //thanks Michel53 +//#define USE_OPENSMART_SHIELD_PINOUT_UNO +//#define USE_OPENSMART_SHIELD_PINOUT_MEGA +//#define USE_OPENSMART_SHIELD_PINOUT_DUE //thanks Michel53 //#define USE_ELECHOUSE_DUE_16BIT_SHIELD //Untested yet //#define USE_MY_BLUEPILL @@ -809,7 +811,7 @@ static __attribute((always_inline)) void write_8(uint8_t val) #define PIN_HIGH(port, pin) (port)->PIO_SODR = (1<<(pin)) #define PIN_OUTPUT(port, pin) (port)->PIO_OER = (1<<(pin)) -#elif defined(__SAM3X8E__) && defined(USE_OPENSMART_SHIELD_PINOUT) //OPENSMART shield on DUE +#elif defined(__SAM3X8E__) && defined(USE_OPENSMART_SHIELD_PINOUT_DUE) //OPENSMART shield on DUE #warning USE_OPENSMART_SHIELD_PINOUT on DUE // configure macros for the control pins #define RD_PORT PIOA @@ -946,7 +948,7 @@ static __attribute((always_inline)) void write_8(uint8_t val) #define PIN_HIGH(port, pin) PASTE(port, _PSOR) = (1<<(pin)) #define PIN_OUTPUT(port, pin) PASTE(port, _PDDR) |= (1<<(pin)) -#elif defined(__AVR_ATmega328P__) && defined(USE_OPENSMART_SHIELD_PINOUT) +#elif defined(__AVR_ATmega328P__) && defined(USE_OPENSMART_SHIELD_PINOUT_UNO) #define RD_PORT PORTC #define RD_PIN 0 #define WR_PORT PORTC @@ -980,7 +982,7 @@ static __attribute((always_inline)) void write_8(uint8_t val) #define PIN_HIGH(p, b) (p) |= (1<<(b)) #define PIN_OUTPUT(p, b) *(&p-1) |= (1<<(b)) -#elif defined(__AVR_ATmega2560__) && defined(USE_OPENSMART_SHIELD_PINOUT) +#elif defined(__AVR_ATmega2560__) && defined(USE_OPENSMART_SHIELD_PINOUT_MEGA) #define RD_PORT PORTF #define RD_PIN 0 #define WR_PORT PORTF From 14ad900527a79087bf0a7f6c83033aaf0abf3993 Mon Sep 17 00:00:00 2001 From: prenticedavid Date: Fri, 8 Jun 2018 20:56:31 +0100 Subject: [PATCH 2/3] simplify XX_DELAY macros --- utility/mcufriend_shield.h | 39 ++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/utility/mcufriend_shield.h b/utility/mcufriend_shield.h index 5c5b616..cad09cf 100644 --- a/utility/mcufriend_shield.h +++ b/utility/mcufriend_shield.h @@ -7,6 +7,14 @@ #endif #if !defined(USE_SPECIAL) || defined (USE_SPECIAL_FAIL) +#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;} + #if 0 //################################### UNO ############################## #elif defined(__AVR_ATmega328P__) //regular UNO shield on UNO @@ -175,8 +183,7 @@ PMC->PMC_PCER0 = (1 << ID_PIOB)|(1 << ID_PIOC);\ PIOB->PIO_ODR = BMASK; PIOC->PIO_ODR = CMASK;\ } -#define write8(x) { write_8(x); WR_ACTIVE; WR_ACTIVE; WR_STROBE; } -//#define write8(x) { write_8(x); WR_ACTIVE; WR_STROBE; WR_IDLE; } +#define write8(x) { write_8(x); WR_ACTIVE2; WR_STROBE; } #define write16(x) { uint8_t h = (x)>>8, l = x; write8(h); write8(l); } #define READ_8(dst) { RD_STROBE; RD_ACTIVE; dst = read_8(); RD_IDLE; RD_IDLE; } #define READ_16(dst) { uint8_t hi; READ_8(hi); READ_8(dst); dst |= (hi << 8); } @@ -272,14 +279,14 @@ void write_8(uint8_t x) #warning regular UNO shield on a Teensy 3.x #if defined(__MK20DX128__) || defined(__MK20DX256__) // Teensy3.0 || 3.2 96MHz -#define WRITE_DELAY { WR_ACTIVE; WR_ACTIVE; } -#define READ_DELAY { RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; } +#define WRITE_DELAY { WR_ACTIVE2; } +#define READ_DELAY { RD_ACTIVE8; RD_ACTIVE; } #elif defined(__MK64FX512__) // Teensy3.5 120MHz thanks to PeteJohno -#define WRITE_DELAY { WR_ACTIVE; WR_ACTIVE; WR_ACTIVE; WR_ACTIVE; } -#define READ_DELAY { RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; } +#define WRITE_DELAY { WR_ACTIVE4; } +#define READ_DELAY { RD_ACTIVE8; } #elif defined(__MK66FX1M0__) // Teensy3.6 180MHz untested. delays can possibly be reduced. -#define WRITE_DELAY { WR_ACTIVE; WR_ACTIVE; WR_ACTIVE; WR_ACTIVE; WR_ACTIVE; WR_ACTIVE; WR_ACTIVE; WR_ACTIVE; } -#define READ_DELAY { RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; } +#define WRITE_DELAY { WR_ACTIVE8; } +#define READ_DELAY { RD_ACTIVE16; } #else #error unspecified delays #endif @@ -402,20 +409,20 @@ void write_8(uint8_t x) /* AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_1; */ } #elif defined(STM32F401xE) -#define WRITE_DELAY { WR_ACTIVE; WR_ACTIVE; } -#define READ_DELAY { RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; } +#define WRITE_DELAY { WR_ACTIVE2; } +#define READ_DELAY { RD_ACTIVE4; } #define GPIO_INIT() { RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN | RCC_AHB1ENR_GPIOBEN | RCC_AHB1ENR_GPIOCEN; } #define PIN_OUTPUT(port, pin) PIN_MODE2((port)->MODER, pin, 0x1) #elif defined(STM32F411xE) -#define WRITE_DELAY { WR_ACTIVE; WR_ACTIVE; WR_ACTIVE; } -#define READ_DELAY { RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; } +#define WRITE_DELAY { WR_ACTIVE2; WR_ACTIVE; } +#define READ_DELAY { RD_ACTIVE4; RD_ACTIVE2; } #define GPIO_INIT() { RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN | RCC_AHB1ENR_GPIOBEN | RCC_AHB1ENR_GPIOCEN; } #define PIN_OUTPUT(port, pin) PIN_MODE2((port)->MODER, pin, 0x1) #elif defined(STM32F446xx) -#define WRITE_DELAY { WR_ACTIVE; WR_ACTIVE; WR_ACTIVE; WR_ACTIVE; WR_ACTIVE; WR_ACTIVE; WR_ACTIVE; } -#define READ_DELAY { RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; } +#define WRITE_DELAY { WR_ACTIVE8; } +#define READ_DELAY { RD_ACTIVE16;} #define GPIO_INIT() { RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN | RCC_AHB1ENR_GPIOBEN | RCC_AHB1ENR_GPIOCEN; } #define PIN_OUTPUT(port, pin) PIN_MODE2((port)->MODER, pin, 0x1) @@ -432,8 +439,8 @@ void write_8(uint8_t x) #define PIN_OUTPUT(port, pin) PIN_MODE2((port)->MODER, pin, 0x1) #elif defined(STM32L476xx) -#define WRITE_DELAY { WR_ACTIVE; WR_ACTIVE; } -#define READ_DELAY { RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; RD_ACTIVE; } +#define WRITE_DELAY { WR_ACTIVE2; } +#define READ_DELAY { RD_ACTIVE4; RD_ACTIVE; } #define GPIO_INIT() { RCC->AHB2ENR |= RCC_AHB2ENR_GPIOAEN | RCC_AHB2ENR_GPIOBEN | RCC_AHB2ENR_GPIOCEN; } #define PIN_OUTPUT(port, pin) PIN_MODE2((port)->MODER, pin, 0x1) From c44bf49eb796be747d554f1b736a02942c5cbb97 Mon Sep 17 00:00:00 2001 From: prenticedavid Date: Sun, 10 Jun 2018 22:32:41 +0100 Subject: [PATCH 3/3] OPEN-SMART comments --- extras/mcufriend_how_to.txt | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/extras/mcufriend_how_to.txt b/extras/mcufriend_how_to.txt index af7f937..2b88273 100644 --- a/extras/mcufriend_how_to.txt +++ b/extras/mcufriend_how_to.txt @@ -118,8 +118,15 @@ It also runs on NUCLEO-F103 and TEENSY3.2 with Sparkfun Adapter 18. Please run LCD_ID_readreg.ino to verify your non-standard wiring. Paste the defines to a Forum message. 19. OPEN-SMART Shields have different wiring to regular Uno Shields: - Edit mcufriend_shield.h: #define USE_SPECIAL - Edit mcufriend_special.h: #define USE_OPENSMART_SHIELD_PINOUT - Edit MCUFRIEND_kbv.cpp: #define SUPPORT_8352B + Edit utility/mcufriend_shield.h: #define USE_SPECIAL + Edit utility/mcufriend_special.h: #define USE_OPENSMART_SHIELD_PINOUT + Edit MCUFRIEND_kbv.cpp: #define SUPPORT_8352B +20. OPEN-SMART Shields can not read LM75A on a Mega because there are no SDA/SCL pins next on AREF header. + Uno: LM75A on pcb works. Difficult to add external I2C devices when Shield is plugged in. + Uno: All use of SPI bus should use SPI.beginTransaction(), SPI.endTransaction() + Leo: I do not support USE_OPENSMART_SHIELD_PINOUT_LEO + Mega: Old boards do not have SDA/SCL on AREF header. Only external I2C devices on COMMS header + Due: MAX809 Reset chip interferes with 3.3V RST on SPI header. Manual reset for Upload / Run. + CHANGE HISTORY: is now in "mcufriend_history.txt"