📄 test_hpi.c
字号:
/*this file realize simple write and read data via hpi to verify hardwareauthor:yudayong <sinbadak@163.com>date :2006.03.25*/#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <stdlib.h>/******address define*************//****************************/#define HPIC_ADDR 0X00#define HPIA_ADDR 0X02 #define HPID_INC 0X04#define HPID_FIX 0X06/****************************/#define HRnW_nW 0X00#define HRnW_R 0X08/****************************/#define HHWL_H 0X10#define HHWL_L 0X00/****************************/#define HWOB 0#define DELAYER 0 int fd1; int i,ret; //1st byte is offset address, 2nd byte is data low 8 bit, 3rd byte is data high 8 bit char write_buffer[3]={0,0,0}; char read_buffer[3]= {0,0,0}; void open_hpi(void){ fd1=open("/dev/hpi",O_RDWR); if (fd1<0) {printf("Error open HPI_DM642\n");sleep(2);} else{printf("Open HPI_DM642 success!\n");}}void send_low_16(unsigned long value){write_buffer[1]=(char)value&0xff;write_buffer[2]=(char)((value&0xff00)>>8);write(fd1,&write_buffer,sizeof(write_buffer)); //usleep(DELAYER);}void send_high_16(unsigned long value){write_buffer[1]=(char)((value&0xff0000)>>16);write_buffer[2]=(char)((value&0xff000000)>>24);write(fd1,&write_buffer,sizeof(write_buffer)); //usleep(DELAYER);}void set_hpic_reg(unsigned long value) {write_buffer[0]=HPIC_ADDR + HRnW_nW + HHWL_L ;send_high_16(value); //usleep(DELAYER);write_buffer[0]=HPIC_ADDR + HRnW_nW + HHWL_H ;send_low_16(value); //usleep(DELAYER);} unsigned long get_hpic_reg(void) {unsigned long ret;if (HWOB==0){read_buffer[0]=HPIC_ADDR + HRnW_R + HHWL_L ;read(fd1,&read_buffer,sizeof(read_buffer));ret=read_buffer[1]+(read_buffer[2]<<8); //usleep(DELAYER);read_buffer[0]=HPIC_ADDR + HRnW_R + HHWL_H ;read(fd1,&read_buffer,sizeof(read_buffer));ret=(ret<<16)+read_buffer[1]+(read_buffer[2]<<8); //usleep(DELAYER);}return ret;} void set_hpia_reg(unsigned long value){ if (HWOB==0) { write_buffer[0]=HPIA_ADDR + HRnW_nW + HHWL_L ; send_high_16(value); //usleep(DELAYER); write_buffer[0]=HPIA_ADDR + HRnW_nW + HHWL_H ; send_low_16(value); //usleep(DELAYER); }}unsigned long get_hpia_reg(void){unsigned long ret;if (HWOB==0){read_buffer[0]=HPIA_ADDR + HRnW_R + HHWL_L;read(fd1,&read_buffer,sizeof(read_buffer)); //usleep(DELAYER);ret=read_buffer[1]+(read_buffer[2]<<8);read_buffer[0]=HPIA_ADDR + HRnW_R + HHWL_H ;read(fd1,&read_buffer,sizeof(read_buffer)); //usleep(DELAYER);ret=(ret<<16)+read_buffer[1]+(read_buffer[2]<<8); }return ret;}set_hpid_reg(unsigned long value){unsigned long temp; if (HWOB==0) { write_buffer[0]=HPID_FIX + HRnW_nW + HHWL_L ; send_high_16(value); //usleep(DELAYER); write_buffer[0]=HPID_FIX + HRnW_nW + HHWL_H ; send_low_16(value); //usleep(DELAYER); }}unsigned long get_hpid_reg(void){unsigned long ret;if (HWOB==0){read_buffer[0]=HPID_FIX + HRnW_R + HHWL_L ;read(fd1,&read_buffer,sizeof(read_buffer));read(fd1,&read_buffer,sizeof(read_buffer)); //usleep(DELAYER);//read(fd1,&read_buffer,sizeof(read_buffer));ret=read_buffer[1]+(read_buffer[2]<<8);printf("high: 0:%x ,1: %x ,2: %x\n",read_buffer[0],read_buffer[1],read_buffer[2]);read_buffer[0]=HPID_FIX + HRnW_R + HHWL_H ;read(fd1,&read_buffer,sizeof(read_buffer));ret=(ret<<16)+read_buffer[1]+(read_buffer[2]<<8); //usleep(DELAYER); }return ret;}int main(){unsigned long temp, temp1=0;int i; open_hpi(); set_hpic_reg((HWOB<<16)+HWOB); printf("write comMAND value is 0x%x\n",(HWOB<<16)+HWOB); sleep(2); temp=get_hpic_reg(); printf("read com value is 0x%x\n",temp); sleep(2);for(i=0;i<32;i=i+4){ set_hpia_reg(0x23400+i); temp=get_hpia_reg(); printf("read addr value is 0x%x\n",temp); set_hpid_reg(0x11234500+i+1); printf("set data value is 0x%x\n",0x11234500+i+1);}//sleep(12); printf("*******************************************\n");for(i=0;i<32;i+=4){ set_hpia_reg(0x23400+i); temp=get_hpid_reg(); printf("read data value is 0x%x\n",temp);} close(fd1); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -