栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > 服务器

Linux在应用层读写寄存器的方法及实现实例

服务器 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux在应用层读写寄存器的方法及实现实例

Linux在应用层读写寄存器的方法

可以通过操作/dev/mem设备文件,以及mmap函数,将寄存器的地址映射到用户空间,直接在应用层对寄存器进行操作,示例如下:

#include  
#include  
#include  
#include  
#include  
#include   
#include  
#define AUDIO_REG_base  (0xB800E000) 
#define MAP_SIZE    0xFF 
 
static int dev_fd; 
int main(int argc, char **argv) 
{ 
 
  dev_fd = open("/dev/mem", O_RDWR | O_NDELAY);    
 
  if (dev_fd < 0)  
  { 
    printf("open(/dev/mem) failed.");   
    return 0; 
  }  
 
  unsigned char *map_base=(unsigned char * )mmap(NULL, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, dev_fd, AUDIO_REG_base ); 
 
  printf("%x n", *(volatile unsigned int *)(map_base+0x38)); //打印该寄存器地址的value 
 
#if 1 // LINE IN 
  printf("%x n", *(volatile unsigned int *)(map_base+0x30)); 
 
  *(volatile unsigned int *)(map_base + 0x30) = 0x208121bc; //修改该寄存器地址的value 
  usleep(1000000); 
  *(volatile unsigned int *)(map_base + 0x30) &= ~(0x1<<16); //修改该寄存器地址的value 
  usleep(1000000); 
 
  printf("%x n", *(volatile unsigned int *)(map_base+0x30)); 
#endif 
 
  if(dev_fd) 
    close(dev_fd); 
 
  munmap(map_base,MAP_SIZE);//解除映射关系 
 
  return 0; 
} 



感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/181738.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号