[Lua] 纯文本查看 复制代码
print("RA8875.lua")
--返回格式:每像素3个字节,2像素交错紧凑排列: G1 R1 R2 B1 B2 G2
function dev_read(driver, height, width, rgb, ltdc, pause,
data_reg_addr, cmd_reg_addr, buff_count, buff_addr1, buff_addr2, buff_addr3)
local dispmem1
local dispmem2
local dispmem3
local re = 0
local i, j
local px
local t1, t2
local str
pg_write32(0xE000EDF0, 0xA05F0000 + 0X00000001 + 0X00000002) -- 进入调试暂停CPU
--读第1个显存
t1 = get_runtime()
str = string.format("读RA8875显存 数据寄存器地址:0x%08X 指令寄存器地址:0x%08X 高度:%d 宽度:%d", data_reg_addr, cmd_reg_addr, height, width)
print(str)
DATA_REG = data_reg_addr
CMD_REG = cmd_reg_addr
pg_write8(CMD_REG, 0x00)
id1 = pg_read8(DATA_REG)
str = string.format("Chip ID = %02X", id1)
print(str)
---------------------------------------------------
--- 设置0x40寄存器 地址不自增
---------------------------------------------------
pg_write8(CMD_REG, 0x40)
pg_write8(DATA_REG, 0x00)
RA8875_SetReadCursor(0,0)
pg_write8(CMD_REG, 0x02)
--第1次是哑读,丢弃
--pg_read8(DATA_REG)
--pg_read8(DATA_REG)
dispmem1 = ""
for i=0,14,1 do
RA8875_SetDispWin(0,i*32,32*(i+1),width)
RA8875_SetReadCursor(0,i*32)
pg_write8(CMD_REG, 0x02)
re, dispmem2 = pg_read_mem_16(DATA_REG, 64 * 800)
if (re == 0) then print("pg_read_mem0() failed") end
dispmem1 = dispmem1 .. dispmem2;
end
t2 = get_runtime()
print("读显存耗时(ms):", t2 - t1)
-------------------------------------
-- 退出读取地址自增
-------------------------------------
pg_write8(CMD_REG, 0x40)
pg_write8(DATA_REG, 0x01)
pg_write32(0xE000EDF0, 0xA05F0000) --恢复
return re, dispmem1, dispmem2, dispmem3
end
function RA8875_SetReadCursor(_usX, _usY)
-- if (g_LcdDirection > 1) /* 竖屏 */
-- {
-- uint16_t temp;
-- temp = _usX;
-- _usX = _usY;
-- _usY = temp;
-- }
-- 设置内存读光标的坐标
RA8875_WriteReg(0x4A, _usX)
RA8875_WriteReg(0x4B, _usX >> 8)
RA8875_WriteReg(0x4C, _usY)
RA8875_WriteReg(0x4D, _usY >> 8)
end
function RA8875_WriteReg(_ucRegAddr, _ucRegValue)
pg_write8(CMD_REG, _ucRegAddr);
pg_write8(DATA_REG, _ucRegValue);
end
function RA8875_GetPixelGUI(_usX, _usY)
local usRGB
pg_write8(CMD_REG, 0x4A)
pg_write8(DATA_REG, _usX&0xff)
pg_write8(CMD_REG, 0x4B)
pg_write8(DATA_REG, (_usX>>8)&0xff)
pg_write8(CMD_REG, 0x4C)
pg_write8(DATA_REG, _usY&0xff)
pg_write8(CMD_REG, 0x4D)
pg_write8(DATA_REG, (_usY>>8)&0xff)
pg_write8(CMD_REG, 0x02)
return usRGB
end
function RA8875_SetDispWin(x, y, h, w)
local usTemp
RA8875_WriteReg(0x30, x)
RA8875_WriteReg(0x31, x >> 8)
RA8875_WriteReg(0x32, y)
RA8875_WriteReg(0x33, y >> 8)
usTemp = w + x - 1
RA8875_WriteReg(0x34, usTemp)
RA8875_WriteReg(0x35, usTemp >> 8)
usTemp = h + y - 1
RA8875_WriteReg(0x36, usTemp)
RA8875_WriteReg(0x37, usTemp >> 8)
end