一聚教程网:一个值得你收藏的教程网站

热门教程

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

时间:2022-06-30 16:10:07 编辑:袖梨 来源:一聚教程网

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

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

 代码如下 复制代码

#include

#include

#include

#include

#include

#include  

#include

#define AUDIO_REG_BASE  (0xB800E000)

#define MAP_SIZE    0xFF

  

staticintdev_fd;

intmain(intargc,char**argv)

{

  

  dev_fd = open("/dev/mem", O_RDWR | O_NDELAY);   

  

  if(dev_fd < 0) 

  {

    printf("open(/dev/mem) failed.");  

    return0;

  } 

  

  unsignedchar*map_base=(unsignedchar* )mmap(NULL, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, dev_fd, AUDIO_REG_BASE );

  

  printf("%x n", *(volatileunsignedint*)(map_base+0x38));//打印该寄存器地址的value

  

#if 1 // LINE IN

  printf("%x n", *(volatileunsignedint*)(map_base+0x30));

  

  *(volatileunsignedint*)(map_base + 0x30) = 0x208121bc;//修改该寄存器地址的value

  usleep(1000000);

  *(volatileunsignedint*)(map_base + 0x30) &= ~(0x1<<16);//修改该寄存器地址的value

  usleep(1000000);

  

  printf("%x n", *(volatileunsignedint*)(map_base+0x30));

#endif

  

  if(dev_fd)

    close(dev_fd);

  

  munmap(map_base,MAP_SIZE);//解除映射关系

  

  return0;

}


热门栏目