⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 initsys.c

📁 TMS320c6000系列DSP做图像处理的应用举例
💻 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 + -