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

📄 arm9_hpi.c

📁 DSP DM642的HPI接口应用
💻 C
字号:
/***************************************************//****************arm9与雷达处理部分通信模块BOB=0*********//***************************************************///*********接口部分数据定义************////待定//***************************************//#include "ARM9_HPI.h"//针对相应CPU的字节读写函数,此处用宏定义实现//Uint Addr_Read(Uint addr);//void Addr_Write(Uint addr,Uint d);//******************************底层接口函数定义***************************////写控制HPICvoid HPIC_Write(INT32U w){   	INT32U t1,t2;	t1 = (0xffff0000 & w) >>16 ;	t2 = (0x0000ffff & w);	Addr_Write(HPI_ADDR_HPIC_LW,t1);	Addr_Write(HPI_ADDR_HPIC_HW,t2);   /*  hpic, write */}//读控制HPICINT32U HPIC_Read(void){	INT32U t1=0,t2=0;                                             																																																					t1=Addr_Read(HPI_ADDR_HPIC_LR);                                     																																																					t2=Addr_Read(HPI_ADDR_HPIC_HR);      /*  readback of HPIC  */       																																																					return( (t1<<16) | t2);                                      																																																				}                         //读数据,地址不变模式INT32U HPID_Read(void){   	INT32U t1=0,t2=0;	t1=Addr_Read(HPI_ADDR_HPID_LR);	t2=Addr_Read(HPI_ADDR_HPID_HR);      /*  readback of HPID, HPIA auto ++  */	return( (t1<<16) | t2);}//写数据,地址不变模式void HPID_Write(INT32U w)    /* write HPID, HPIA auto ++  */{  	INT32U t1,t2;	t1 = (0xffff0000 & w) >>16 ;	t2 = (0x0000ffff & w);	Addr_Write(HPI_ADDR_HPID_LW,t1);	Addr_Write(HPI_ADDR_HPID_HW,t2);}//读数据,地址自动增加模式INT32U HPID_Read_Auto(void){   	INT32U t1=0,t2=0;	t1=Addr_Read(HPI_ADDR_HPID_ALR);	t2=Addr_Read(HPI_ADDR_HPID_AHR);      /*  readback of HPID, HPIA auto ++  */	return( (t1<<16) | t2);}//写数据,地址自动增加模式void HPID_Write_Auto(INT32U w)    /* write HPID, HPIA auto ++  */{  	INT32U t1,t2;	t1 = (0xffff0000 & w) >>16 ;	t2 = (0x0000ffff & w);	Addr_Write(HPI_ADDR_HPID_ALW,t1);	Addr_Write(HPI_ADDR_HPID_AHW,t2);}//读地址INT32U HPIA_Read(void){   	INT32U t1=0,t2=0;	t1=Addr_Read(HPI_ADDR_HPIA_LR);	t2=Addr_Read(HPI_ADDR_HPIA_HR);      /*  readback of HPIA  */	return( (t1<<16) | t2);}//写入地址void HPIA_Write(INT32U w){  	INT32U t1,t2;	t1 = (0xffff0000 & w) >>16 ;	t2 = (0x0000ffff & w);	Addr_Write(HPI_ADDR_HPIA_LW,t1);	Addr_Write(HPI_ADDR_HPIA_HW,t2);}//产生DSP端的中断void Set_DSPint(){	INT32U k;	k=HPIC_Read()|(1<<DSPINT)|(1<<DSPINT_H);	HPIC_Write(k);}//收到发送的中断后清除标志void Clear_HPIint(){	INT32U k;	k=HPIC_Read()|(1<<HINT)|(1<<HINT_H);	HPIC_Write(k);}//******************************上层接口函数定义******************************////初始化HPIC,设置之后不再改变,b=0/BOB=0;b=1/BOB=1;void Init_HPIC(INT32U bob){	INT32U k,j;	k=0x00040004|(bob<<BOB_H)|bob; //清除HINT,并且设置BOB位。	HPIC_Write(k);	/*	j=HPIC_Read();		k=0x00040004|(1<<BOB_H)|1; //清除HINT,并且设置BOB位。		*(volatile unsigned short *)0x30000000 = 0x05;	*(volatile unsigned short *)0x30000002 = 0x05;		//HPIC_Write(k);	j=HPIC_Read();			HPIA_Write(0x00002000);	j=HPIA_Read();	HPIA_Write(0x12345678);	j=HPIA_Read();		k=0x00040004; //清除HINT,并且设置BOB位。	HPIC_Write(k);		j=HPIC_Read();*/	}//向DSP写入数据void Write_DSP_Data(INT32U addr,INT32U *p ,INT32U len){	INT32U i;	HPIA_Write(addr);      	for(i=0;i<len;i++)		 /*  when write data, should first hpia++  */	{		HPID_Write_Auto(*p++);    	   	asm("nop"); 		asm("nop");    		asm("nop");  		asm("nop");    		asm("nop");   		asm("nop"); 		asm("nop");    		asm("nop");  		asm("nop");    		asm("nop");   	}	Set_DSPint();		//设置DSP端中断}//向DSP写入数据,地址数据方式void Write_DSP_Data_AD(INT32U addr,INT32U *p ,INT32U len){	INT32U i;	for(i=0;i<len;i++)		 /*  when write data, should first hpia++  */	{		HPIA_Write(addr); 		HPID_Write(*p++);  		addr=addr+4;   	} 	Set_DSPint();		//设置DSP端中断}//读取HPI数据void  Read_DSP_Data(INT32U addr,INT32U *p ,INT32U len){	INT32U i;	Clear_HPIint();		//清除中断标志	HPIA_Write(addr);   	for(i=0;i<len;i++)		 /*  when write data, should first hpia++  */	   *p++=HPID_Read_Auto();     }//读取HPI数据,地址数据方式void  Read_DSP_Data_AD(INT32U addr,INT32U *p ,INT32U len){	INT32U i,j;	Clear_HPIint();		//清除中断标志	for(i=0;i<len;i++)		 /*  when write data, should first hpia++  */	{	HPIA_Write(addr);			 	    /* */		asm("nop");    		asm("nop"); 		asm("nop");    		asm("nop");  		asm("nop");    		asm("nop");  		 	   *p++=HPID_Read();   	   addr=addr+4;   	}}		

⌨️ 快捷键说明

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