Testanto funções Display

Dependencies:   mbed

Committer:
henriquer
Date:
Tue Apr 27 21:18:52 2021 +0000
Revision:
4:2d8f54d22dbd
Parent:
1:a5ccd53612ea
Escrevendo um sinal analogico ( Seno e Cosseno) no display TFT

Who changed what in which revision?

UserRevisionLine numberNew contents of line
silviosz 1:a5ccd53612ea 1 #ifndef PIN_SHIELD_8_H_
silviosz 1:a5ccd53612ea 2 #define PIN_SHIELD_8_H_
silviosz 1:a5ccd53612ea 3
silviosz 1:a5ccd53612ea 4 // just provide macros for the 8-bit data bus
silviosz 1:a5ccd53612ea 5 // i.e. write_8(), read_8(), setWriteDir(), setReadDir()
silviosz 1:a5ccd53612ea 6
silviosz 1:a5ccd53612ea 7
silviosz 1:a5ccd53612ea 8 #define LPC810 810
silviosz 1:a5ccd53612ea 9 #define LPC812 812
silviosz 1:a5ccd53612ea 10 #define LPC1343 1343
silviosz 1:a5ccd53612ea 11 #define LPC1768 1768
silviosz 1:a5ccd53612ea 12 #define LPC2103 2103
silviosz 1:a5ccd53612ea 13 #define LPC2148 2148
silviosz 1:a5ccd53612ea 14
silviosz 1:a5ccd53612ea 15 #define ISTARGET_NUCLEO64 (0 \
silviosz 1:a5ccd53612ea 16 || defined(TARGET_NUCLEO_F072RB) \
silviosz 1:a5ccd53612ea 17 || defined(TARGET_NUCLEO_F103RB) \
silviosz 1:a5ccd53612ea 18 || defined(TARGET_NUCLEO_F401RE) \
silviosz 1:a5ccd53612ea 19 || defined(TARGET_NUCLEO_F411RE) \
silviosz 1:a5ccd53612ea 20 || defined(TARGET_NUCLEO_F446RE) \
silviosz 1:a5ccd53612ea 21 || defined(TARGET_NUCLEO_L152RE) \
silviosz 1:a5ccd53612ea 22 || defined(TARGET_NUCLEO_L433RC_P) \
silviosz 1:a5ccd53612ea 23 || defined(TARGET_NUCLEO_L476RG) \
silviosz 1:a5ccd53612ea 24 )
silviosz 1:a5ccd53612ea 25
silviosz 1:a5ccd53612ea 26 #define ISTARGET_NUCLEO144 (0 \
silviosz 1:a5ccd53612ea 27 || defined(TARGET_NUCLEO_F767ZI) \
silviosz 1:a5ccd53612ea 28 )
silviosz 1:a5ccd53612ea 29
silviosz 1:a5ccd53612ea 30 //#warning Using pin_SHIELD_8.h
silviosz 1:a5ccd53612ea 31
silviosz 1:a5ccd53612ea 32 #if 0
silviosz 1:a5ccd53612ea 33
silviosz 1:a5ccd53612ea 34 #elif defined(MY_BLUEPILL) // Uno Shield on BLUEPILL_ADAPTER
silviosz 1:a5ccd53612ea 35 #warning Uno Shield on MY_BLUEPILL_ADAPTER
silviosz 1:a5ccd53612ea 36
silviosz 1:a5ccd53612ea 37 // configure macros for the data pins
silviosz 1:a5ccd53612ea 38 #define AMASK 0x060F
silviosz 1:a5ccd53612ea 39 #define BMASK 0x00C0
silviosz 1:a5ccd53612ea 40 #define write_8(d) { GPIOA->BSRR = AMASK << 16; GPIOB->BSRR = BMASK << 16; \
silviosz 1:a5ccd53612ea 41 GPIOA->BSRR = (((d) & 3) << 9) | (((d) & 0xF0) >> 4); \
silviosz 1:a5ccd53612ea 42 GPIOB->BSRR = (((d) & 0x0C) << 4); \
silviosz 1:a5ccd53612ea 43 }
silviosz 1:a5ccd53612ea 44 #define read_8() (((GPIOA->IDR & (3<<9)) >> 9) | ((GPIOA->IDR & (0x0F)) << 4) | ((GPIOB->IDR & (3<<6)) >> 4))
silviosz 1:a5ccd53612ea 45
silviosz 1:a5ccd53612ea 46 #define GROUP_MODE(port, reg, mask, val) {port->reg = (port->reg & ~(mask)) | ((mask)&(val)); }
silviosz 1:a5ccd53612ea 47 #define GP_OUT(port, reg, mask) GROUP_MODE(port, reg, mask, 0x33333333)
silviosz 1:a5ccd53612ea 48 #define GP_INP(port, reg, mask) GROUP_MODE(port, reg, mask, 0x44444444)
silviosz 1:a5ccd53612ea 49 // PA10,PA9 PA3-PA0 PB7,PB6
silviosz 1:a5ccd53612ea 50 #define setWriteDir() {GP_OUT(GPIOA, CRH, 0xFF0); GP_OUT(GPIOA, CRL, 0xFFFF); GP_OUT(GPIOB, CRL, 0xFF000000); }
silviosz 1:a5ccd53612ea 51 #define setReadDir() {GP_INP(GPIOA, CRH, 0xFF0); GP_INP(GPIOA, CRL, 0xFFFF); GP_INP(GPIOB, CRL, 0xFF000000); }
silviosz 1:a5ccd53612ea 52
silviosz 1:a5ccd53612ea 53 #elif defined(BLUEPILL) // Uno Shield on BLUEPILL_ADAPTER
silviosz 1:a5ccd53612ea 54 #warning Uno Shield on BLUEPILL_ADAPTER
silviosz 1:a5ccd53612ea 55
silviosz 1:a5ccd53612ea 56 // configure macros for the data pins
silviosz 1:a5ccd53612ea 57 #define write_8(d) { GPIOA->BSRR = 0x00FF << 16; GPIOA->BSRR = (d) & 0xFF; }
silviosz 1:a5ccd53612ea 58 #define read_8() (GPIOA->IDR & 0xFF)
silviosz 1:a5ccd53612ea 59
silviosz 1:a5ccd53612ea 60 #define GROUP_MODE(port, reg, mask, val) {port->reg = (port->reg & ~(mask)) | ((mask)&(val)); }
silviosz 1:a5ccd53612ea 61 #define GP_OUT(port, reg, mask) GROUP_MODE(port, reg, mask, 0x33333333)
silviosz 1:a5ccd53612ea 62 #define GP_INP(port, reg, mask) GROUP_MODE(port, reg, mask, 0x44444444)
silviosz 1:a5ccd53612ea 63 // PA7 ..PA0
silviosz 1:a5ccd53612ea 64 #define setWriteDir() {GP_OUT(GPIOA, CRL, 0xFFFFFFFF); }
silviosz 1:a5ccd53612ea 65 #define setReadDir() {GP_INP(GPIOA, CRL, 0xFFFFFFFF); }
silviosz 1:a5ccd53612ea 66
silviosz 1:a5ccd53612ea 67 #elif defined(ITEADMAPLE) // Uno Shield on MAPLE_REV3 board
silviosz 1:a5ccd53612ea 68 #warning Uno Shield on MAPLE_REV3 board
silviosz 1:a5ccd53612ea 69
silviosz 1:a5ccd53612ea 70 #define REGS(x) x
silviosz 1:a5ccd53612ea 71 #define GROUP_MODE(port, reg, mask, val) {port->REGS(reg) = (port->REGS(reg) & ~(mask)) | ((mask)&(val)); }
silviosz 1:a5ccd53612ea 72 #define GP_OUT(port, reg, mask) GROUP_MODE(port, reg, mask, 0x33333333)
silviosz 1:a5ccd53612ea 73 #define GP_INP(port, reg, mask) GROUP_MODE(port, reg, mask, 0x44444444)
silviosz 1:a5ccd53612ea 74
silviosz 1:a5ccd53612ea 75 // configure macros for the data pins
silviosz 1:a5ccd53612ea 76 #define write_8(d) { \
silviosz 1:a5ccd53612ea 77 GPIOA->REGS(BSRR) = 0x0703 << 16; \
silviosz 1:a5ccd53612ea 78 GPIOB->REGS(BSRR) = 0x00E0 << 16; \
silviosz 1:a5ccd53612ea 79 GPIOA->REGS(BSRR) = ( ((d) & (1<<0)) << 10) \
silviosz 1:a5ccd53612ea 80 | (((d) & (1<<2)) >> 2) \
silviosz 1:a5ccd53612ea 81 | (((d) & (1<<3)) >> 2) \
silviosz 1:a5ccd53612ea 82 | (((d) & (1<<6)) << 2) \
silviosz 1:a5ccd53612ea 83 | (((d) & (1<<7)) << 2); \
silviosz 1:a5ccd53612ea 84 GPIOB->REGS(BSRR) = ( ((d) & (1<<1)) << 6) \
silviosz 1:a5ccd53612ea 85 | (((d) & (1<<4)) << 1) \
silviosz 1:a5ccd53612ea 86 | (((d) & (1<<5)) << 1); \
silviosz 1:a5ccd53612ea 87 }
silviosz 1:a5ccd53612ea 88
silviosz 1:a5ccd53612ea 89 #define read_8() ( ( ( (GPIOA->REGS(IDR) & (1<<10)) >> 10) \
silviosz 1:a5ccd53612ea 90 | ((GPIOB->REGS(IDR) & (1<<7)) >> 6) \
silviosz 1:a5ccd53612ea 91 | ((GPIOA->REGS(IDR) & (1<<0)) << 2) \
silviosz 1:a5ccd53612ea 92 | ((GPIOA->REGS(IDR) & (1<<1)) << 2) \
silviosz 1:a5ccd53612ea 93 | ((GPIOB->REGS(IDR) & (1<<5)) >> 1) \
silviosz 1:a5ccd53612ea 94 | ((GPIOB->REGS(IDR) & (1<<6)) >> 1) \
silviosz 1:a5ccd53612ea 95 | ((GPIOA->REGS(IDR) & (1<<8)) >> 2) \
silviosz 1:a5ccd53612ea 96 | ((GPIOA->REGS(IDR) & (1<<9)) >> 2)))
silviosz 1:a5ccd53612ea 97
silviosz 1:a5ccd53612ea 98 // PA10,PA9,PA8 PA1,PA0 PB7,PB6,PB5
silviosz 1:a5ccd53612ea 99 #define setWriteDir() {GP_OUT(GPIOA, CRH, 0xFFF); GP_OUT(GPIOA, CRL, 0xFF); GP_OUT(GPIOB, CRL, 0xFFF00000); }
silviosz 1:a5ccd53612ea 100 #define setReadDir() {GP_INP(GPIOA, CRH, 0xFFF); GP_INP(GPIOA, CRL, 0xFF); GP_INP(GPIOB, CRL, 0xFFF00000); }
silviosz 1:a5ccd53612ea 101
silviosz 1:a5ccd53612ea 102 #elif defined(NUCLEO144) || ISTARGET_NUCLEO144
silviosz 1:a5ccd53612ea 103 #if __MBED__
silviosz 1:a5ccd53612ea 104 #warning MBED knows everything
silviosz 1:a5ccd53612ea 105 #elif defined(STM32F767xx)
silviosz 1:a5ccd53612ea 106 #include <STM32F7XX.h>
silviosz 1:a5ccd53612ea 107 #endif
silviosz 1:a5ccd53612ea 108
silviosz 1:a5ccd53612ea 109 #define REGS(x) x
silviosz 1:a5ccd53612ea 110 // configure macros for the data pins
silviosz 1:a5ccd53612ea 111 #define DMASK ((1<<15)) //#1
silviosz 1:a5ccd53612ea 112 #define EMASK ((1<<13)|(1<<11)|(1<<9)) //#3, #5, #6
silviosz 1:a5ccd53612ea 113 #define FMASK ((1<<12)|(1<<15)|(1<<14)|(1<<13)) //#0, #2, #4, #7
silviosz 1:a5ccd53612ea 114
silviosz 1:a5ccd53612ea 115 #define write_8(d) { \
silviosz 1:a5ccd53612ea 116 GPIOD->REGS(BSRR) = DMASK << 16; \
silviosz 1:a5ccd53612ea 117 GPIOE->REGS(BSRR) = EMASK << 16; \
silviosz 1:a5ccd53612ea 118 GPIOF->REGS(BSRR) = FMASK << 16; \
silviosz 1:a5ccd53612ea 119 GPIOD->REGS(BSRR) = ( ((d) & (1<<1)) << 14); \
silviosz 1:a5ccd53612ea 120 GPIOE->REGS(BSRR) = ( ((d) & (1<<3)) << 10) \
silviosz 1:a5ccd53612ea 121 | (((d) & (1<<5)) << 6) \
silviosz 1:a5ccd53612ea 122 | (((d) & (1<<6)) << 3); \
silviosz 1:a5ccd53612ea 123 GPIOF->REGS(BSRR) = ( ((d) & (1<<0)) << 12) \
silviosz 1:a5ccd53612ea 124 | (((d) & (1<<2)) << 13) \
silviosz 1:a5ccd53612ea 125 | (((d) & (1<<4)) << 10) \
silviosz 1:a5ccd53612ea 126 | (((d) & (1<<7)) << 6); \
silviosz 1:a5ccd53612ea 127 }
silviosz 1:a5ccd53612ea 128
silviosz 1:a5ccd53612ea 129 #define read_8() ( ( ( (GPIOF->REGS(IDR) & (1<<12)) >> 12) \
silviosz 1:a5ccd53612ea 130 | ((GPIOD->REGS(IDR) & (1<<15)) >> 14) \
silviosz 1:a5ccd53612ea 131 | ((GPIOF->REGS(IDR) & (1<<15)) >> 13) \
silviosz 1:a5ccd53612ea 132 | ((GPIOE->REGS(IDR) & (1<<13)) >> 10) \
silviosz 1:a5ccd53612ea 133 | ((GPIOF->REGS(IDR) & (1<<14)) >> 10) \
silviosz 1:a5ccd53612ea 134 | ((GPIOE->REGS(IDR) & (1<<11)) >> 6) \
silviosz 1:a5ccd53612ea 135 | ((GPIOE->REGS(IDR) & (1<<9)) >> 3) \
silviosz 1:a5ccd53612ea 136 | ((GPIOF->REGS(IDR) & (1<<13)) >> 6)))
silviosz 1:a5ccd53612ea 137
silviosz 1:a5ccd53612ea 138
silviosz 1:a5ccd53612ea 139 // PD15 PE13,PE11,PE9 PF15,PF14,PF13,PF12
silviosz 1:a5ccd53612ea 140 #define setWriteDir() { setReadDir(); \
silviosz 1:a5ccd53612ea 141 GPIOD->MODER |= 0x40000000; GPIOE->MODER |= 0x04440000; GPIOF->MODER |= 0x55000000; }
silviosz 1:a5ccd53612ea 142 #define setReadDir() { GPIOD->MODER &= ~0xC0000000; GPIOE->MODER &= ~0x0CCC0000; GPIOF->MODER &= ~0xFF000000; }
silviosz 1:a5ccd53612ea 143
silviosz 1:a5ccd53612ea 144
silviosz 1:a5ccd53612ea 145 #elif defined(NUCLEO) || ISTARGET_NUCLEO64
silviosz 1:a5ccd53612ea 146 #if __MBED__
silviosz 1:a5ccd53612ea 147 #warning MBED knows everything
silviosz 1:a5ccd53612ea 148 #elif defined(STM32F072xB)
silviosz 1:a5ccd53612ea 149 #include <STM32F0XX.h>
silviosz 1:a5ccd53612ea 150 #elif defined(STM32F103xB)
silviosz 1:a5ccd53612ea 151 #if defined(__CC_ARM)
silviosz 1:a5ccd53612ea 152 #include <STM32F10X.h>
silviosz 1:a5ccd53612ea 153 #else
silviosz 1:a5ccd53612ea 154 #include <STM32F1XX.h>
silviosz 1:a5ccd53612ea 155 #endif
silviosz 1:a5ccd53612ea 156 #elif defined(STM32L476xx) || defined(STM32L433xx)
silviosz 1:a5ccd53612ea 157 #include <STM32L4XX.h>
silviosz 1:a5ccd53612ea 158 #elif defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx)
silviosz 1:a5ccd53612ea 159 #include <STM32F4XX.h>
silviosz 1:a5ccd53612ea 160 #endif
silviosz 1:a5ccd53612ea 161 // configure macros for the data pins. -00=10.06, -O1=7.85, -O1t=7.21, -O2=7.87, -O3=7.45, -O3t=7.03
silviosz 1:a5ccd53612ea 162 #define write_8(d) { \
silviosz 1:a5ccd53612ea 163 GPIOA->BSRR = 0x0700 << 16; \
silviosz 1:a5ccd53612ea 164 GPIOB->BSRR = 0x0438 << 16; \
silviosz 1:a5ccd53612ea 165 GPIOC->BSRR = 0x0080 << 16; \
silviosz 1:a5ccd53612ea 166 GPIOA->BSRR = (((d) & (1<<0)) << 9) \
silviosz 1:a5ccd53612ea 167 | (((d) & (1<<2)) << 8) \
silviosz 1:a5ccd53612ea 168 | (((d) & (1<<7)) << 1); \
silviosz 1:a5ccd53612ea 169 GPIOB->BSRR = (((d) & (1<<3)) << 0) \
silviosz 1:a5ccd53612ea 170 | (((d) & (1<<4)) << 1) \
silviosz 1:a5ccd53612ea 171 | (((d) & (1<<5)) >> 1) \
silviosz 1:a5ccd53612ea 172 | (((d) & (1<<6)) << 4); \
silviosz 1:a5ccd53612ea 173 GPIOC->BSRR = (((d) & (1<<1)) << 6); \
silviosz 1:a5ccd53612ea 174 }
silviosz 1:a5ccd53612ea 175 #define read_8() ( (((GPIOA->IDR & (1<<9)) >> 9) \
silviosz 1:a5ccd53612ea 176 | ((GPIOC->IDR & (1<<7)) >> 6) \
silviosz 1:a5ccd53612ea 177 | ((GPIOA->IDR & (1<<10)) >> 8) \
silviosz 1:a5ccd53612ea 178 | ((GPIOB->IDR & (1<<3)) >> 0) \
silviosz 1:a5ccd53612ea 179 | ((GPIOB->IDR & (1<<5)) >> 1) \
silviosz 1:a5ccd53612ea 180 | ((GPIOB->IDR & (1<<4)) << 1) \
silviosz 1:a5ccd53612ea 181 | ((GPIOB->IDR & (1<<10)) >> 4) \
silviosz 1:a5ccd53612ea 182 | ((GPIOA->IDR & (1<<8)) >> 1)))
silviosz 1:a5ccd53612ea 183 // be wise to clear both MODER bits properly.
silviosz 1:a5ccd53612ea 184 #if defined(STM32F103xB)
silviosz 1:a5ccd53612ea 185 #define GROUP_MODE(port, reg, mask, val) {port->reg = (port->reg & ~(mask)) | ((mask)&(val)); }
silviosz 1:a5ccd53612ea 186 #define GP_OUT(port, reg, mask) GROUP_MODE(port, reg, mask, 0x33333333)
silviosz 1:a5ccd53612ea 187 #define GP_INP(port, reg, mask) GROUP_MODE(port, reg, mask, 0x44444444)
silviosz 1:a5ccd53612ea 188 // PA10,PA9,PA8 PB10 PB5,PB4,PB3 PC7
silviosz 1:a5ccd53612ea 189 #define setWriteDir() {GP_OUT(GPIOA, CRH, 0xFFF); GP_OUT(GPIOB, CRH, 0xF00); GP_OUT(GPIOB, CRL, 0xFFF000); GP_OUT(GPIOC, CRL, 0xF0000000); }
silviosz 1:a5ccd53612ea 190 #define setReadDir() {GP_INP(GPIOA, CRH, 0xFFF); GP_INP(GPIOB, CRH, 0xF00); GP_INP(GPIOB, CRL, 0xFFF000); GP_INP(GPIOC, CRL, 0xF0000000); }
silviosz 1:a5ccd53612ea 191 #else
silviosz 1:a5ccd53612ea 192 #define setWriteDir() { setReadDir(); \
silviosz 1:a5ccd53612ea 193 GPIOA->MODER |= 0x150000; GPIOB->MODER |= 0x100540; GPIOC->MODER |= 0x4000; }
silviosz 1:a5ccd53612ea 194 #define setReadDir() { GPIOA->MODER &= ~0x3F0000; GPIOB->MODER &= ~0x300FC0; GPIOC->MODER &= ~0xC000; }
silviosz 1:a5ccd53612ea 195 #endif
silviosz 1:a5ccd53612ea 196
silviosz 1:a5ccd53612ea 197
silviosz 1:a5ccd53612ea 198 #elif __TARGET_PROCESSOR == LPC1768
silviosz 1:a5ccd53612ea 199 #include <LPC17xx.h>
silviosz 1:a5ccd53612ea 200 // configure macros for the data pins
silviosz 1:a5ccd53612ea 201 #define write_8(d) { \
silviosz 1:a5ccd53612ea 202 LPC_GPIO0->FIOPIN = (LPC_GPIO0->FIOPIN & ~0x01878003) \
silviosz 1:a5ccd53612ea 203 | (((d) & (1<<0)) << 1) \
silviosz 1:a5ccd53612ea 204 | (((d) & (1<<1)) >> 1) \
silviosz 1:a5ccd53612ea 205 | (((d) & (1<<2)) << 22) \
silviosz 1:a5ccd53612ea 206 | (((d) & (1<<3)) << 20) \
silviosz 1:a5ccd53612ea 207 | (((d) & (1<<4)) << 12) \
silviosz 1:a5ccd53612ea 208 | (((d) & (1<<5)) << 10) \
silviosz 1:a5ccd53612ea 209 | (((d) & (1<<6)) << 11) \
silviosz 1:a5ccd53612ea 210 | (((d) & (1<<7)) << 11); \
silviosz 1:a5ccd53612ea 211 }
silviosz 1:a5ccd53612ea 212 #define read_8() ( (((LPC_GPIO0->FIOPIN & (1<<1)) >> 1) \
silviosz 1:a5ccd53612ea 213 | ((LPC_GPIO0->FIOPIN & (1<<0)) << 1) \
silviosz 1:a5ccd53612ea 214 | ((LPC_GPIO0->FIOPIN & (1<<24)) >> 22) \
silviosz 1:a5ccd53612ea 215 | ((LPC_GPIO0->FIOPIN & (1<<23)) >> 20) \
silviosz 1:a5ccd53612ea 216 | ((LPC_GPIO0->FIOPIN & (1<<16)) >> 12) \
silviosz 1:a5ccd53612ea 217 | ((LPC_GPIO0->FIOPIN & (1<<15)) >> 10) \
silviosz 1:a5ccd53612ea 218 | ((LPC_GPIO0->FIOPIN & (1<<17)) >> 11) \
silviosz 1:a5ccd53612ea 219 | ((LPC_GPIO0->FIOPIN & (1<<18)) >> 11)))
silviosz 1:a5ccd53612ea 220 #define setWriteDir() {LPC_GPIO0->FIODIR |= 0x01878003; }
silviosz 1:a5ccd53612ea 221 #define setReadDir() {LPC_GPIO0->FIODIR &= ~0x01878003; }
silviosz 1:a5ccd53612ea 222
silviosz 1:a5ccd53612ea 223
silviosz 1:a5ccd53612ea 224 #elif defined(MKL25Z4) || defined(TARGET_KL25Z)
silviosz 1:a5ccd53612ea 225 #include <MKL25Z4.h>
silviosz 1:a5ccd53612ea 226 // configure macros for the data pins
silviosz 1:a5ccd53612ea 227 #if 1
silviosz 1:a5ccd53612ea 228 #define AMASK ((1<<13)|(1<<12)|(1<<5)|(1<<4))
silviosz 1:a5ccd53612ea 229 #define CMASK ((1<<9)|(1<<8))
silviosz 1:a5ccd53612ea 230 #define DMASK ((1<<5)|(1<<4))
silviosz 1:a5ccd53612ea 231 #define write_8(d) { \
silviosz 1:a5ccd53612ea 232 PTA->PCOR = AMASK; PTC->PCOR = CMASK; PTD->PCOR = DMASK; \
silviosz 1:a5ccd53612ea 233 PTA->PSOR = (((d) & (1<<0)) << 13) \
silviosz 1:a5ccd53612ea 234 | (((d) & (1<<3)) << 9) \
silviosz 1:a5ccd53612ea 235 | (((d) & (1<<4)) >> 0) \
silviosz 1:a5ccd53612ea 236 | (((d) & (1<<5)) >> 0); \
silviosz 1:a5ccd53612ea 237 PTC->PSOR = (((d) & (1<<6)) << 2) \
silviosz 1:a5ccd53612ea 238 | (((d) & (1<<7)) << 2); \
silviosz 1:a5ccd53612ea 239 PTD->PSOR = (((d) & (1<<1)) << 4) \
silviosz 1:a5ccd53612ea 240 | (((d) & (1<<2)) << 2); \
silviosz 1:a5ccd53612ea 241 }
silviosz 1:a5ccd53612ea 242 #define read_8() ( (((PTA->PDIR & (1<<13)) >> 13) \
silviosz 1:a5ccd53612ea 243 | ((PTA->PDIR & (1<<12)) >> 9) \
silviosz 1:a5ccd53612ea 244 | ((PTA->PDIR & (3<<4)) >> 0) \
silviosz 1:a5ccd53612ea 245 | ((PTC->PDIR & (3<<8)) >> 2) \
silviosz 1:a5ccd53612ea 246 | ((PTD->PDIR & (1<<4)) >> 2) \
silviosz 1:a5ccd53612ea 247 | ((PTD->PDIR & (1<<5)) >> 4)))
silviosz 1:a5ccd53612ea 248 #define setWriteDir() {PTA->PDDR |= AMASK;PTC->PDDR |= CMASK;PTD->PDDR |= DMASK; }
silviosz 1:a5ccd53612ea 249 #define setReadDir() {PTA->PDDR &= ~AMASK;PTC->PDDR &= ~CMASK;PTD->PDDR &= ~DMASK; }
silviosz 1:a5ccd53612ea 250 #else
silviosz 1:a5ccd53612ea 251 #define write_8(d) { \
silviosz 1:a5ccd53612ea 252 PTA->PDOR = (PTA->PDOR & ~0x3030) \
silviosz 1:a5ccd53612ea 253 | (((d) & (1<<0)) << 13) \
silviosz 1:a5ccd53612ea 254 | (((d) & (1<<3)) << 9) \
silviosz 1:a5ccd53612ea 255 | (((d) & (3<<4)) << 0); \
silviosz 1:a5ccd53612ea 256 PTC->PDOR = (PTC->PDOR & ~0x0300) \
silviosz 1:a5ccd53612ea 257 | (((d) & (3<<6)) << 2); \
silviosz 1:a5ccd53612ea 258 PTD->PDOR = (PTD->PDOR & ~0x0030) \
silviosz 1:a5ccd53612ea 259 | (((d) & (1<<1)) << 4) \
silviosz 1:a5ccd53612ea 260 | (((d) & (1<<2)) << 2); \
silviosz 1:a5ccd53612ea 261 }
silviosz 1:a5ccd53612ea 262 #define read_8() ( (((PTA->PDIR & (1<<13)) >> 13) \
silviosz 1:a5ccd53612ea 263 | ((PTA->PDIR & (1<<12)) >> 9) \
silviosz 1:a5ccd53612ea 264 | ((PTA->PDIR & (3<<4)) >> 0) \
silviosz 1:a5ccd53612ea 265 | ((PTC->PDIR & (3<<8)) >> 2) \
silviosz 1:a5ccd53612ea 266 | ((PTD->PDIR & (1<<4)) >> 2) \
silviosz 1:a5ccd53612ea 267 | ((PTD->PDIR & (1<<5)) >> 4)))
silviosz 1:a5ccd53612ea 268 #define setWriteDir() {PTA->PDDR |= 0x3030;PTC->PDDR |= 0x0300;PTD->PDDR |= 0x0030; }
silviosz 1:a5ccd53612ea 269 #define setReadDir() {PTA->PDDR &= ~0x3030;PTC->PDDR &= ~0x0300;PTD->PDDR &= ~0x0030; }
silviosz 1:a5ccd53612ea 270 #endif
silviosz 1:a5ccd53612ea 271
silviosz 1:a5ccd53612ea 272 #elif defined(MKL26Z4)
silviosz 1:a5ccd53612ea 273 #include <MKL26Z4.h>
silviosz 1:a5ccd53612ea 274 // configure macros for the data pins
silviosz 1:a5ccd53612ea 275 #define AMASK ((1<<13)|(1<<12)|(1<<5)|(1<<4))
silviosz 1:a5ccd53612ea 276 #define CMASK ((1<<9)|(1<<8))
silviosz 1:a5ccd53612ea 277 #define DMASK ((1<<3)|(1<<2)) //PTD5, PTD4 on KL25Z
silviosz 1:a5ccd53612ea 278 #define write_8(d) { \
silviosz 1:a5ccd53612ea 279 PTA->PCOR = AMASK; PTC->PCOR = CMASK; PTD->PCOR = DMASK; \
silviosz 1:a5ccd53612ea 280 PTA->PSOR = (((d) & (1<<0)) << 13) \
silviosz 1:a5ccd53612ea 281 | (((d) & (1<<3)) << 9) \
silviosz 1:a5ccd53612ea 282 | (((d) & (1<<4)) >> 0) \
silviosz 1:a5ccd53612ea 283 | (((d) & (1<<5)) >> 0); \
silviosz 1:a5ccd53612ea 284 PTC->PSOR = (((d) & (1<<6)) << 2) \
silviosz 1:a5ccd53612ea 285 | (((d) & (1<<7)) << 2); \
silviosz 1:a5ccd53612ea 286 PTD->PSOR = (((d) & (1<<1)) << 1) \
silviosz 1:a5ccd53612ea 287 | (((d) & (1<<2)) << 1); \
silviosz 1:a5ccd53612ea 288 }
silviosz 1:a5ccd53612ea 289 #define read_8() ( (((PTA->PDIR & (1<<13)) >> 13) \
silviosz 1:a5ccd53612ea 290 | ((PTA->PDIR & (1<<12)) >> 9) \
silviosz 1:a5ccd53612ea 291 | ((PTA->PDIR & (3<<4)) >> 0) \
silviosz 1:a5ccd53612ea 292 | ((PTC->PDIR & (3<<8)) >> 2) \
silviosz 1:a5ccd53612ea 293 | ((PTD->PDIR & (1<<3)) >> 1) \
silviosz 1:a5ccd53612ea 294 | ((PTD->PDIR & (1<<2)) >> 1)))
silviosz 1:a5ccd53612ea 295 #define setWriteDir() {PTA->PDDR |= AMASK;PTC->PDDR |= CMASK;PTD->PDDR |= DMASK; }
silviosz 1:a5ccd53612ea 296 #define setReadDir() {PTA->PDDR &= ~AMASK;PTC->PDDR &= ~CMASK;PTD->PDDR &= ~DMASK; }
silviosz 1:a5ccd53612ea 297
silviosz 1:a5ccd53612ea 298 #elif defined(MKL05Z4) || defined(TARGET_KL05Z)
silviosz 1:a5ccd53612ea 299 #include <MKL05Z4.h>
silviosz 1:a5ccd53612ea 300 // configure macros for the data pins
silviosz 1:a5ccd53612ea 301 #define write_8(d) { \
silviosz 1:a5ccd53612ea 302 PTA->PDOR = (PTA->PDOR & ~0x1C00) \
silviosz 1:a5ccd53612ea 303 | (((d) & (1<<2)) << 9) \
silviosz 1:a5ccd53612ea 304 | (((d) & (1<<4)) << 6) \
silviosz 1:a5ccd53612ea 305 | (((d) & (1<<5)) << 7); \
silviosz 1:a5ccd53612ea 306 PTB->PDOR = (PTB->PDOR & ~0x0CE0) \
silviosz 1:a5ccd53612ea 307 | (((d) & (3<<0)) << 10) \
silviosz 1:a5ccd53612ea 308 | (((d) & (1<<3)) << 2) \
silviosz 1:a5ccd53612ea 309 | (((d) & (3<<6)) << 0); \
silviosz 1:a5ccd53612ea 310 }
silviosz 1:a5ccd53612ea 311 #define read_8() ( (((PTA->PDIR & (1<<11)) >> 9) \
silviosz 1:a5ccd53612ea 312 | ((PTA->PDIR & (1<<10)) >> 6) \
silviosz 1:a5ccd53612ea 313 | ((PTA->PDIR & (1<<12)) >> 7) \
silviosz 1:a5ccd53612ea 314 | ((PTB->PDIR & (3<<10)) >> 10) \
silviosz 1:a5ccd53612ea 315 | ((PTB->PDIR & (1<<5)) >> 2) \
silviosz 1:a5ccd53612ea 316 | ((PTB->PDIR & (3<<6)) >> 0)))
silviosz 1:a5ccd53612ea 317 #define setWriteDir() { PTA->PDDR |= 0x1C00; PTB->PDDR |= 0x0CE0; }
silviosz 1:a5ccd53612ea 318 #define setReadDir() { PTA->PDDR &= ~0x1C00; PTB->PDDR &= ~0x0CE0; }
silviosz 1:a5ccd53612ea 319
silviosz 1:a5ccd53612ea 320
silviosz 1:a5ccd53612ea 321 #elif (defined(MK20D7) && defined(TEENSY)) || defined(TARGET_TEENSY3_1)
silviosz 1:a5ccd53612ea 322 #if __MBED__
silviosz 1:a5ccd53612ea 323 #warning MBED knows everything
silviosz 1:a5ccd53612ea 324 #else
silviosz 1:a5ccd53612ea 325 #include <MK20D5.h>
silviosz 1:a5ccd53612ea 326 #endif
silviosz 1:a5ccd53612ea 327 // configure macros for the data pins
silviosz 1:a5ccd53612ea 328 #define AMASK ((1<<12)|(1<<13))
silviosz 1:a5ccd53612ea 329 #define CMASK ((1<<3))
silviosz 1:a5ccd53612ea 330 #define DMASK ((1<<0)|(1<<2)|(1<<3)|(1<<4)|(1<<7))
silviosz 1:a5ccd53612ea 331
silviosz 1:a5ccd53612ea 332 #define write_8(d) { \
silviosz 1:a5ccd53612ea 333 PTA->PCOR = AMASK; PTC->PCOR = CMASK; PTD->PCOR = DMASK; \
silviosz 1:a5ccd53612ea 334 PTA->PSOR = (((d) & (1<<3)) << 9) \
silviosz 1:a5ccd53612ea 335 | (((d) & (1<<4)) << 9); \
silviosz 1:a5ccd53612ea 336 PTC->PSOR = (((d) & (1<<1)) << 2); \
silviosz 1:a5ccd53612ea 337 PTD->PSOR = (((d) & (1<<0)) << 3) \
silviosz 1:a5ccd53612ea 338 | (((d) & (1<<2)) >> 2) \
silviosz 1:a5ccd53612ea 339 | (((d) & (1<<5)) << 2) \
silviosz 1:a5ccd53612ea 340 | (((d) & (1<<6)) >> 2) \
silviosz 1:a5ccd53612ea 341 | (((d) & (1<<7)) >> 5); \
silviosz 1:a5ccd53612ea 342 }
silviosz 1:a5ccd53612ea 343 #define read_8() ( (((PTD->PDIR & (1<<3)) >> 3) \
silviosz 1:a5ccd53612ea 344 | ((PTC->PDIR & (1<<3)) >> 2) \
silviosz 1:a5ccd53612ea 345 | ((PTD->PDIR & (1<<0)) << 2) \
silviosz 1:a5ccd53612ea 346 | ((PTA->PDIR & (1<<12)) >> 9) \
silviosz 1:a5ccd53612ea 347 | ((PTA->PDIR & (1<<13)) >> 9) \
silviosz 1:a5ccd53612ea 348 | ((PTD->PDIR & (1<<7)) >> 2) \
silviosz 1:a5ccd53612ea 349 | ((PTD->PDIR & (1<<4)) << 2) \
silviosz 1:a5ccd53612ea 350 | ((PTD->PDIR & (1<<2)) << 5)))
silviosz 1:a5ccd53612ea 351 #define setWriteDir() {PTA->PDDR |= AMASK;PTC->PDDR |= CMASK;PTD->PDDR |= DMASK; }
silviosz 1:a5ccd53612ea 352 #define setReadDir() {PTA->PDDR &= ~AMASK;PTC->PDDR &= ~CMASK;PTD->PDDR &= ~DMASK; }
silviosz 1:a5ccd53612ea 353
silviosz 1:a5ccd53612ea 354 #elif defined(MK20D5) || defined(TARGET_K20D50M)
silviosz 1:a5ccd53612ea 355 #include <MK20D5.h>
silviosz 1:a5ccd53612ea 356 // configure macros for the data pins
silviosz 1:a5ccd53612ea 357 #define AMASK ((1<<12)|(1<<5)|(1<<2)|(1<<1))
silviosz 1:a5ccd53612ea 358 #define CMASK ((1<<8)|(1<<4)|(1<<3))
silviosz 1:a5ccd53612ea 359 #define DMASK ((1<<4))
silviosz 1:a5ccd53612ea 360 #define write_8(d) { \
silviosz 1:a5ccd53612ea 361 PTA->PCOR = AMASK; PTC->PCOR = CMASK; PTD->PCOR = DMASK; \
silviosz 1:a5ccd53612ea 362 PTA->PSOR = (((d) & (1<<0)) << 12) \
silviosz 1:a5ccd53612ea 363 | (((d) & (1<<1)) << 1) \
silviosz 1:a5ccd53612ea 364 | (((d) & (1<<2)) << 3) \
silviosz 1:a5ccd53612ea 365 | (((d) & (1<<5)) >> 4); \
silviosz 1:a5ccd53612ea 366 PTC->PSOR = (((d) & (1<<4)) << 4) \
silviosz 1:a5ccd53612ea 367 | (((d) & (3<<6)) >> 3); \
silviosz 1:a5ccd53612ea 368 PTD->PSOR = (((d) & (1<<3)) << 1); \
silviosz 1:a5ccd53612ea 369 }
silviosz 1:a5ccd53612ea 370 #define read_8() ( (((PTA->PDIR & (1<<5)) >> 3) \
silviosz 1:a5ccd53612ea 371 | ((PTA->PDIR & (1<<1)) << 4) \
silviosz 1:a5ccd53612ea 372 | ((PTA->PDIR & (1<<12)) >> 12) \
silviosz 1:a5ccd53612ea 373 | ((PTA->PDIR & (1<<2)) >> 1) \
silviosz 1:a5ccd53612ea 374 | ((PTC->PDIR & (1<<8)) >> 4) \
silviosz 1:a5ccd53612ea 375 | ((PTC->PDIR & (3<<3)) << 3) \
silviosz 1:a5ccd53612ea 376 | ((PTD->PDIR & (1<<4)) >> 1)))
silviosz 1:a5ccd53612ea 377 #define setWriteDir() {PTA->PDDR |= AMASK;PTC->PDDR |= CMASK;PTD->PDDR |= DMASK; }
silviosz 1:a5ccd53612ea 378 #define setReadDir() {PTA->PDDR &= ~AMASK;PTC->PDDR &= ~CMASK;PTD->PDDR &= ~DMASK; }
silviosz 1:a5ccd53612ea 379
silviosz 1:a5ccd53612ea 380 #elif defined(ZERO)
silviosz 1:a5ccd53612ea 381 #include <samd21.h>
silviosz 1:a5ccd53612ea 382
silviosz 1:a5ccd53612ea 383 #ifndef PORTA
silviosz 1:a5ccd53612ea 384 #define PORTA PORT->Group[0]
silviosz 1:a5ccd53612ea 385 #define PORTB PORT->Group[1]
silviosz 1:a5ccd53612ea 386 #endif
silviosz 1:a5ccd53612ea 387 // configure macros for the data pins
silviosz 1:a5ccd53612ea 388 #if defined(D21_XPRO)
silviosz 1:a5ccd53612ea 389 #define AMASK 0x00220000
silviosz 1:a5ccd53612ea 390 #define BMASK 0x0000C0E4
silviosz 1:a5ccd53612ea 391 #define write_8(d) { \
silviosz 1:a5ccd53612ea 392 PORTA.OUT.reg = (PORTA.OUT.reg & ~AMASK) \
silviosz 1:a5ccd53612ea 393 | (((d) & (1<<5)) << 16) \
silviosz 1:a5ccd53612ea 394 | (((d) & (1<<7)) << 10); \
silviosz 1:a5ccd53612ea 395 PORTB.OUT.reg = (PORTB.OUT.reg & ~BMASK) \
silviosz 1:a5ccd53612ea 396 | (((d) & (3<<0)) << 6) \
silviosz 1:a5ccd53612ea 397 | (((d) & (1<<2)) << 12) \
silviosz 1:a5ccd53612ea 398 | (((d) & (1<<3)) >> 1) \
silviosz 1:a5ccd53612ea 399 | (((d) & (1<<4)) << 1) \
silviosz 1:a5ccd53612ea 400 | (((d) & (1<<6)) << 9); \
silviosz 1:a5ccd53612ea 401 }
silviosz 1:a5ccd53612ea 402 #define read_8() ( (((PORTA.IN.reg & (1<<21)) >> 16) \
silviosz 1:a5ccd53612ea 403 | ((PORTA.IN.reg & (1<<17)) >> 10) \
silviosz 1:a5ccd53612ea 404 | ((PORTB.IN.reg & (3<<6)) >> 6) \
silviosz 1:a5ccd53612ea 405 | ((PORTB.IN.reg & (1<<14)) >> 12) \
silviosz 1:a5ccd53612ea 406 | ((PORTB.IN.reg & (1<<2)) << 1) \
silviosz 1:a5ccd53612ea 407 | ((PORTB.IN.reg & (1<<5)) >> 1) \
silviosz 1:a5ccd53612ea 408 | ((PORTB.IN.reg & (1<<15)) >> 9)))
silviosz 1:a5ccd53612ea 409 #define setWriteDir() { \
silviosz 1:a5ccd53612ea 410 PORTA.DIRSET.reg = AMASK; \
silviosz 1:a5ccd53612ea 411 PORTB.DIRSET.reg = BMASK; \
silviosz 1:a5ccd53612ea 412 PORTA.WRCONFIG.reg = (AMASK>>16) | (0<<22) | (0<<28) | (1<<30) | (1<<31); \
silviosz 1:a5ccd53612ea 413 PORTB.WRCONFIG.reg = (BMASK & 0xFFFF) | (0<<22) | (0<<28) | (1<<30); \
silviosz 1:a5ccd53612ea 414 }
silviosz 1:a5ccd53612ea 415 #define setReadDir() { \
silviosz 1:a5ccd53612ea 416 PORTA.DIRCLR.reg = AMASK; \
silviosz 1:a5ccd53612ea 417 PORTB.DIRCLR.reg = BMASK; \
silviosz 1:a5ccd53612ea 418 PORTA.WRCONFIG.reg = (AMASK>>16) | (1<<17) | (0<<28) | (1<<30) | (1<<31); \
silviosz 1:a5ccd53612ea 419 PORTB.WRCONFIG.reg = (BMASK & 0xFFFF) | (1<<17) | (0<<28) | (1<<30); \
silviosz 1:a5ccd53612ea 420 }
silviosz 1:a5ccd53612ea 421 #else
silviosz 1:a5ccd53612ea 422 #define DMASK 0x0030C3C0
silviosz 1:a5ccd53612ea 423 #define write_8(x) {PORTA.OUTCLR.reg = (DMASK); \
silviosz 1:a5ccd53612ea 424 PORTA.OUTSET.reg = (((x) & 0x0F) << 6) \
silviosz 1:a5ccd53612ea 425 | (((x) & 0x30) << 10) \
silviosz 1:a5ccd53612ea 426 | (((x) & 0xC0)<<14); }
silviosz 1:a5ccd53612ea 427 #define read_8() (((PORTA.IN.reg >> 6) & 0x0F) \
silviosz 1:a5ccd53612ea 428 | ((PORTA.IN.reg >> 10) & 0x30) \
silviosz 1:a5ccd53612ea 429 | ((PORTA.IN.reg >> 14) & 0xC0))
silviosz 1:a5ccd53612ea 430 #define setWriteDir() { PORTA.DIRSET.reg = DMASK; \
silviosz 1:a5ccd53612ea 431 PORTA.WRCONFIG.reg = (DMASK & 0xFFFF) | (0<<22) | (1<<28) | (1<<30); \
silviosz 1:a5ccd53612ea 432 PORTA.WRCONFIG.reg = (DMASK>>16) | (0<<22) | (1<<28) | (1<<30) | (1<<31); \
silviosz 1:a5ccd53612ea 433 }
silviosz 1:a5ccd53612ea 434 #define setReadDir() { PORTA.DIRCLR.reg = DMASK; \
silviosz 1:a5ccd53612ea 435 PORTA.WRCONFIG.reg = (DMASK & 0xFFFF) | (1<<17) | (1<<28) | (1<<30); \
silviosz 1:a5ccd53612ea 436 PORTA.WRCONFIG.reg = (DMASK>>16) | (1<<17) | (1<<28) | (1<<30) | (1<<31); \
silviosz 1:a5ccd53612ea 437 }
silviosz 1:a5ccd53612ea 438 #endif
silviosz 1:a5ccd53612ea 439 #else
silviosz 1:a5ccd53612ea 440 #error MCU unselected
silviosz 1:a5ccd53612ea 441 #endif // MCUs
silviosz 1:a5ccd53612ea 442
silviosz 1:a5ccd53612ea 443 #endif //PIN_SHIELD_8_H
silviosz 1:a5ccd53612ea 444