123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266 |
- #include <stdio.h>
- #include "GT5DL32A3W.h"
- #include "FONT_LIB.h"
- #include "esp_log.h"
- #include "freertos/FreeRTOS.h"
- #include "freertos/task.h"
- #include "freertos/queue.h"
- static const char *LOG_TAG = "FONTLIB";
- static void task_delay_ms(uint32_t ms_count)
- {
- vTaskDelay(ms_count / portTICK_PERIOD_MS);
- }
- void gt_font_pin_init()
- {
- gpio_config_t fontLib_pin_cfg = {};
- fontLib_pin_cfg.intr_type = GPIO_INTR_DISABLE;
- fontLib_pin_cfg.mode = GPIO_MODE_OUTPUT;
- fontLib_pin_cfg.pin_bit_mask = FONT_OUTPUT_PIN_SEL;
- fontLib_pin_cfg.pull_down_en = 0;
- fontLib_pin_cfg.pull_up_en = 0;
- gpio_config(&fontLib_pin_cfg);
- fontLib_pin_cfg.intr_type = GPIO_INTR_DISABLE;
- fontLib_pin_cfg.mode = GPIO_MODE_INPUT;
- fontLib_pin_cfg.pin_bit_mask = FONT_INPUT_PIN_SEL;
- fontLib_pin_cfg.pull_down_en = 0;
- fontLib_pin_cfg.pull_up_en = 1;
- gpio_config(&fontLib_pin_cfg);
- }
- void font_init()
- {
- gt_font_pin_init();
- FONT_CLK_1;
- FONT_SDA_1;
- FONT_CS_HIGHT;
- font_exit_sleep(); // 退出睡眠
- // task_delay_ms(500);
- #if 1
- uint8_t id = GT_Font_Init();
- while (id == 0)
- {
- ESP_LOGE(LOG_TAG, "font fail");
- task_delay_ms(500);
- id = GT_Font_Init();
- }
- #endif
- ESP_LOGI(LOG_TAG, "font OK");
- }
- void font_spi_write(unsigned char value)
- {
- int i = 0, data = value;
- gpio_set_level(FONT_CLK_PIN, LOW_LEVEL);
- for (i = 0; i < 8; i++)
- {
- if (data & 0x0080)
- {
- FONT_SDA_1;
- }
- else
- {
- FONT_SDA_0;
- }
- // ets_delay_us(1);
- gpio_set_level(FONT_CLK_PIN, HIGH_LEVEL);
- // ets_delay_us(1);
- gpio_set_level(FONT_CLK_PIN, LOW_LEVEL);
- data = ((data << 1) & 0xff);
- }
- }
- void Send_Byte(unsigned char out)
- {
- unsigned char i = 0;
- for (i = 0; i < 8; i++)
- {
- FONT_CLK_0;
- if (((out << i) & 0x80) == 0)
- FONT_SDA_0;
- else
- FONT_SDA_1;
- FONT_CLK_1;
- }
- }
- /*******************************************************************************/
- // Get data sub-pro (STM8,STM32等双向口) SPI接收点阵数据的算法 /
- /*******************************************************************************/
- unsigned char Get_Byte(void)
- {
- unsigned char i;
- unsigned char read_dat = 0, MISO = 0;
- FONT_CLK_1;
- for (i = 0; i < 8; i++)
- {
- FONT_CLK_0;
- MISO = FONT_RD_SDA;
- read_dat = read_dat << 1;
- if (MISO)
- read_dat |= 0x01;
- else
- read_dat &= 0xfe;
- FONT_CLK_1;
- }
- return (read_dat);
- }
- unsigned char gt_read_data(unsigned char *sendbuf, unsigned char sendlen, unsigned char *receivebuf, unsigned int receivelen)
- {
- unsigned int i;
- FONT_CS_LOW;
- for (i = 0; i < sendlen; i++)
- {
- Send_Byte(sendbuf[i]);
- }
- for (i = 0; i < receivelen; i++)
- {
- receivebuf[i] = Get_Byte();
- }
- FONT_CS_HIGHT;
- return 1;
- }
- /*******************************************************************************/
- // Send address sub-pro (STM8,STM32,51) /
- /*******************************************************************************/
- void SPI_Address(unsigned char AddH, unsigned char AddM, unsigned char AddL)
- {
- Send_Byte(AddH);
- Send_Byte(AddM);
- Send_Byte(AddL);
- }
- /*******************************************************************************/
- // Get N bytes sub-pro (STM8,STM32,51) //
- /*******************************************************************************/
- // 客户自己实现,从address地址读取len个字节的数据并存入到DZ_Data数组当中
- unsigned char r_dat_bat(unsigned long address, unsigned long DataLen, unsigned char *pBuff)
- {
- unsigned long i;
- unsigned char addrHigh;
- unsigned char addrMid;
- unsigned char addrLow;
- addrHigh = address >> 16;
- addrMid = address >> 8;
- addrLow = (unsigned char)address;
- FONT_CS_LOW; // 片选选中字库芯片
- Send_Byte(0x03); // 普通读取首先送0X03,然后发送地址高八位addrHigh,中八位addrMid,低八位addrLow。
- SPI_Address(addrHigh, addrMid, addrLow);
- for (i = 0; i < DataLen; i++)
- *(pBuff + i) = Get_Byte();
- FONT_CS_HIGHT;
- return 0;
- }
- // 客户自己实现,从address地址读取一个字节的数据并返回该数据
- unsigned char r_dat(unsigned long address)
- {
- unsigned char buff;
- unsigned char addrHigh;
- unsigned char addrMid;
- unsigned char addrLow;
- addrHigh = address >> 16;
- addrMid = address >> 8;
- addrLow = (unsigned char)address;
- FONT_CS_LOW;
- Send_Byte(0x03);
- SPI_Address(addrHigh, addrMid, addrLow);
- buff = Get_Byte();
- FONT_CS_HIGHT;
- return buff;
- }
- /******************************************************
- 客户自己实现, 库文件函数内部需要调用该函数匹配芯片ID号
- 根据说明文件或头文件是否需要, 没有就不需要实现
- ******************************************************/
- unsigned char CheckID(unsigned char CMD, unsigned long address,
- unsigned long byte_long, unsigned char *p_arr)
- {
- unsigned long j;
- FONT_CS_LOW;
- Send_Byte(CMD);
- Send_Byte((unsigned char)((address) >> 16));
- Send_Byte((unsigned char)((address) >> 8));
- Send_Byte((unsigned char)address);
- for (j = 0; j < byte_long; j++)
- {
- p_arr[j] = Get_Byte();
- }
- FONT_CS_HIGHT;
- return 1;
- }
- void font_into_sleep()
- {
- // unsigned long j;
- FONT_CS_LOW;
- Send_Byte(0xB9);
- FONT_CS_HIGHT;
- // return 1;
- }
- void font_exit_sleep()
- {
- // unsigned long j;
- FONT_CS_LOW;
- Send_Byte(0xAB);
- FONT_CS_HIGHT;
- }
- void font_soft_rst()
- {
- FONT_CS_LOW;
- Send_Byte(0x66);
- FONT_CS_HIGHT;
- task_delay_ms(10);
- FONT_CS_LOW;
- Send_Byte(0x99);
- FONT_CS_HIGHT;
- task_delay_ms(10);
- }
- // unsigned char test_ASCII_GetData(unsigned char asc,unsigned long ascii_kind,unsigned char *DZ_Data)
- // {
- // return ASCII_GetData( asc, ascii_kind, DZ_Data);
- // }
- // void test_spi()
- // {
- // FONT_CS_LOW;
- // Send_Byte(0x78);
- // FONT_CS_HIGHT;
- // FONT_CS_LOW;
- // Send_Byte(0x56);
- // FONT_CS_HIGHT;
- // FONT_CS_LOW;
- // Send_Byte(0x9f);
- // for(int i=0;i<3;i++)
- // {
- // uint8_t id = Get_Byte();
- // }
- // FONT_CS_HIGHT;
- // }
|