📄 access.c
字号:
bRTD_SDIO_0 = (bit)(send & 0x08);
bRTD_SCLK = 1;
bRTD_SCLK = 0;
bRTD_SDIO_0 = (bit)(send & 0x10);
bRTD_SCLK = 1;
bRTD_SCLK = 0;
bRTD_SDIO_0 = (bit)(send & 0x20);
bRTD_SCLK = 1;
bRTD_SCLK = 0;
bRTD_SDIO_0 = (bit)(send & 0x40);
bRTD_SCLK = 1;
bRTD_SCLK = 0;
bRTD_SDIO_0 = (bit)(send & 0x80);
bRTD_SCLK = 1;
bRTD_SCLK = 0;
bRTD_SDIO_0 = 1;
bRTD_SCLK = 1;
#endif
}
void RTDSendAddr(unsigned char addr, unsigned char rd, unsigned char inc) // rd : 0 - Write, 1 - Read
{
#if (PARALLEL_PORT)
RTDSendByte(addr);
bRTD_SDIO_0 = (bit)(rd & 0x01);
bRTD_SDIO_1 = (bit)(inc & 0x01);
bRTD_SCLK = 0;
bRTD_SDIO_0 = 1;
bRTD_SDIO_1 = 1;
bRTD_SCLK = 1;
#else // Serial port
RTDSendByte(addr);
bRTD_SDIO_0 = (bit)(rd & 0x01);
bRTD_SCLK = 0;
bRTD_SDIO_0 = (bit)(inc & 0x01);
bRTD_SCLK = 1;
bRTD_SCLK = 0;
bRTD_SDIO_0 = 1;
#endif
}
void RTDSendStop(void)
{
bRTD_SCLK = 0;
bRTD_SCLK = 1;
bRTD_SCSB = 1;
}
void RTDRead(unsigned char index, unsigned char count, unsigned char inc)
{
if (count)
{
bRTD_SCSB = 0;
RTDSendAddr(index, 1, inc);
index = 0;
do
{
Data[index++] = RTDGetByte();
}
while (--count);
RTDSendStop();
}
}
void RTDWrite(unsigned char data *array)
{
unsigned char len, m;
do
{
if (0 == (array[0] & 0xfc)) return;
len = array[0] - 3;
array = array + 1;
bRTD_SCSB = 0;
if (BURST == array[0])
{
RTDSendAddr(array[1], 0, N_INC);
array = array + 2;
m = array[0];
do
{
RTDSendByte(m);
}
while (--len);
array = array + 1;
}
else
{
RTDSendAddr(array[1], 0, array[0]);
array = array + 2;
do
{
RTDSendByte(*array++);
}
while (--len);
}
RTDSendStop();
}
while (1);
}
void RTDCodeW(unsigned char code *array)
{
unsigned char len, m;
do
{
if (0 == (array[0] & 0xfc)) return;
len = array[0] - 3;
array = array + 1;
bRTD_SCSB = 0;
if (BURST == array[0])
{
RTDSendAddr(array[1], 0, N_INC);
array = array + 2;
m = array[0];
do
{
RTDSendByte(m);
}
while (--len);
array = array + 1;
}
else
{
RTDSendAddr(array[1], 0, array[0]);
array = array + 2;
do
{
RTDSendByte(*array++);
}
while (--len);
}
RTDSendStop();
}
while (1);
}
void RTDOSDW(unsigned char code *array)
{
unsigned char len;
do
{
if (array[0] == _end_) return;
bRTD_SCSB = 0;
RTDSendAddr(OSD_ROW_90,WRITE,Y_INC);
RTDSendByte(*array++);
RTDSendByte(*array++);
RTDSendStop();
bRTD_SCSB = 0;
RTDSendAddr(OSD_DATA_92,WRITE,N_INC);
do
{
if (array[0] == _ext_)
{
if (array[2] == _bb_)
{
do
{
len = array[3] - 1;
RTDSendByte(_ext_ + array[1]);
}
while(len--);
array += 4;
}
else
{
RTDSendByte(_ext_ + array[1]);
array += 2;
}
}
else if (array[1] == _bb_)
{
len = array[2] - 1;
do
{
RTDSendByte(*array);
}
while(len--);
array += 3;
}
else
RTDSendByte(*array++);
}
while(array[0] != _nn_);
array +=1 ;
RTDSendStop();
}
while (1);
}
void RTDSetByte(unsigned char addr, unsigned char val)
{
// Set Write Address
bRTD_SCSB = 0;
RTDSendAddr(addr, 0, 1);
// Write one Byte
RTDSendByte(val);
RTDSendStop();
}
void RTDSetBit(unsigned char addr, unsigned char and, unsigned char or)
{
// Set Read Address
bRTD_SCSB = 0;
RTDSendAddr(addr, 1, 1);
// Read 1 Byte
or = (RTDGetByte() & and) | or;
RTDSendStop();
// Set Write Address
bRTD_SCSB = 0;
RTDSendAddr(addr, 0, 1);
// Write one Byte
RTDSendByte(or);
RTDSendStop();
}
#if (VLC_COMPRESS)
void Load_VLC_Font(unsigned char code *array, unsigned int start, unsigned int length)
{
unsigned char m;
unsigned char ucVLD0, ucVLD1, ucVLD2;
start += FONT_BASE_ADDRESS;
bRTD_SCSB = 0;
RTDSendAddr(OSD_ROW_90, WRITE, Y_INC);
RTDSendByte((unsigned char)((start >> 8) & 0x000f) | 0xd0);
RTDSendByte((unsigned char)(start & 0x00ff));
RTDSendStop();
ucCnt = 0;
ucByte_Temp = 0;
pVLDArray = array;
bRTD_SCSB = 0;
RTDSendAddr(OSD_DATA_92, WRITE, N_INC);
do
{
for (m = 0; m < 9; m++)
{
ucVLD0 = Get_VLD() << 4;
ucVLD0 |= Get_VLD();
ucVLD1 = Get_VLD() << 4;
ucVLD1 |= Get_VLD();
ucVLD2 = Get_VLD() << 4;
ucVLD2 |= Get_VLD();
// Rearrange the byte order
RTDSendByte((ucVLD1 << 4) | (ucVLD2 & 0x0f));
RTDSendByte((ucVLD2 & 0xf0) | (ucVLD0 & 0x0f));
RTDSendByte((ucVLD0 & 0xf0) | (ucVLD1 >> 4));
}
}
while (--length);
RTDSendStop();
}
unsigned char Get_VLD()
{
unsigned char ucZero_Cnt = 0;
while (!Getbit()) ucZero_Cnt += 1;
// Issac
// we can get speed advantage if the most case in font-map is 0.
if (0 == ucZero_Cnt) return 0;
switch (ucZero_Cnt)
{
case 1 :
return (Getbit() ? 15 : 1);
case 2 :
return (Getbit() ? 8 : 2);
case 3 :
return (Getbit() ? 7 : 12);
case 4 :
if (Getbit())
{
return (Getbit() ? 9 : 4);
}
else
{
if (Getbit())
{
return (Getbit() ? 5 : 10);
}
else
{
return (Getbit() ? 11 : 3);
}
}
default : // case 5 :
if (Getbit())
{
return (Getbit() ? 13 : 14);
}
else
{
Getbit();
// Issac :
// bBit should be always 1 if table is correct ....
return 6; // if (bBit) return 6;
}
}
}
bit Getbit()
{
ucByte_Temp = (0 == ((ucCnt++) & 0x07)) ? *pVLDArray++ : (ucByte_Temp << 1);
return (ucByte_Temp & 0x80);
}
#else // Not using VLC_COMPRESS
//length represent the number of character
// character number of 1 bit font = 1
// character number of 2 bit font = 2
// character number of 4 bit font = 4
// length = (1 bit font amount) x 1 + (2 bit font amount) x 2 + (4 bit font amount) x 4
void Load_Font(unsigned char code *array, unsigned int start, unsigned int length)
{
unsigned char m;
unsigned char ucTemp0, ucTemp1, ucTemp2;
start = start * 9;
start += FONT_BASE_ADDRESS;
bRTD_SCSB = 0;
RTDSendAddr(OSD_ROW_90, WRITE, Y_INC);
RTDSendByte((unsigned char)((start >> 8) & 0x000f) | 0xd0);
RTDSendByte((unsigned char)(start & 0x00ff));
RTDSendStop();
bRTD_SCSB = 0;
RTDSendAddr(OSD_DATA_92, WRITE, N_INC);
do
{
for (m = 0; m < 9; m++)
{
ucTemp0 = *array++;
ucTemp1 = *array++;
ucTemp2 = *array++;
// Rearrange the byte order
RTDSendByte((ucTemp1 << 4) | (ucTemp2 & 0x0f));
RTDSendByte((ucTemp2 & 0xf0) | (ucTemp0 & 0x0f));
RTDSendByte((ucTemp0 & 0xf0) | (ucTemp1 >> 4));
}
}
while (--length);
RTDSendStop();
}
#endif
#if (HDCP_ENABLE)
void KEYCodeW(unsigned char code *array)
{
unsigned int m;
RTDSetBit(DVI_CTRL1_AF, 0x7f,0x00); //Reset the HDCP key download index
RTDSetBit(DVI_CTRL1_AF, 0x7f,0x80);
for(m = 0; m < 320; m++) //Key 0 ~ Key39
{
RTDSetByte(0xb1,array[m]);
}
RTDSetBit(DVI_CTRL1_AF, 0x7f,0x00); //Disable the Key Access Download port
RTDSetBit(TMDS_INPUT_ENA_A1, 0x7f, 0x00); // Turn on HDCP DDC channel
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -