📄 initsys.c
字号:
#include "initSYS.h"
#define DMA1_DEST_CTRL *(int *)0x1840058
#define DMA1_PRIMARY_CTRL *(int *)0x1840040
#define DMA1_SECONDDARY_CTRL *(int *)0x1840048
#define DMA1_SRC_CTRL *(int *)0x1840050
#define DMA1_TRANS_CTRL *(int *)0x1840060
#define MTVFPGA_PGM 0xa030010c
#define FPAG_DATA 0xa0300114
#define SYS_STATE 0xa0300020
#define I2C_REG 0xa0300004
#define SYSRREG 0xA020000c
#define UART_BASE_ADDR 0xa0300000
#define OFFSET 4
#define RBR 0xa0300000
#define THR 0xa0300000
#define IIER 0xa0300004
#define IIR 0xa0300008
#define FCR 0xa0300008
#define LCR 0xa030000c
#define MCR 0xa0300010
#define LSR 0xa0300014
#define MSR 0xa0300018
#define SCR 0xa030001c
#define DLL 0xa0300000
#define DLM 0xa0300004
#define VIDEO_READBUFFER 0xa01a0000
#define VIDEO_WRITEBUFFER 0xa01c0000
#define MTV_CSR 0xa01ffffc
#define HOST_WRITEADD_SET 0xa01e0600
#define HOST_READADD_SET 0xa01e0610
#define HOST_WRITEADD_CLR 0xa01e0700
#define HOST_READADD_CLR 0xa01e0710
#define TST_SRC 0x80001000
#define DMA15_OPT 0x01A00168 //0X23000000
#define DMA15_SRC 0x01A0016C //0X80001000
#define DMA15_CNT 0x01A00170 //8
#define DMA15_DST 0x01A00174 //0XA01C0000
#define DMA15_IDX 0x01A00178 //0
#define DMA15_LNK 0x01A0017C //0
/* bit 30 - 18 sdram control word
bit 17 - 15 video output high address
bit 14 - 12 video input high address
bit 11 - 9 host output high address
bit 8 - 6 host input high address
bit 5 host output fifo clear
bit 4 host input fifo clear
bit 3 sdram reset
bit 2 video interlace '1' is interlace
bit 1 video input enable
bit 0 vidoe output bypass
*/
/*******************************************************************************
* Function prototypes
*******************************************************************************/
void led_blink(int count, int ms_period);
void delay_msec(short msec);
int timer0_read();
void timer0_start();
void timer0_init();
unsigned int get_ioport(void);
unsigned int count;
int ms_period = 1;
unsigned int get_ioport(void);
#define COLORBAR 0xc7;
#define WORKCOLOR 0x47;
/*******************************************************************************
* IIC Function prototypes
*******************************************************************************/
void start_i2c(void);
void stop_i2c(void);
void ack_i2c(void);
void write_i2c(unsigned char data);
void Init_7111(void);
void Init_7190(void);
unsigned char val713_1[25] = {
0xf8,0xc0,0x33,0x00,0x00,0xd8,0xff,
0xb8,0x01,0x80,0x47,0x40,0x00,0x01,0x2a,
0x00,0x0c,0xc8,0x00,0x00};
unsigned char val713_2[4] = {
0x00,0x00,0x00,0x00};
unsigned char val713_3[0x21] = {
0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0x03,0x54,0x07,0x83,0xff,0xff,0x00,0x00};
unsigned char val76[0x36] = {
0x11,0x20,0x62,0x00,0x00,0x00,0x00,0x00,
0x04,0x00,0x08,0x00,0xcb,0x8a,0x09,0x2a,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x44,0x20,0x00,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0x70};
/*******************************************************************************
* Video Function prototypes
*******************************************************************************/
void WriteAPIC(int pixel);
unsigned int chip_id;
unsigned int temp;
void initSYS( void )
{
int i,j,ii;
delay_msec(ms_period/2);
for(i=0;i<0xff;i++){
start_i2c();
stop_i2c();
delay_msec(5);
}
Init_7190();
for(j=0;j<0x5;j++)
for(ii=0;ii<0x5;ii++);
Init_7111();
}
void delay_msec(short msec)
{
/* Assume 150 MHz CPU, timer peirod = 4/150 MHz */
/* int timer_limit = (msec*9375)<<2; */
int timer_limit = (msec*9375);
int time_start;
/*
timer0_start();
time_start = timer0_read();
while ((timer0_read()-time_start) < timer_limit);
*/
Timer0Start();
time_start = Timer0Read();
while ((Timer0Read()-time_start) < timer_limit);
}
/*******************************************************************************
* FUNCTION : timer0_read
*
* ARGUMENTS :
* VOID
*
* DESCRIPTION :
* Read and return the count in timer 0.
*
* OUTPUTS :
* INT <-- Returns the count in timer 0
*
*******************************************************************************/
/*
int timer0_read()
{
int i;
i = *(unsigned volatile int *)TIMER1_COUNT;
return i;
}
*/
/*******************************************************************************
* FUNCTION : timer0_start
*
* ARGUMENTS :
* VOID
*
* DESCRIPTION :
* Start timer 0 after initializing it for 32-bit count and no interrupt.
*
* OUTPUTS :
* VOID
*
*******************************************************************************/
/*
void timer0_start()
{
// Hold the timer
*(unsigned volatile int *)TIMER1_CTRL &= 0xff3f;
// Use CPU CLK/4
*(unsigned volatile int *)TIMER1_CTRL |= 0x200;
// Set for 32 bit counter
*(unsigned volatile int *)TIMER1_PRD |= 0xffffffff;
// Start the timer
*(unsigned volatile int *)TIMER1_CTRL |= 0xC0;
}
*/
/*******************************************************************************
* FUNCTION : timer0_init
*
* ARGUMENTS :
* VOID
*
* DESCRIPTION :
* Start timer 0 after initializing it for a short period (~13.7 micro seconds)
* with interrupt.
*
* OUTPUTS :
* VOID
*
*******************************************************************************/
/*
void timer0_init()
{
// Hold the timer
*(unsigned volatile int *)TIMER1_CTRL &= 0xff3f;
// Use CPU CLK/4
*(unsigned volatile int *)TIMER1_CTRL |= 0x200;
// Set for a short period
*(unsigned volatile int *)TIMER1_PRD = 0x200;
// Start the timer, enable timer0 int
*(unsigned volatile int *)TIMER1_CTRL |= 0x3C0;
}
*/
unsigned int get_ioport(void)
{
return(*(unsigned volatile int *)IO_PORT);
}
void start_i2c(void)
{
*(unsigned volatile int *)I2C_REG = 0x025; /* "00100101":sda,scl = '1' */
delay_msec(1);
*(unsigned volatile int *)I2C_REG = 0x024; /* "00100100":sda= '0',scl = '1' */
delay_msec(1);
}
void stop_i2c(void)
{
*(unsigned volatile int *)I2C_REG = 0x024; /* "00100101":sda = '0',scl = '1' */
delay_msec(1);
*(unsigned volatile int *)I2C_REG = 0x025; /* "00100101":sda,scl = '1' */
delay_msec(1);
}
void ack_i2c(void)
{
*(unsigned volatile int *)I2C_REG = 0x020; /* "00100101":sda='z',scl = '0' */
*(unsigned volatile int *)I2C_REG = 0x022; /* "00100101":sda='z',scl = '0' */
delay_msec(1);
*(unsigned volatile int *)I2C_REG = 0x026; /* "00100101":sda='z',scl = '1' */
delay_msec(1);
*(unsigned volatile int *)I2C_REG = 0x022; /* "00100101":sda='z',scl = '0' */
delay_msec(1);
*(unsigned volatile int *)I2C_REG = 0x021; /* "00100101":sda='1',scl = '0' */
delay_msec(1);
}
void write_i2c(unsigned char data)
{
unsigned char BitCounter = 8;
unsigned char temp;
unsigned int reg_val;
reg_val = 0x020;
*(unsigned volatile int *)I2C_REG = 0x20; /*SCL 置低 sda 置低*/
delay_msec(1); /*延时*/
do{
temp = data;
reg_val &= 0x0fffffffb;
*(unsigned volatile int *)I2C_REG = reg_val; /*SCL 置低*/
delay_msec(1); /*延时*/
if((temp&0x80)==0x80)
reg_val |= 0x01; /*如果最高位是1*/
else
reg_val &= 0x0fffffe;
*(unsigned volatile int *)I2C_REG = reg_val; /*设置SDA*/
delay_msec(1); /*延时*/
reg_val |= 0x004;
*(unsigned volatile int *)I2C_REG = reg_val; /*SCL 置高*/
delay_msec(1); /*延时*/
temp = data<<1;
data = temp;
BitCounter --;
}while(BitCounter);
reg_val &= 0x0fffffffb;
*(unsigned volatile int *)I2C_REG = reg_val; /*SCL 置低*/
delay_msec(3); /*延时*/
}
void Init_7111(void)
{
int i;
start_i2c();
write_i2c(0x4a);
ack_i2c();
write_i2c(0x01);
ack_i2c();
for(i=0;i<0x14;i++){
write_i2c(val713_1[i]);
ack_i2c();
}
stop_i2c();
delay_msec(1);
start_i2c();
write_i2c(0x4a);
ack_i2c();
write_i2c(0x15);
ack_i2c();
for(i=0;i<4;i++){
write_i2c(val713_2[i]);
ack_i2c();
}
stop_i2c();
delay_msec(1);
start_i2c();
write_i2c(0x4a);
ack_i2c();
write_i2c(0x40);
ack_i2c();
for(i=0;i<0x20;i++){
write_i2c(val713_3[i]);
ack_i2c();
}
stop_i2c();
delay_msec(1);
}
void Init_7190(void)
{
int i;
start_i2c();
write_i2c(0xd6);
ack_i2c();
write_i2c(0x00);
ack_i2c();
for(i=0x0;i<0x36;i++){
write_i2c(val76[i]);
ack_i2c();
}
stop_i2c();
delay_msec(5);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -