覆盆子PI,原始读取C中的寄存器值

有人可以告诉我一些关于如何从Raspberry Pi寄存器中读取值的示例吗?

我需要检查AUX_MU_LSR_REG(0x7E21 5054)中的字节,但我不知道如何在不使用任何其他库的情况下执行此操作.

我试过了:

(这里我修改了oryginal帖子)

**************************开始代码

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <unistd.h>
#include <errno.h>



#define BCM2708     0x20000000
#define UART_BASE   (BCM2708+0x215000)
#define PAGE_SIZE   (4*1024)
#define BLOCK_SIZE  (4*1024)



int mem_fd;                 
void *uart_map;                 
volatile unsigned *uart;            




int main()
{

printf("start\n");

if((mem_fd=open("/dev/mem",O_RDWR|O_SYNC))<0)
{
printf("can't open /dev/mem \n");
exit(-1);
}
else printf("stream_file open OK \n");

if((uart_map=malloc(BLOCK_SIZE))==0)
printf("malloc fail\n");
else printf("GPIO_mallocation OK %d \n", (int)uart_map );


uart_map=mmap   (NULL,          //any address in our space
BLOCK_SIZE,         //map length
PROT_READ|PROT_WRITE,   //Enable reading and writing to maped memmory
MAP_SHARED,     //Shares with other processes
mem_fd,         //File to map
UART_BASE       //Offset toUART peripheral
);

if(uart_map==MAP_FAILED)
{
printf("mmap error %d", (int)uart_map);
exit(-1);
}
else printf("GPIO mapping OK \n");
uart=(volatile unsigned* )uart_map;
int i;

for(i=0;i<32;i++)
{
printf("adress:%x ",uart+i);
printf("value:%x\n",*(uart+i));
}





printf("stop\n");
return 0;
}

`
***********************代码结束
现在我真的不记得我是如何显示0但在上面的代码中我得到指针冲突.

什么是uart指向?理论上它应该显示值,但几个星期后我无法运行.

希望你能以某种方式帮助我

最佳答案 我已成功编译了示例
here,并且能够通过对该代码进行一些修改,从GPIO引脚读取和写入数字值.

您实际上正朝着正确的方向前进:mmap()数据表中为您的特定GPIO,SPI或您需要的任何寄存器指定的范围,然后从该地址读取和写入.这是RPi上所有GPIO编程的基础.

你应该注意一些特殊的位域,但正如我所提到的,这些都在elinux.org的Pi数据表中.

注意:要mmap()系统注册,您需要以超级用户身份运行.

点赞