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

📄 hal_api.c

📁 这是motorola公司的powerpc芯片上的嵌入式linux上的驱动程序和测试程序
💻 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 + -