141 lines
4.7 KiB
C
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****/
|