1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
#ifndef _GDISP_LLD_BOARD_H
#define _GDISP_LLD_BOARD_H
// Pin & SPI setup
#define SPI_DRIVER (&SPID2)
#define SPI_PORT GPIOB
#define SCK_PAD 10
#define MOSI_PAD 15
#define CS_PORT GPIOB
#define RESET_PORT GPIOB
#define DC_PORT GPIOB
#define CS_PAD 3 // 0 = chip selected
#define RESET_PAD 4 // 0 = reset
#define DC_PAD 5 // control = 0, data = 1
static SPIConfig spi_cfg = {
NULL,
CS_PORT,
CS_PAD,
SPI_CR1_BR_1
};
static GFXINLINE void init_board(GDisplay* g)
{
(void)g;
g->board = 0;
// Set pin modes
palSetPadMode(SPI_PORT, SCK_PAD, PAL_MODE_ALTERNATE(5) | PAL_STM32_OSPEED_HIGHEST);
palSetPadMode(SPI_PORT, MOSI_PAD, PAL_MODE_ALTERNATE(5) | PAL_STM32_OSPEED_HIGHEST);
palSetPadMode(RESET_PORT, RESET_PAD, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST);
palSetPadMode(CS_PORT, CS_PAD, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST);
palSetPadMode(DC_PORT, DC_PAD, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST);
// Apply default states
palSetPad(CS_PORT, CS_PAD);
palSetPad(RESET_PORT, RESET_PAD);
palClearPad(DC_PORT, DC_PAD);
// Start the SPI driver
spiStart(SPI_DRIVER, &spi_cfg);
}
static GFXINLINE void post_init_board(GDisplay* g)
{
(void)g;
}
static GFXINLINE void setpin_reset(GDisplay* g, bool_t state)
{
(void)g;
palWritePad(RESET_PORT, RESET_PAD, !state);
}
static GFXINLINE void acquire_bus(GDisplay* g)
{
(void)g;
spiAcquireBus(SPI_DRIVER);
spiSelect(SPI_DRIVER);
}
static GFXINLINE void release_bus(GDisplay* g)
{
(void)g;
spiUnselect(SPI_DRIVER);
spiReleaseBus(SPI_DRIVER);
}
static GFXINLINE void write_cmd(GDisplay* g, uint8_t cmd)
{
(void)g;
static uint8_t buf;
palClearPad(DC_PORT, DC_PAD);
buf = cmd;
spiSend(SPI_DRIVER, 1, &buf);
}
static GFXINLINE void write_data(GDisplay* g, uint8_t* data, uint16_t length)
{
(void)g;
palSetPad(DC_PORT, DC_PAD);
spiSend(SPI_DRIVER, length, data);
}
#endif /* _GDISP_LLD_BOARD_H */
|