rt-thread/bsp/airm2m/air105/libraries/HAL_Driver/Inc/air105_lcdi.h

141 lines
4.7 KiB
C

/*
* Copyright (c) 2022 OpenLuat & AirM2M
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __AIR105_LCDI_H
#define __AIR105_LCDI_H
#ifdef __cplusplus
extern "C"
{
#endif
#include "air105.h"
#define LCDI_CMD (0)
#define LCDI_DAT (1)
#define LCDI_MODE_6800 (0)
#define LCDI_MODE_8080 (1)
#define LCD_CMD_BUFF_SIZE (64)
#define LCD_READ_BUFF_SIZE (512)
#define LCD_WRITE_BUFF_SIZE (512)
//LCD module
#define LCDI_FIFO_OV_IE (1 << 12)
#define LCDI_FIFO_RST (1 << 11)
#define LCDI_WR_DMA_EN (1 << 10)
#define LCDI_WR_FIFO_EN (1 << 9)
#define LCDI_CTRL_AUTO_READ (1 << 8)
#define LCDI_CTRL_TYPE_8080 (1 << 7)
#define LCDI_CTRL_EN_RD (1 << 6)
#define LCDI_CTRL_RW_WR (1 << 5)
#define LCDI_CTRL_CD (1 << 4)
#define LCDI_CTRL_WIDTH_4BIT (1 << 3)
#define LCDI_CTRL_AUTO (1 << 2)
#define LCDI_CTRL_RD_IE (1 << 1)
#define LCDI_CTRL_WR_IE (1 << 0)
#define LCDI_STATUS_READY (1 << 2)
#define LCDI_STATUS_RD_IS (1 << 1)
#define LCDI_STATUS_WR_IS (1 << 0)
#define RNG_BUF_IS_FULL(pBuf) ((pBuf)->u32Tail == (pBuf)->u32Head)
#define RNG_BUF_NEXT_HEAD(pBuf) (((pBuf)->u32Head + 1) % ((pBuf)->u32BuffSize))
#define RNG_BUF_NEXT_TAIL(pBuf) (((pBuf)->u32Tail + 1) % ((pBuf)->u32BuffSize))
#define RNG_BUF_LEN(pBuf) (((pBuf)->u32Tail + (pBuf)->u32BuffSize - 1 - (pBuf)->u32Head) % (pBuf)->u32BuffSize)
#define RNG_BUF_PERI_TAIL(pBuf) (((pBuf)->u32Tail + (pBuf)->u32BuffSize - 1) % ((pBuf)->u32BuffSize))
typedef struct
{
uint32_t volatile u32Head;
uint32_t volatile u32Tail;
uint32_t volatile u32BuffSize;
uint32_t volatile u32Stat;
uint8_t volatile *pu8Buff;
} RNG_BUF8, *RNG_BUF8_ID;
typedef struct
{
uint32_t volatile u32Head;
uint32_t volatile u32Tail;
uint32_t volatile u32BuffSize;
uint32_t volatile u32Stat;
uint32_t volatile *pu32Buff;
} RNG_BUF32, *RNG_BUF32_ID;
typedef struct
{
uint8_t lcd_ReadBuff[LCD_READ_BUFF_SIZE];
uint8_t lcd_WriteBuff[LCD_WRITE_BUFF_SIZE];
uint32_t lcd_CmdBuff[LCD_CMD_BUFF_SIZE];
RNG_BUF8 rbRead;
RNG_BUF8 rbWrite;
RNG_BUF32 rbCmd;
RNG_BUF32_ID prbCmd;
RNG_BUF8_ID prbRead;
RNG_BUF8_ID prbWrite;
volatile uint32_t u32OpCount;
} RING_BUF;
typedef struct
{
uint8_t LCD_BusMode; //Bus mode(8080/6800)
uint8_t LCD_IntRead; //Read interrupt Enable
uint8_t LCD_IntWrite; //Read interrupt Enable
uint8_t fifo_level;
uint32_t LCD_MaxQTR; //Max qaurter cylce of read/write.
uint32_t fifo_ov_ie_enable;
uint32_t fifo_rst_enable;
uint32_t wr_dma_enable;
uint32_t wr_fifo_enable;
uint32_t opt;
RING_BUF ring_buf;
} LCD_InitTypeDef;
//Operate the bus signal
void LCD_BusRead(LCD_TypeDef *LCDx,uint8_t u8CD);
void LCD_BusWrite(LCD_TypeDef *LCDx,uint8_t u8CD, uint8_t value);
void LCD_Read(LCD_TypeDef *LCDx,uint8_t u8CD, uint8_t *dat);
void LCD_Write(LCD_TypeDef *LCDx,uint8_t u8CD, uint8_t u8Value);
//Buffer mode only can used in interrupt mode.
int32_t LCD_ReadBuff(LCD_TypeDef *LCDx, LCD_InitTypeDef *pLcdInit, uint8_t *pu8Buff, uint32_t u32BuffLen);
int32_t LCD_WriteBuff(LCD_TypeDef *LCDx, LCD_InitTypeDef *pLcdInit, uint8_t *pu8Buff, uint32_t u32BuffLen);
void LCD_Init(LCD_TypeDef *LCDx, LCD_InitTypeDef *pLcdInit);
void LCD_FIFODMAconfig(LCD_TypeDef *LCDx, LCD_InitTypeDef *LCD_InitType);
#ifdef __cplusplus
}
#endif
#endif
/************************** (C) COPYRIGHT Megahunt *****END OF FILE****/