|
发表于 2025-2-10 13:49:03
|
显示全部楼层
void write_dgus_vp(u16 addr, u8 *buf, u16 len)
{
u16 OS_addr = 0;
u16 OS_addr_offset = 0;
u16 OS_len = 0, OS_len_offset = 0;
u16 LenLimit;
if (0 == len)
return;
LenLimit = 0xffffU - addr + 1;
if (LenLimit < len)
{
len = LenLimit;
}
OS_addr = addr >> 1;
OS_addr_offset = addr & 0x01;
// #ifdef INTVPACTION
// EA = 0;
// #endif
ADR_H = 0;
ADR_M = (u8)(OS_addr >> 8);
ADR_L = (u8)OS_addr;
ADR_INC = 0x01;
RAMMODE = 0x83;
while (!APP_ACK)
;
if (OS_addr_offset)
{
DATA1 = *buf++;
DATA0 = *buf++;
APP_EN = 1;
while (APP_EN)
;
len--;
}
OS_len = len >> 1;
OS_len_offset = len & 0x01;
RAMMODE = 0x8F;
while (OS_len--)
{
DATA3 = *buf++;
DATA2 = *buf++;
DATA1 = *buf++;
DATA0 = *buf++;
APP_EN = 1;
while (APP_EN)
;
}
if (OS_len_offset)
{
RAMMODE = 0x8C;
DATA3 = *buf++;
DATA2 = *buf++;
APP_EN = 1;
while (APP_EN)
;
}
RAMMODE = 0x00;
// #ifdef INTVPACTION
// EA = 1;
// #endif
}
|
|