📄 hal_api.c
字号:
/*********************************************************************** * * (C) Copyright 2002,12 * * Qi zhaoling * All rights left. * * * a memory map API for UT850GE * * * $Id: hal_api.c,v 1.1 2000/02/17 10:07:01 wd Exp $ * ***********************************************************************/#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include "hal_api.h"#undef HAL_DEBUG#ifdef HAL_DEBUG# define hal_debugk(fmt,args...) printf(fmt ,##args)#else# define hal_debugk(fmt,args...)#endifint reg_devFd=0;/** return: 1 - W/R 0 - readonly -1 - un-accessable*/int hal_reg_validate(U32 addr){ return MEM_ACCESS_WR;}int hal_reg_module_init(){ if(!reg_devFd) { reg_devFd = open("/dev/mem_api",O_RDWR); if(reg_devFd < 0) { printf("Cann't open device: /dev/mem_api .\n"); return -1; } } return 0;}void hal_reg_module_release(){ close(reg_devFd); return;}int hal_reg_read(U32 addr, U32 *value){ U32 x; if(hal_reg_validate(addr) == MEM_ACCESS_OUT_RANGE) return MEM_ACCESS_OUT_RANGE; if(addr != lseek(reg_devFd, (off_t)addr, SEEK_SET) ) { printf("hal lseek failed: %d\n",addr); return MEM_ACCESS_FAILED; } if(4 != read(reg_devFd,&x,4) ) { printf("hal read failed\n"); return MEM_ACCESS_FAILED; } *value = x; hal_debugk("hal read from register 0x%04x : 0x%04x \n", addr, x); return MEM_ACCESS_SUCCESS; }int hal_reg_write(U32 addr, U32* value){ if(hal_reg_validate(addr) == MEM_ACCESS_OUT_RANGE) return MEM_ACCESS_OUT_RANGE; if(hal_reg_validate(addr) == MEM_ACCESS_RO) return MEM_ACCESS_RO; if(addr != lseek(reg_devFd, (off_t)addr, SEEK_SET) ) { printf("hal lseek failed: %d\n",addr); return MEM_ACCESS_FAILED; } if(4 != write(reg_devFd,value,4) ) { printf("hal read failed\n"); return MEM_ACCESS_FAILED; } hal_debugk("hal write 0x%04x to register 0x%04x \n", value, addr); return MEM_ACCESS_SUCCESS; }int hal_reg_BitSet(U32 addr, U32 bit){ U32 data, bitmask; int ret; bitmask = ((U32)1) << bit; ret = hal_reg_read(addr, &data); if(ret < MEM_ACCESS_SUCCESS) return ret; data |= bitmask; ret = hal_reg_write(addr, &data); return ret; }int hal_reg_BitClear(U32 addr, U32 bit){ U32 data, bitmask; int ret; bitmask = ((U32)1) << bit; ret = hal_reg_read(addr, &data); if(ret < MEM_ACCESS_SUCCESS) return ret; data &= (~bitmask); ret = hal_reg_write(addr, &data); return ret; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -