📄 access.c
字号:
#define __ACCESS__
#include "reg52.h"
#include "intrins.h"
#include "MAIN_DEF.H"
#include "ACCESS.h"
#include "CONFIG.H"
#include "MTV512.H"
void BitDly(void)
{
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
}
void I2CRead(unsigned char addr, unsigned char index, unsigned char count)
{
unsigned char n;
if (count)
{
I2CSendAddr(addr, index, 0);
I2CSendAddr(addr, 0, 1);
count = count - 1;
for (n = 0; n < count; n++) Data[n] = I2CGetByte(0);
Data[count] = I2CGetByte(1);
I2CSendStop();
}
}
void I2CWrite(unsigned char *array)
{
unsigned char n, len;
if (3 <= array[0])
{
len = array[0];
I2CSendAddr(array[1], array[2], 0);
for (n = 3; n < len; n++) I2CSendByte(array[n]);
I2CSendStop();
}
}
unsigned char I2CGetByte(unsigned char ack)
{
unsigned char r, m;
r = 0;
for (m = 0; m < 8; m++) // Each bit at a time, MSB first
{
bIIC_SCL = 1;
BitDly(); // Delay
r = (r << 1) | bIIC_SDA;
bIIC_SCL = 0;
BitDly(); // Delay
}
// Send ACK according to 'ack'
bIIC_SDA = (bit)(ack & 0x01);
BitDly(); // Delay
bIIC_SCL = 1;
BitDly(); // Delay
bIIC_SCL = 0;
BitDly(); // Delay
bIIC_SDA = 1;
return (r);
}
void I2CSendByte(unsigned char send)
{
unsigned char m;
for (m = 0; m < 8; m++)
{
bIIC_SDA = (bit)(send & 0x80); // Send each bit, MSB first
BitDly();
bIIC_SCL = 1;
BitDly();
bIIC_SCL = 0;
send = send << 1;
}
bIIC_SDA = 1;
BitDly();
bIIC_SCL = 1;
BitDly();
bIIC_SCL = 0;
BitDly();
}
void I2CSendAddr(unsigned char addr, unsigned char index, unsigned char rd)
{
bIIC_SCL = 1;
BitDly();
bIIC_SDA = 0; // Start
BitDly();
bIIC_SCL = 0;
BitDly();
I2CSendByte(addr + rd); // Send address byte
if (0 == rd) I2CSendByte(index); // Send index byte
}
void I2CSendStop(void)
{
bIIC_SDA = 0;
BitDly();
bIIC_SCL = 1;
BitDly();
bIIC_SDA = 1;
BitDly();
}
unsigned char RTDGetByte(void)
{
bRTD_SCLK = 1;
bRTD_SCLK = 0;
r0 = bRTD_SDO;
bRTD_SCLK = 1;
bRTD_SCLK = 0;
r1 = bRTD_SDO;
bRTD_SCLK = 1;
bRTD_SCLK = 0;
r2 = bRTD_SDO;
bRTD_SCLK = 1;
bRTD_SCLK = 0;
r3 = bRTD_SDO;
bRTD_SCLK = 1;
bRTD_SCLK = 0;
r4 = bRTD_SDO;
bRTD_SCLK = 1;
bRTD_SCLK = 0;
r5 = bRTD_SDO;
bRTD_SCLK = 1;
bRTD_SCLK = 0;
r6 = bRTD_SDO;
bRTD_SCLK = 1;
bRTD_SCLK = 0;
r7 = bRTD_SDO;
bRTD_SCLK = 1;
return Reg;
}
void RTDSendByte(unsigned char send)
{
bRTD_SDI = (bit)(send & 0x01);
bRTD_SCLK = 1;
bRTD_SCLK = 0;
bRTD_SDI = (bit)(send & 0x02);
bRTD_SCLK = 1;
bRTD_SCLK = 0;
bRTD_SDI = (bit)(send & 0x04);
bRTD_SCLK = 1;
bRTD_SCLK = 0;
bRTD_SDI = (bit)(send & 0x08);
bRTD_SCLK = 1;
bRTD_SCLK = 0;
bRTD_SDI = (bit)(send & 0x10);
bRTD_SCLK = 1;
bRTD_SCLK = 0;
bRTD_SDI = (bit)(send & 0x20);
bRTD_SCLK = 1;
bRTD_SCLK = 0;
bRTD_SDI = (bit)(send & 0x40);
bRTD_SCLK = 1;
bRTD_SCLK = 0;
bRTD_SDI = (bit)(send & 0x80);
bRTD_SCLK = 1;
bRTD_SCLK = 0;
bRTD_SDI = 1;
bRTD_SCLK = 1;
}
void RTDSendAddr(unsigned char addr, unsigned char rd, unsigned char inc) // rd : 0 - Write, 1 - Read
{
RTDSendByte(addr);
bRTD_SDI = 1;
bRTD_SCLK = 1;
bRTD_SDI = (bit)(rd & 0x01);
bRTD_SCLK = 1;
bRTD_SCLK = 0;
bRTD_SDI = (bit)(inc & 0x01);
bRTD_SCLK = 1;
bRTD_SCLK = 0;
bRTD_SDI = 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);
bRTD_SCLK = 0;
bRTD_SCLK = 1;
bRTD_SCSB = 1;
}
}
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);
}
bRTD_SCLK = 0;
bRTD_SCLK = 1;
bRTD_SCSB = 1;
}
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);
}
bRTD_SCLK = 0;
bRTD_SCLK = 1;
bRTD_SCSB = 1;
}
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);
bRTD_SCLK = 0;
bRTD_SCLK = 1;
bRTD_SCSB = 1;
}
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;
bRTD_SCLK = 0;
bRTD_SCLK = 1;
bRTD_SCSB = 1;
// Set Write Address
bRTD_SCSB = 0;
RTDSendAddr(addr, 0, 1);
// Write one Byte
RTDSendByte(or);
bRTD_SCLK = 0;
bRTD_SCLK = 1;
bRTD_SCSB = 1;
}
void Load_Font(unsigned char code *array, unsigned char start, unsigned char end)
{
unsigned char n, ucTemp;
do
{
bRTD_SCSB = 0;
RTDSendAddr(OSD_ROW_90, WRITE, Y_INC);
RTDSendByte(0xc0);
#if (SWAP_FONT_RAM)
RTDSendByte(start ^ 0x20);
#else
RTDSendByte(start);
#endif
bRTD_SCLK = 0;
bRTD_SCLK = 1;
bRTD_SCSB = 1;
bRTD_SCSB = 0;
RTDSendAddr(OSD_DATA_92, WRITE, N_INC);
n = 36;
do
{
ucTemp = *array;
bRTD_SDI = (bit)(ucTemp & 0x01);
bRTD_SCLK = 1;
bRTD_SCLK = 0;
bRTD_SDI = (bit)(ucTemp & 0x02);
bRTD_SCLK = 1;
bRTD_SCLK = 0;
bRTD_SDI = (bit)(ucTemp & 0x04);
bRTD_SCLK = 1;
bRTD_SCLK = 0;
bRTD_SDI = (bit)(ucTemp & 0x08);
bRTD_SCLK = 1;
bRTD_SCLK = 0;
bRTD_SDI = (bit)(ucTemp & 0x10);
bRTD_SCLK = 1;
bRTD_SCLK = 0;
bRTD_SDI = (bit)(ucTemp & 0x20);
bRTD_SCLK = 1;
bRTD_SCLK = 0;
bRTD_SDI = (bit)(ucTemp & 0x40);
bRTD_SCLK = 1;
bRTD_SCLK = 0;
bRTD_SDI = (bit)(ucTemp & 0x80);
bRTD_SCLK = 1;
bRTD_SCLK = 0;
bRTD_SDI = 1;
bRTD_SCLK = 1;
array ++;
}
while (--n);
bRTD_SCLK = 0;
bRTD_SCLK = 1;
bRTD_SCSB = 1;
}
while (end != start++);
}
#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
#if (AUDIO_TYPE == AUDIO_62429)
void I2CWrite2(unsigned char send)
{
unsigned char m;
if ( send > 0x57) send = 0x57;
send = (send >> 2 & 0x1f) | (send << 5 & 0x60);
bA_SCL = 0;
BitDly();
bA_SDA = 1;
BitDly();
bA_SCL = 1; //D0
BitDly();
bA_SDA = 0;
BitDly();
bA_SCL = 0;
BitDly();
bA_SDA = 0;
BitDly();
bA_SCL = 1; //D1
BitDly();
bA_SDA = 0;
BitDly();
bA_SCL = 0;
BitDly();
for (m = 0; m < 7; m++)
{
bA_SDA = (bit)(send & 0x01); // Send D2~D8, LSB first
BitDly();
bA_SCL = 1;
BitDly();
bA_SDA = 0;
BitDly();
bA_SCL = 0;
BitDly();
send = send >> 1;
}
bA_SDA = 1;
BitDly();
bA_SCL = 1; //D9
BitDly();
bA_SDA = 0;
BitDly();
bA_SCL = 0;
BitDly();
bA_SDA = 1;
BitDly();
bA_SCL = 1; //D10
BitDly();
bA_SCL = 0;
BitDly();
bA_SDA = 0;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -