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

📄 tool.c

📁 基于DSP的类MP4播放器使用C语言在DSP++平台上编码
💻 C
字号:
#define EBIU_AMGCTL		0xFFC00A00  // 16bit , EBIU Asynchronous Memory Global Control Register
#define EBIU_AMBCTL0	0xFFC00A04  // 32bit , EBIU Asynchronous Memory Bank Control Register 0
#define EBIU_AMBCTL1	0xFFC00A08  //32bit ,  EBIU Asynchronous Memory Bank Control Register 1
#define Flash_PortA_Data_Out	0x20270004  // 8bit 
#define Flash_PortA_Direction	0x20270006  // 8bit 
#define Flash_PortA_Data_In		0x20270000  // 8bit 

void ADV7171_reset( )
{	
	unsigned short * p_Ushort;
	unsigned int * p_U_int;
	unsigned char * p_U_char;
	int loop;
	
	p_U_int = EBIU_AMBCTL0;
	*p_U_int =0x7bb07bb0; 	// configure EBIU
	p_U_int = EBIU_AMBCTL1;
	*p_U_int =0x7bb07bb0; 	// configure EBIU
	p_Ushort = EBIU_AMGCTL;
	*p_Ushort = 0x000f; 	// configure EBIU
	p_U_char = Flash_PortA_Data_Out;
	*p_U_char = 0;
//portA4=0,portA5=0 for BF533 PPIclk select,portA2=0 for ADV7171 reset start
	p_U_char = Flash_PortA_Direction;
	for(loop=0;loop<0x1000;loop++)//循环约2ms
	*p_U_char = 0x34;
// 打开ADV7171_restet和PPICLK_SELECT
	p_U_char = Flash_PortA_Data_Out;
	*p_U_char = 0x04;  
// portA2=1 PPICLK_ONBOARD_SELECT=0 PPICLK_AD7183_SELECTfor ADV7171 reset end
}	

#define DMA0_START_ADDR	0xffc00c04	//32bit
#define DMA0_CONFIG	    0xffc00c08 	//16bit
#define DMA0_X_COUNT    0xffc00c10	//16bit
#define DMA0_Y_COUNT    0xffc00c18	//16bit
#define DMA0_X_MODIFY   0xffc00c14	//16bit
#define DMA0_Y_MODIFY   0xffc00c1c	//16bit

void DMA_init(unsigned char * buffer_start_addr)
{
	unsigned short * p_CONFIG;
	unsigned short * p_X_COUNT;
	unsigned short * p_Y_COUNT;
	unsigned short * p_X_MODIFY;
	unsigned short * p_Y_MODIFY;
	unsigned int   * p_START_ADDR;

	p_CONFIG = DMA0_CONFIG;
	*p_CONFIG = 0;
	p_X_COUNT = DMA0_X_COUNT;
	*p_X_COUNT = 1716;
	p_Y_COUNT = DMA0_Y_COUNT;
	*p_Y_COUNT = 525;
	p_X_MODIFY = DMA0_X_MODIFY;
	*p_X_MODIFY = 1;
	p_Y_MODIFY = DMA0_Y_MODIFY;
	*p_Y_MODIFY = 1;
	p_START_ADDR= DMA0_START_ADDR;
	*p_START_ADDR= buffer_start_addr;
//	printf("config=%0x,xcount=%0x,ycount=%0x,xmod=%0x,ymod=%0x",*p_CONFIG,*p_X_COUNT,*p_Y_COUNT,*p_X_MODIFY,*p_Y_MODIFY);
}

#define PPI_control   0xffc01000	//16bit

void PPI_init( )
{
unsigned short *p_PPI;
p_PPI=PPI_control;
*p_PPI=0;
}

void DMA_enable( )
{
unsigned short *p_dma_en;
	p_dma_en = DMA0_CONFIG;
	*p_dma_en = 0X0011;		//stop模式
}

void PPI_enable( ) 
{
unsigned short *p_PPI_en;
	p_PPI_en = PPI_control;
	*p_PPI_en = 3;
}  

