Bouffalo SDK  1.0
Bouffalolab Software Development Kit
bflb_dbi.h
Go to the documentation of this file.
1 #ifndef _BFLB_DBI_H
2 #define _BFLB_DBI_H
3 
4 #include "bflb_core.h"
5 
14 #if defined(BL616)
15 #define DBI_QSPI_SUPPORT 1
16 #define DBI_YUV_SUPPORT 1
17 #define DBI_WRITE_DATA_BYTE_MAX 256
18 #define DBI_READ_DATA_BYTE_MAX 8
19 #define SPI_FIFO_NUM_MAX 8
20 #elif defined(BL606P) || defined(BL808)
21 #define DBI_QSPI_SUPPORT 0
22 #define DBI_YUV_SUPPORT 0
23 #define DBI_WRITE_DATA_BYTE_MAX 4
24 #define DBI_READ_DATA_BYTE_MAX 4
25 #define SPI_FIFO_NUM_MAX 8
26 #else
27 #error "unknown device"
28 #endif
29 
30 #define DBI_WRITE_PIXEL_CNT_MAX 0x00FFFFFF
31 
35 #define DBI_MODE_TYPE_B 0 /* mipi-dbi typeB 8-wire-data mode */
36 #define DBI_MODE_TYPE_C_4_WIRE 1 /* mipi-dbi typeC 4-wire mode */
37 #define DBI_MODE_TYPE_C_3_WIRE 2 /* mipi-dbi typeC 3-wire mode */
38 #if (DBI_QSPI_SUPPORT)
39 #define DBI_MODE_EX_QSPI 3 /* Not the mipi standard. Extra support for QSPI mode */
40 #endif
41 
48 #define DBI_PIXEL_INPUT_FORMAT_NBGR_8888 0 /* 32-bit/pixel, memory byte: [0]->pixel[0][R], [1]->pixel[0][G], [2]->pixel[0][B], [3]->invalid, [4]->pixel[1][R], ... */
49 #define DBI_PIXEL_INPUT_FORMAT_NRGB_8888 1 /* 32-bit/pixel, memory byte: [0]->pixel[0][B], [1]->pixel[0][G], [2]->pixel[0][R], [3]->invalid, [4]->pixel[1][B], ... */
50 #define DBI_PIXEL_INPUT_FORMAT_BGRN_8888 2 /* 32-bit/pixel, memory byte: [0]->invalid, [1]->pixel[0][R], [2]->pixel[0][G], [3]->pixel[0][B], [4]->invalid, [5]->pixel[1][R], ... */
51 #define DBI_PIXEL_INPUT_FORMAT_RGBN_8888 3 /* 32-bit/pixel, memory byte: [0]->invalid, [1]->pixel[0][B], [2]->pixel[0][G], [3]->pixel[0][R], [4]->invalid, [5]->pixel[1][B], ... */
52 #define DBI_PIXEL_INPUT_FORMAT_RGB_888 4 /* 24-bit/pixel, memory byte: [0]->pixel[0][R], [1]->pixel[0][G], [2]->pixel[0][B], [3]->pixel[1][R], [4]->pixel[1][G], ... */
53 #define DBI_PIXEL_INPUT_FORMAT_BGR_888 5 /* 24-bit/pixel, memory byte: [0]->pixel[0][B], [1]->pixel[0][G], [2]->pixel[0][R], [3]->pixel[1][B], [4]->pixel[1][G], ... */
54 #define DBI_PIXEL_INPUT_FORMAT_BGR_565 6 /* 16-bit/pixel, */
55 #define DBI_PIXEL_INPUT_FORMAT_RGB_565 7 /* 16-bit/pixel, */
56 
63 #define DBI_PIXEL_OUTPUT_FORMAT_RGB_565 0 /* 16-bit/pixel */
64 #define DBI_PIXEL_OUTPUT_FORMAT_RGB_888 1 /* 24-bit/pixel, Compatible with RGB666 format */
65 
72 #define DBI_CLOCK_MODE_0 0 /* CPOL=0 CHPHA=0 */
73 #define DBI_CLOCK_MODE_1 1 /* CPOL=0 CHPHA=1 */
74 #define DBI_CLOCK_MODE_2 2 /* CPOL=1 CHPHA=0 */
75 #define DBI_CLOCK_MODE_3 3 /* CPOL=1 CHPHA=1 */
76 
83 #define DBI_QSPI_WIRE_NUM_1 0 /* 1-wire mode */
84 #define DBI_QSPI_WIRE_NUM_4 1 /* 4-wire mode */
85 
92 #define DBI_INTSTS_TC (1 << 0)
93 #define SPI_INTSTS_TX_FIFO (1 << 1)
94 #define SPI_INTSTS_FIFO_ERR (1 << 2)
95 
102 #define DBI_INTCLR_TC (1 << 0)
103 
110 #define DBI_CMD_CLEAR_TX_FIFO (0x01)
111 #define DBI_CMD_GET_TX_FIFO_CNT (0x02)
112 #define DBI_CMD_MASK_CMD_PHASE (0x03)
113 #define DBI_CMD_CS_CONTINUE (0x04)
114 #define DBI_CMD_SET_DUMMY_CNT (0x05)
115 #define DBI_CMD_GET_SIZE_OF_PIXEL_CNT (0x06)
116 #define DBI_CMD_INPUT_PIXEL_FORMAT (0x07)
117 #define DBI_CMD_OUTPUT_PIXEL_FORMAT (0x08)
118 #if (DBI_QSPI_SUPPORT)
119 #define DBI_CMD_YUV_TO_RGB_ENABLE (0x10)
120 #endif
121 
148  uint8_t dbi_mode;
151  uint8_t clk_mode;
152  uint32_t clk_freq_hz;
154 #if (DBI_QSPI_SUPPORT)
155  uint8_t cmd_wire_mode;
156  uint8_t addr_wire_mode;
157  uint8_t data_wire_mode;
158 #endif
159 };
160 
161 #ifdef __cplusplus
162 extern "C" {
163 #endif
164 
171 void bflb_dbi_init(struct bflb_device_s *dev, const struct bflb_dbi_config_s *config);
172 
178 void bflb_dbi_deinit(struct bflb_device_s *dev);
179 
180 #if DBI_QSPI_SUPPORT
181 
188 void bflb_dbi_qspi_set_addr(struct bflb_device_s *dev, uint8_t addr_byte_size, uint32_t addr_val);
189 
190 #endif
191 
201 int bflb_dbi_send_cmd_data(struct bflb_device_s *dev, uint8_t cmd, uint8_t data_len, uint8_t *data_buff);
202 
212 int bflb_dbi_send_cmd_read_data(struct bflb_device_s *dev, uint8_t cmd, uint8_t data_len, uint8_t *data_buff);
213 
223 int bflb_dbi_send_cmd_pixel(struct bflb_device_s *dev, uint8_t cmd, uint32_t pixel_cnt, void *pixel_buff);
224 
231 void bflb_dbi_link_txdma(struct bflb_device_s *dev, bool enable);
232 
239 void bflb_dbi_txint_mask(struct bflb_device_s *dev, bool mask);
240 
247 void bflb_dbi_tcint_mask(struct bflb_device_s *dev, bool mask);
248 
255 void bflb_dbi_errint_mask(struct bflb_device_s *dev, bool mask);
256 
263 uint32_t bflb_dbi_get_intstatus(struct bflb_device_s *dev);
264 
271 void bflb_dbi_int_clear(struct bflb_device_s *dev, uint32_t int_clear);
272 
281 int bflb_dbi_feature_control(struct bflb_device_s *dev, int cmd, size_t arg);
282 
283 #ifdef __cplusplus
284 }
285 #endif
286 
295 #endif
uint8_t pixel_input_format
Definition: bflb_dbi.h:149
void bflb_dbi_txint_mask(struct bflb_device_s *dev, bool mask)
Enable or disable dbi rx fifo threhold interrupt.
uint8_t clk_mode
Definition: bflb_dbi.h:151
DBI configuration structure.
Definition: bflb_dbi.h:147
int bflb_dbi_send_cmd_read_data(struct bflb_device_s *dev, uint8_t cmd, uint8_t data_len, uint8_t *data_buff)
To read the data after sending the command, send cmd -> send address(only QSPI mode) -> read paramete...
void bflb_dbi_init(struct bflb_device_s *dev, const struct bflb_dbi_config_s *config)
Initialize dbi.
void bflb_dbi_deinit(struct bflb_device_s *dev)
Deinitialize dbi.
uint32_t bflb_dbi_get_intstatus(struct bflb_device_s *dev)
Get dbi interrupt status.
uint32_t clk_freq_hz
Definition: bflb_dbi.h:152
int bflb_dbi_feature_control(struct bflb_device_s *dev, int cmd, size_t arg)
Control dbi feature.
void bflb_dbi_link_txdma(struct bflb_device_s *dev, bool enable)
Enable dbi tx dma.
void bflb_dbi_tcint_mask(struct bflb_device_s *dev, bool mask)
Enable or disable dbi transfer completion interrupt.
int bflb_dbi_send_cmd_data(struct bflb_device_s *dev, uint8_t cmd, uint8_t data_len, uint8_t *data_buff)
Send cmd with pixel data, send cmd -> send address(only QSPI mode) -> send parameter_data.
uint8_t tx_fifo_threshold
Definition: bflb_dbi.h:153
uint8_t dbi_mode
Definition: bflb_dbi.h:148
void bflb_dbi_errint_mask(struct bflb_device_s *dev, bool mask)
Enable or disable dbi error interrupt.
void bflb_dbi_int_clear(struct bflb_device_s *dev, uint32_t int_clear)
Clear dbi interrupt status.
int bflb_dbi_send_cmd_pixel(struct bflb_device_s *dev, uint8_t cmd, uint32_t pixel_cnt, void *pixel_buff)
Send cmd with pixel data, send cmd -> send address(only QSPI mode) -> send pixel_data,.
uint8_t pixel_output_format
Definition: bflb_dbi.h:150