高通字库
版本 V1.0 · 更新于 2024-07-02

7. GUI 芯片模块

7.1 SPI 通信

GUI 芯片 SPI 连接GUI 芯片 SPI 连接

7.2 GUI 芯片指令

GUI 芯片指令GUI 芯片指令

SPI Flash 读写

uint8_t spi_byte_write(uint8_t data) {
    uint8_t brxbuff;
    spi_i2s_data_transmit(SPI4, data);
    while (spi_i2s_flag_get(SPI4, SPI_I2S_RDBF_FLAG) == RESET);
    brxbuff = spi_i2s_data_receive(SPI4);
    while (spi_i2s_flag_get(SPI4, SPI_I2S_BF_FLAG) != RESET);
    return brxbuff;
}

void spiflash_read(uint8_t *pbuffer, uint32_t read_addr, uint32_t length) {
    FLASH_CS_LOW();
    spi_byte_write(0x03);  // 普通读取指令
    spi_byte_write((uint8_t)((read_addr) >> 16));
    spi_byte_write((uint8_t)((read_addr) >> 8));
    spi_byte_write((uint8_t)read_addr);
    spi_bytes_read(pbuffer, length);
    FLASH_CS_HIGH();
}

7.3 QSPI 通信

推荐使用 QSPI 以获得更高数据传输速率。详情请参阅完整 PDF 数据手册。

8. 字库驱动

从高通技术支持处获取字库静态库支持文件,实现外部声明函数:

unsigned char r_dat_bat(unsigned long address, unsigned short DataLen,
                        unsigned char *pBuff) {
    spiflash_read(pBuff, address, DataLen);
    return 1;
}

unsigned char gt_read_data(unsigned char* sendbuf, unsigned char sendlen,
                           unsigned char* receivebuf, unsigned int receivelen) {
    unsigned int i;
    FLASH_CS_LOW();
    for (i = 0; i < sendlen; i++) spi_byte_write(sendbuf[i]);
    for (i = 0; i < receivelen; i++) receivebuf[i] = spi_byte_read();
    FLASH_CS_HIGH();
    return 1;
}

在主函数中调用 GT_Font_Init(),返回值大于 0 表示字库初始化成功。之后可调用静态库中声明的函数接口调取不同点阵大小的字库数据。

int main(void) {
    system_clock_config();
    at32_board_init();
    spiflash_init();
    LCD_Init();
    GT_Font_Init();
    while (1);
}

视频教程