#define EBIU_SDSTAT		0xFFC00A1C  // SDRAM Control Status Register, 16bit
#define EBIU_SDRRC		0xFFC00A18  // SDRAM Refresh rate, 16bit
#define EBIU_SDBCTL		0xFFC00A14  // SDRAM Bank Control, 16bit
#define EBIU_SDGCTL		0xFFC00A10  // SDRAM Global Control,32bit

void Init_SDRAM()
{
	unsigned short *pEBIU_SDSTAT;
	unsigned short *pEBIU_SDRRC;
	unsigned short *pEBIU_SDBCTL;
	unsigned int 	*pEBIU_SDGCTL;
	
	pEBIU_SDSTAT = 0xFFC00A1C;
	pEBIU_SDRRC = 0xFFC00A18;
	pEBIU_SDBCTL = 0xFFC00A14;
	pEBIU_SDGCTL = 0xFFC00A10;

	if ((*pEBIU_SDSTAT & 0x0008) != 0x0008)  // If SDRAM already powered up
		return;							    // SDRAM already powered up

	*pEBIU_SDRRC  = 0x03E0;	//SDRAM refresh rate with SCLK=128.25MHz 
	*pEBIU_SDBCTL = 0x0013;	//column address width 9bit, SDRAM size 32MB,enabled	
	*pEBIU_SDGCTL = 0x0091998D;
}

#define PPL_CTL	0xFFC00000	//16bit data
#define PPL_DIV	0xFFC00004	//16bit data

void DSP_PLL_CClk_SClk_Init()
{
	unsigned short *ctl,*div;
	ctl=PPL_CTL;
	*ctl=0x2600;	//VCO=513MHZ
	div=PPL_DIV;
	*div=0x0004;	//CCLK=513MHZ, SCLK=128.25NHZ
}



#define FIO_DIR		0XFFC00730	//16bit
#define FIO_INEN	0XFFC00740	//16bit
#define FIO_FLAG_D	0XFFC00700	//16bit

short button_manage(int sw2)
{
short  sw,swup,swdown;
int sw1,sw3,sw4;	//sw1 and sw2 去抖动
unsigned short *p_fio_dir,*p_fio_inen,*p_fio_flag_d;
 	p_fio_dir = FIO_DIR;
 	p_fio_inen = FIO_INEN;
 	p_fio_flag_d = FIO_FLAG_D;

 	*p_fio_dir =0;	//open sw4 and sw5
 	*p_fio_inen = 0x0100;	// enable sw4 and sw5

 //	swdown=(*p_fio_flag_d & 0x0100)>>8;
 	sw1=(*p_fio_flag_d & 0x0100)>>8;	//做防抖
	swdown=sw1 &&sw2;
	sw2=!sw1;
	if(swdown==1)	// pagedown
	 {
 	  if (sw<5)
 	  	sw+=1;
 	  	else sw=0;
 	 }
	else if(swup==1)	// pageup
  	 {
 		if(sw>0)
 		sw-=1;
 		else sw=4;
 	 }

	else;
	return(sw);
}

#define Flash_PortB_Data_Out	0x20270005  // 8bit 
#define Flash_PortB_Direction	0x20270007  // 8bit 
//#define Flash_PortB_Data_In	0x20270001  // 8bit 

int change_p_656_display(short button,unsigned char *addr_pic0,unsigned char *addr_pic1,unsigned char *addr_pic2,unsigned char *addr_pic3,unsigned char *addr_pic4)
{
unsigned char *addr;
unsigned char *LED_EN,*LED_DATA;
	LED_EN = Flash_PortB_Direction;
	LED_DATA = Flash_PortB_Data_Out;
	*LED_EN =0x1F;	//打开五个LED显示灯
	*LED_DATA = 0x00;	//LED灯熄灭
	
	switch(button)	//切换图像首地址和打开LED指示灯
	{
		case 1	: addr=addr_pic1;	*LED_DATA = 0x02;break;
		case 2	: addr=addr_pic2;	*LED_DATA = 0x04;break;
		case 3	: addr=addr_pic3;	*LED_DATA = 0x08;break;
		case 4	: addr=addr_pic4;	*LED_DATA = 0x10;break;
		default	: addr=addr_pic0;	*LED_DATA = 0x01;break;
	}
	return(addr);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -