📄 demone-6201.c
字号:
#include <stdio.h>
#include <c6x.h>
#include "flash.h"
#define BASE_ADDR 0x01400000
#define I2C_REG 0x1600004
#define SYSRREG 0x160000c
#define VIDEO_ADD BASE_ADDR
#define GBLCTL 0x01800000
#define CE2CTL 0x01800010
#define EVM_CPLD_CTRL 0x0178001c
#define Y_ADD 0x80100000
#define U_ADD 0x80200000
#define V_ADD 0x80280000
unsigned int * y_ptr;
unsigned int * u_ptr;
unsigned int * v_ptr;
unsigned int * cv_ptr;
unsigned int * video_ptr;
unsigned int * lut;
/*******************************************************************************
* 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,0xe9,0x0d,
0xb8,0x01,0x80,0x47,0x40,0x00,0x01,0x2a,
0x00,0x0c,0x38,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,
0x00,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;
/*******************************************************************************
* FUNCTION : main
*******************************************************************************/
int main()
{
// unsigned int io_port_values;//,user_dip_settings;
int i,j,ii,y_dat,u_dat,v_dat,temp[4],t;
/* DSP initialization */
CSR=0x100; /* Disable all interrupts */
IER=1; /* Disable all interrupts except NMI */
ICR=0xffff; /* Clear all pending interrupts */
//*(unsigned volatile int *)EMIF_GCR = 0x3300; /* EMIF global control */
*(unsigned volatile int *)EMIF_CE1 = CE1_32; /* EMIF CE1 control, 32bit */
//*(unsigned volatile int *)EMIF_SDCTRL = 0x07126000; /* EMIF SDRAM control */
//*(unsigned volatile int *)EMIF_CE0 = 0x30; /* EMIF CE0 control */
//*(unsigned volatile int *)EMIF_SDRP = 0x61a; /* EMIF SDRM refresh period */
//*(unsigned volatile int *)EMIF_SDEXT= 0x54529; /* EMIF SDRM extension */
/* Read space */
/* *(unsigned volatile int *)EMIF_CE2 = 0x00904323; */ /* EMIF CE2 control */
//*(unsigned volatile int *)EMIF_CE2 = CE2_32_max;
/* Write space */
//*(unsigned volatile int *)EMIF_CE3 = CE3_32; /* EMIF CE3 control */
*(unsigned int *)GBLCTL=0x3378;
*(unsigned int *)CE2CTL=0xffff3f23;
*(unsigned int *)EVM_CPLD_CTRL=0x2;
delay_msec(ms_period/2);
for(i=0;i<0xff;i++){
//for(;;){
start_i2c();
stop_i2c();
delay_msec(5);
}
//for(;;)
Init_7190();
for(j=0;j<0x5;j++)
for(ii=0;ii<0x5;ii++);
Init_7111();
while(1){
video_ptr = (unsigned int *)VIDEO_ADD;
for(i=0;i<0x7fffff;i++);
*(unsigned volatile int *)SYSRREG = 0x9;
for(i=0;i<0x7fffff;i++);
*(unsigned volatile int *)SYSRREG = 0xc;
for(i=0;i<0x7fffff;i++);
*(unsigned volatile int *)SYSRREG = 0xa;
cv_ptr = (unsigned int *)VIDEO_ADD;
y_ptr = (unsigned int *)Y_ADD;
u_ptr = (unsigned int *)U_ADD;
v_ptr = (unsigned int *)V_ADD;
for(i=0;i<576;i++){
cv_ptr += 2048;
for(j=0;j<720/4;j++){
for(ii=0;ii<4;ii++)
temp[ii] = *(cv_ptr + j*4 + ii);
u_dat = temp[3] & 0xff;
u_dat <<= 8;
u_dat |= temp[2] & 0xff;
u_dat <<= 8;
u_dat |= temp[1] & 0xff;
u_dat <<= 8;
u_dat |= temp[0] & 0xff;
*u_ptr++ = u_dat;
t = temp[3] & 0xff0000;
t >>= 16;
v_dat = t;
v_dat <<= 8;
t = temp[2] & 0xff0000;
t >>= 16;
v_dat |= t;
v_dat <<= 8;
t = temp[1] & 0xff0000;
t >>= 16;
v_dat |= t;
v_dat <<= 8;
t = temp[0] & 0xff0000;
t >>= 16;
v_dat |= t;
*v_ptr++ = v_dat;
t = temp[1] & 0xff000000;
t >>= 24;
y_dat = t;
y_dat <<= 8;
t = temp[1] & 0xff00;
t >>= 8;
y_dat |= t;
y_dat <<= 8;
t = temp[0] & 0xff000000;
t >>= 24;
y_dat |= t;
y_dat <<= 8;
t = temp[0] & 0xff00;
t >>= 8;
y_dat |= t;
*y_ptr++ = y_dat;
t = temp[3] & 0xff000000;
t >>= 24;
y_dat = t;
y_dat <<= 8;
t = temp[3] & 0xff00;
t >>= 8;
y_dat |= t;
y_dat <<= 8;
t = temp[2] & 0xff000000;
t >>= 24;
y_dat |= t;
y_dat <<= 8;
t = temp[2] & 0xff00;
t >>= 8;
y_dat |= t;
*y_ptr++ = y_dat;
}
}
video_ptr = (unsigned int *)VIDEO_ADD;
for(i=0;i<576;i++)
for(j=0;j<1024;j++){
ii = *video_ptr;
// ii &= 0xff00ff00;
// ii |= 0x00800080;
ii=0x10801080;
*video_ptr = ii;
video_ptr++;
}
*(unsigned volatile int *)SYSRREG = 0xc;
for(i=0;i<0x7fffff;i++);
for(i=0;i<0x7fffff;i++);
*(unsigned volatile int *)SYSRREG = 0xa;
video_ptr = (unsigned int *)VIDEO_ADD;
for(i=0;i<576;i++)
for(j=0;j<1024;j++){
ii = *video_ptr;
t = ii >>24;
t &= 0x0ff;
if ((t > 0x20)&&(t < 0xc0)){
ii &= 0x00ffffff;
ii |= 0x1000000;
}
t = ii >> 8;
t &= 0x0ff;
if ((t > 0x20)&&(t < 0xc0)){
ii &= 0xffff00ff;
ii |= 0x0000100;
}
*video_ptr = ii;
video_ptr++;
}
*(unsigned volatile int *)SYSRREG = 0xc;
for(i=0;i<0x7fffff;i++);
for(i=0;i<0x7fffff;i++);
*(unsigned volatile int *)SYSRREG = 0xa;
video_ptr = (unsigned int *)VIDEO_ADD;
for(i=0;i<576;i++)
for(j=0;j<1024;j++){
ii = *video_ptr;
ii &= 0x80ff80ff;
*video_ptr = ii;
video_ptr++;
}
*(unsigned volatile int *)SYSRREG = 0xc;
for(i=0;i<0x7fffff;i++);
for(i=0;i<0x7fffff;i++);
video_ptr = (unsigned int *)VIDEO_ADD;
cv_ptr = (unsigned int *)Y_ADD;
for(i=0;i<576;i++)
for(j=0;j<1024;j++){
temp[0] = *video_ptr++;
temp[1] = *video_ptr++;
t = temp[1] & 0xff000000;
t >>= 24;
y_dat = t;
y_dat <<= 8;
t = temp[1] & 0xff00;
t >>= 8;
y_dat |= t;
y_dat <<= 8;
t = temp[0] & 0xff000000;
t >>= 24;
y_dat |= t;
y_dat <<= 8;
t = temp[0] & 0xff00;
t >>= 8;
y_dat |= t;
*cv_ptr++ = y_dat;
}
}
/* i = 0xf;//i = 0xf cpld write video data,i = 0x7 dsk read video data. bit3
for(ii=0;ii<0x10;ii++)
*(unsigned volatile int *)I2C_REG = i;
while(1){
for(ii=0;ii<8;ii++)
if (i==15)
*(unsigned volatile int *)I2C_REG = i;
else{
j = *(unsigned volatile int *)SYSRREG;
if((j&0x1)==1)
for(ii=0;ii<0x10;ii++)
*(unsigned volatile int *)I2C_REG = i;
}
}
*/
}
/*******************************************************************************
* FUNCTION : led_blink
*
* ARGUMENTS :
* INT count <-- Number of times to blink the LEDs
* INT ms_period <-- Time the LED(s) is(are) active (illuminated)
*
* DESCRIPTION :
* Toggles the user LEDs for a given count and period (in milliseconds).
*
* OUTPUTS :
* VOID
*
*******************************************************************************/
void led_blink(int count, int ms_period)
{
int i;
for (i=0;i<count;i++)
{
*(unsigned volatile int *)IO_PORT = 0x02000000; /* Turn on all user LEDs */
delay_msec(ms_period/2);
*(unsigned volatile int *)IO_PORT = 0x05000000; /* Turn off all user LEDs*/
delay_msec(ms_period/2);
}
*(unsigned volatile int *)IO_PORT = 0x7000000; /* Turn off all user LEDs */
}
/*******************************************************************************
* FUNCTION : delay_msec
*
* ARGUMENTS :
* SHORT msec <-- Period to delay in milliseconds
*
* DESCRIPTION :
*
*
* OUTPUTS :
* VOID
*
*******************************************************************************/
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);*/
int i;
for(i=0;i<0x1000;i++);
}
/*******************************************************************************
* 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 *)TIMER0_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 *)TIMER0_CTRL &= 0xff3f;
/* Use CPU CLK/4 */
*(unsigned volatile int *)TIMER0_CTRL |= 0x200;
/* Set for 32 bit counter */
*(unsigned volatile int *)TIMER0_PRD |= 0xffffffff;
/* Start the timer */
*(unsigned volatile int *)TIMER0_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 *)TIMER0_CTRL &= 0xff3f;
/* Use CPU CLK/4 */
*(unsigned volatile int *)TIMER0_CTRL |= 0x200;
/* Set for a short period */
*(unsigned volatile int *)TIMER0_PRD = 0x200;
/* Start the timer, enable timer0 int */
*(unsigned volatile int *)TIMER0_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);
}
/* END OF FILE */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -