ESP8266 ILI9341 display support code with printf sources, wire-frame viewer and custom fonts  1.0
ESP8266ILI9341DisplayProject
hal.h
Go to the documentation of this file.
1 
23 #ifndef _INCLUDE_HAL_H_
24 #define _INCLUDE_HAL_H_
25 
26 
27 // =============================================
29 #ifdef AVR
30 
31 #include "iom1284p.h"
32 
33 #define SCK GPIO_B7
34 #define MISO GPIO_B6
35 #define MOSI GPIO_B5
36 #define SS GPIO_B4
37 
38 #define MMC_CS GPIO_B3
39 
40 #define SCL GPIO_C0
41 #define SDA GPIO_C1
42 
43 #define RX0 GPIO_D0
44 #define TX0 GPIO_D1
45 
58 
59 #define GPIO_PORT2SFR(port,base) _SFR_IO8( (((port) * 3) + (base)) )
60 #define GPIO_PIN2SFR(pin,base) GPIO_PORT2SFR((pin>>3),(base) )
61 
63 #define GPIO_PIN_MODE(pin) gpio_pin_sfr_mode(pin) /* FIXME TODO */
64 
66 #define GPIO_PIN_DIR_IN(pin) BIT_CLR(GPIO_PIN2SFR(pin,DDR_BASE), ((pin) & 7))
67 #define GPIO_PIN_TST(pin) BIT_TST(GPIO_PIN2SFR(pin,PIN_BASE), ((pin) & 7))
68 #define GPIO_PIN_RD(pin) (GPIO_PIN_DIR_IN(pin), GPIO_PIN_TST(pin))
69 
71 #define GPIO_PIN_LATCH_LOW(pin) BIT_CLR(GPIO_PIN2SFR(pin,PORT_BASE), ((pin) & 7))
72 #define GPIO_PIN_LATCH_HI(pin) BIT_SET(GPIO_PIN2SFR(pin,PORT_BASE), ((pin) & 7))
73 #define GPIO_PIN_LATCH_RD(pin) BIT_TST(GPIO_PIN2SFR(pin,PORT_BASE), ((pin) & 7))
74 
76 #define GPIO_PIN_DIR_OUT(pin) BIT_SET(GPIO_PIN2SFR(pin,DDR_BASE), ((pin) & 7))
77 #define GPIO_PIN_LOW(pin) (GPIO_PIN_LATCH_LOW(pin), GPIO_PIN_DIR_OUT(pin))
78 #define GPIO_PIN_HI(pin) (GPIO_PIN_LATCH_HI(pin), GPIO_PIN_DIR_OUT(pin))
79 #define GPIO_PIN_WR(pin,level) ((level) ? GPIO_PIN_HI(pin) : GPIO_PIN_LOW(pin))
80 
81 //FIXME do pull up modes
82 #define GPIO_PIN_FLOAT(pin) GPIO_PIN_DIR_IN(pin)
83 
84 #define GPIO_PORT_DIR_OUT(port) (GPIO_PORT2SFR(port,DDR_BASE) = 0xff)
85 #define GPIO_PORT_DIR_IN(port) (GPIO_PORT2SFR(port,DDR_BASE) = 0x00)
86 
87 // GPIB
88 #define GPIO_PORT_PINS_RD(port) (GPIO_PORT2SFR(port,PIN_BASE) & 0xff)
89 #define GPIO_PORT_DDR_RD(port) (GPIO_PORT2SFR(port,DDR_BASE) & 0xff)
90 #define GPIO_PORT_LATCH_WR(port,val) (GPIO_PORT2SFR(port,PORT_BASE) = (val))
91 #define GPIO_PORT_LATCH_RD(port,val) GPIO_PORT2SFR(port,PORT_BASE)
92 
93 #define GPIO_PORT_RD(port) (GPIO_PORT_DIR_IN(port), GPIO_PORT_PINS_RD(port))
94 #define GPIO_PORT_WR(port,val) (GPIO_PORT_DIR_OUT(port), GPIO_PORT_LATCH_WR(port,val))
95 
96 
103 
104 
105 
106 /*
107  FIXME make sure these OLD AVR definitions are not being used
108  GPIO_PIN_DIR_IN(a)
109  GPIO_PIN_DIR_OUT(a)
110  GPIO_PIN_LATCH_LOW(a)
111  GPIO_PIN_LATCH_HI(a)
112  GPIO_PIN_LATCH_RD(a)
113  GPIO_PIN_RD(a)
114  GPIO_PIN_LATCH_HI(a)
115  GPIO_PIN_LATCH_LOW(a)
116  IO_HI(a)
117  IO_LOW(a)
118  IO_RD(a)
119  GPIO_PIN_FLOAT(a)
120  GPIO_PIN_LATCH_RD(a)
121  GPIO_PIN_TST(a)
122  GPIO_PIN_LATCH_LOW(a)
123  GPIO_PIN_LATCH_HI(a)
124 */
125 
126 #endif // AVR
127 // =============================================
128 
129 // =============================================
131 #ifdef ESP8266
132 
133 // not defined in eagle_soc.h
134 #define FUNC_GPIO6 3
135 #define FUNC_GPIO7 3
136 #define FUNC_GPIO8 3
137 #define FUNC_GPIO11 3
138 
140 #define GPIO_PIN_MODE(pin) gpio_pin_sfr_mode(pin);
141 
143 #define GPIO_PIN_DIR_IN(pin) GPIO_REG_WRITE(GPIO_ENABLE_W1TC_ADDRESS, 1<<(pin))
144 #define GPIO_PIN_TST(pin) BIT_TST(GPIO_REG_READ(GPIO_IN_ADDRESS),(pin))
145 #define GPIO_PIN_RD(pin) GPIO_PIN_DIR_IN(pin), GPIO_PIN_TST(pin)
147 
149 #define GPIO_PIN_LATCH_LOW(pin) GPIO_REG_WRITE(GPIO_OUT_W1TC_ADDRESS, 1<<(pin))
150 #define GPIO_PIN_LATCH_HI(pin) GPIO_REG_WRITE(GPIO_OUT_W1TS_ADDRESS, 1<<(pin))
151 #define GPIO_PIN_LATCH_RD(pin) BIT_TST(GPIO_REG_READ(GPIO_OUT_DATA),(pin))
153 
155 #define GPIO_PIN_DIR_OUT(pin) GPIO_REG_WRITE(GPIO_ENABLE_W1TS_ADDRESS, 1<<(pin))
156 #define GPIO_PIN_HI(pin) GPIO_PIN_LATCH_HI(pin), GPIO_PIN_DIR_OUT(pin)
157 #define GPIO_PIN_LOW(pin) GPIO_PIN_LATCH_LOW(pin), GPIO_PIN_DIR_OUT(pin)
158 #define GPIO_PIN_WR(pin,val) (val) ? GPIO_PIN_HI(pin) : GPIO_PIN_LOW(pin)
159 
160 
161 // =============================================
163 // GPIO pin 16 is special - it uses the RTC GPIO pin
165 #define GPIO16_PIN_MODE() gpio_pin_sfr_mode(16)
166 
168 #define GPIO16_PIN_DIR_IN() gpio16_pin_dir(0)
169 #define GPIO16_PIN_RD() ( READ_PERI_REG(RTC_GPIO_IN_DATA) & 1 )
170 #define GPIO16_RD() ( GPIO16_PIN_DIR_IN(), GPIO16_PIN_RD() )
172 
174 #define GPIO16_PIN_LATCH_LOW() \
175  WRITE_PERI_REG(RTC_GPIO_OUT, (READ_PERI_REG(RTC_GPIO_OUT)&(uint32_t)0xfffffffe) )
176 #define GPIO16_PIN_LATCH_HI() \
177  WRITE_PERI_REG(RTC_GPIO_OUT, (READ_PERI_REG(RTC_GPIO_OUT)&(uint32_t)0xfffffffe)|(uint32_t)1)
178 #define GPIO16_LATCH_RD() ( READ_PERI_REG(RTC_GPIO_OUT) & 1 )
179 
181 #define GPIO16_PIN_DIR_OUT() gpio16_pin_dir(1)
182 #define GPIO16_PIN_HI() GPIO16_PIN_LATCH_HI(), GPIO16_PIN_DIR_OUT()
183 #define GPIO16_PIN_LOW() GPIO16_PIN_LATCH_LOW(), GPIO16_PIN_DIR_OUT()
184 #define GPIO16_PIN_OUT(val) (val) ? GPIO16_PIN_HI() : GPIO16_PIN_LOW()
185 
186 //FIXME do pull up modes
187 #define GPIO16_PIN_FLOAT() GPIO16_PIN_DIR_IN()
188 
189 void MEMSPACE gpio_pin_sfr_mode ( int pin );
190 void MEMSPACE gpio16_pin_dir ( uint8_t out );
191 // =============================================
192 
193 #endif // ESP8266
194 // =============================================
195 
196 
197 /* hal.c */
198 void gpio_pin_sfr_mode ( int pin );
199 void gpio16_pin_dir ( uint8_t out );
200 void gpio_pin_out ( uint8_t pin , uint8_t val );
201 uint8_t gpio_pin_rd ( uint8_t pin );
202 void chip_select_init ( uint8_t pin );
203 void chip_select ( uint8_t pin );
204 void chip_deselect ( uint8_t pin );
205 void chip_addr_init ( void );
206 void chip_addr ( int addr );
207 void spi_waitReady ( void );
208 void spi_init ( uint32_t clock , int pin );
209 void spi_begin ( uint32_t clock , int pin );
210 void spi_end ( uint8_t pin );
212 void spi_TX_buffer ( const uint8_t *data , int count );
213 void spi_RX_buffer ( const uint8_t *data , int count );
214 void spi_TXRX_buffer ( const uint8_t *data , int count );
215 uint8_t spi_RX ( void );
216 void spi_TX ( uint8_t data );
217 uint8_t spi_TXRX ( uint8_t data );
218 
219 
220 #endif /* _INCLUDE_HAL_H_ */
void spi_init(uint32_t clock, int pin)
Definition: hal.c:327
void chip_deselect(uint8_t pin)
set GPIO to deselect - HI
Definition: hal.c:227
void spi_TXRX_buffer(const uint8_t *data, int count)
SPI write/read buffer.
Definition: hal.c:442
void chip_select_init(uint8_t pin)
CHIP select HAL.
Definition: hal.c:198
uint8_t spi_chip_select_status(void)
SPI CS pin status return CS GPIO pin number or 0xff.
Definition: hal.c:404
unsigned int uint32_t
Definition: send.c:19
void gpio16_pin_dir(uint8_t out)
void spi_waitReady(void)
SPI bus wrapper functions for multiple device support.
Definition: hal.c:306
void chip_addr(int addr)
set address on GPIO lines
Definition: hal.c:271
uint8_t gpio_pin_rd(uint8_t pin)
read GPIO pin
Definition: hal.c:178
void gpio_pin_sfr_mode(int pin)
AVR GPIO MACROs.
Definition: hal.c:52
void spi_TX_buffer(const uint8_t *data, int count)
SPI write buffer.
Definition: hal.c:414
uint8_t spi_RX(void)
SPI read 1 byte.
Definition: hal.c:454
void spi_TX(uint8_t data)
SPI write 1 byte.
Definition: hal.c:469
void gpio_pin_out(uint8_t pin, uint8_t val)
set GPIO pin state HI or LOW
Definition: hal.c:155
void spi_begin(uint32_t clock, int pin)
SPI chip enable function Function waits for current tranaction to finish before proceeding.
Definition: hal.c:355
#define MEMSPACE
Definition: cpu.h:25
void chip_select(uint8_t pin)
set GPIO to select - LOW
Definition: hal.c:213
void chip_addr_init(void)
ADDRESS select HAL.
Definition: hal.c:242
uint8_t spi_TXRX(uint8_t data)
SPI read and write 1 byte.
Definition: hal.c:483
void spi_RX_buffer(const uint8_t *data, int count)
SPI read buffer.
Definition: hal.c:428
void spi_end(uint8_t pin)
SPI chip disable function wait for current tranaction to finish!
Definition: hal.c:388
unsigned char uint8_t
Definition: send.c:17