Example spi board config for ILI9341
This commit is contained in:
parent
343ddd7158
commit
cf22a7f8e3
222
boards/addons/gdisp/board_ILI9341_spi.h
Normal file
222
boards/addons/gdisp/board_ILI9341_spi.h
Normal file
@ -0,0 +1,222 @@
|
||||
/*
|
||||
* This file is subject to the terms of the GFX License. If a copy of
|
||||
* the license was not distributed with this file, you can obtain one at:
|
||||
*
|
||||
* http://ugfx.org/license.html
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file boards/addons/gdisp/board_ILI9341_spi.h
|
||||
* @brief GDISP Graphic Driver subsystem board interface for the ILI9341 display.
|
||||
*
|
||||
* @note This file contains a mix of hardware specific and operating system specific
|
||||
* code. You will need to change it for your CPU and/or operating system.
|
||||
*/
|
||||
|
||||
#ifndef _GDISP_LLD_BOARD_H
|
||||
#define _GDISP_LLD_BOARD_H
|
||||
|
||||
#define LCD_PORT GPIOB
|
||||
#define LCD_MOSI 15
|
||||
#define LCD_MISO 14
|
||||
#define LCD_SCK 13
|
||||
#define LCD_CS 12
|
||||
#define LCD_DC 11
|
||||
#define LCD_RES 10
|
||||
|
||||
#define LCD_DC_CMD palClearPad(LCD_PORT, LCD_DC)
|
||||
#define LCD_DC_DATA palSetPad(LCD_PORT, LCD_DC)
|
||||
#define LCD_SCK_SET palSetPad(LCD_PORT, LCD_SCK)
|
||||
#define LCD_SCK_RES palClearPad(LCD_PORT, LCD_SCK)
|
||||
#define LCD_CS_RES palSetPad(LCD_PORT, LCD_CS)
|
||||
#define LCD_CS_SET palClearPad(LCD_PORT, LCD_CS)
|
||||
|
||||
/**
|
||||
* SPI configuration structure.
|
||||
* Speed 12 MHz, CPHA=0, CPOL=0, 8bits frames, MSb transmitted first.
|
||||
* Soft slave select.
|
||||
*/
|
||||
static const SPIConfig spi2cfg = {
|
||||
NULL,
|
||||
LCD_PORT,
|
||||
LCD_CS,
|
||||
(SPI_CR1_MSTR | SPI_CR1_SPE | SPI_CR1_SSM | SPI_CR1_SSI)
|
||||
};
|
||||
|
||||
static void send_data(uint16_t data);
|
||||
|
||||
/**
|
||||
* @brief Initialise the board for the display.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @note Set the g->board member to whatever is appropriate. For multiple
|
||||
* displays this might be a pointer to the appropriate register set.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void init_board(GDisplay *g) {
|
||||
|
||||
// As we are not using multiple displays we set g->board to NULL as we don't use it.
|
||||
g->board = 0;
|
||||
|
||||
palSetPadMode(LCD_PORT, LCD_CS, PAL_MODE_OUTPUT_PUSHPULL);
|
||||
palSetPadMode(LCD_PORT, LCD_DC, PAL_MODE_OUTPUT_PUSHPULL);
|
||||
palSetPadMode(LCD_PORT, LCD_RES, PAL_MODE_OUTPUT_PUSHPULL);
|
||||
|
||||
spiStart(&SPID2, &spi2cfg);
|
||||
spiSelectI(&SPID2);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief After the initialisation.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void post_init_board(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set or clear the lcd reset pin.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] state TRUE = lcd in reset, FALSE = normal operation
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void setpin_reset(GDisplay *g, bool_t state) {
|
||||
(void) g;
|
||||
|
||||
if (state == TRUE) {
|
||||
palClearPad(LCD_PORT, LCD_RES);
|
||||
} else {
|
||||
palSetPad(LCD_PORT, LCD_RES);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the lcd back-light level.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] percent 0 to 100%
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void set_backlight(GDisplay *g, uint8_t percent) {
|
||||
(void) g;
|
||||
(void) percent;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Take exclusive control of the bus
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void acquire_bus(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Release exclusive control of the bus
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void release_bus(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Send data to the lcd.
|
||||
*
|
||||
* @param[in] data The data to send
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void send_data(uint16_t data) {
|
||||
// http://forum.easyelectronics.ru/viewtopic.php?p=262122#p262122
|
||||
while (!(SPI2->SR & SPI_SR_TXE)); // ïðè âõîäå íà îòïðàâêó ïðîâåðÿåì - à ïóñòîé ëè SPI_DR
|
||||
SPI2->DR = data; // çàãðóçèëè â SPI_DR êîä êîìàíäû
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Send data to the index register.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] index The index register to set
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void write_index(GDisplay *g, uint16_t index) {
|
||||
(void) g;
|
||||
|
||||
while (SPI2->SR & SPI_SR_BSY);
|
||||
LCD_CS_RES;
|
||||
LCD_DC_CMD; // ïåðåâîäèì äèñïëåé â ðåæèì êîìàíä
|
||||
LCD_CS_SET;
|
||||
send_data(index);
|
||||
while (SPI2->SR & SPI_SR_BSY); // ïîêà ôëàã óñòàíîâëåí (==1) -- ìîäóëü SPI çàíÿò
|
||||
/* ëèøíèé öèêë îæèäàíèÿ îêîí÷àíèÿ ïåðåäà÷è êîìàíäû ïîçâîëÿåò â äàëüíåéøåì ñëàòü
|
||||
* áàéòû äàííûõ áåç íåíóæíûõ îæèäàíèé è çàäåðæåê.
|
||||
*/
|
||||
LCD_DC_DATA; // ïåðåâîäèì äèñïëåé â ðåæèì äàííûõ
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Send data to the lcd with DC control.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] data The data to send
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void write_data(GDisplay *g, uint16_t data) {
|
||||
(void) g;
|
||||
|
||||
send_data(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the bus in read mode
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void setreadmode(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the bus back into write mode
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void setwritemode(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Read data from the lcd.
|
||||
* @return The data from the lcd
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline uint16_t read_data(GDisplay *g) {
|
||||
(void) g;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* _GDISP_LLD_BOARD_H */
|
||||
|
Loading…
Reference in New Issue
Block a user