123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284 |
- #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;
- // }
|