📄 arm9_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 + -