准备数据:
需要访问的寄存器的物理地址,访问的内存大小。
#include <stdio.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <memory.h>
#define I2C_BASE 0x1E78A000
#define MAP_SIZE 0x1000
#if 0
#define MAP_SIZE 4096UL
#define MAP_MASK (MAP_SIZE-1)
#endif
typedef unsigned int u32;
int main()
{
int i,fd;
u32 *membase;
u32 number;
fd = open("/dev/mem",O_RDWR);
if(0 > fd)
{
printf("open /dev/mem error\n");
return -1;
}
membase = (u32 *)mmap(NULL, MAP_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, I2C_BASE);
if(NULL == membase)
{
printf("mmap error\n");
perror("mmap");
return -1;
}
printf("membase starts at %08x\n", membase);

本文展示了如何使用mmap函数在Linux环境下直接读写开发板上的寄存器地址。通过打开/dev/mem文件,映射指定大小的内存区域,然后访问I2C_BASE寄存器进行读取操作。程序中强调了映射基址和MAP_SIZE的设定对于成功访问寄存器的重要性。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



