arm: 使用结构体操作寄存器
使用结构体操作寄存器:
//寄存器赋值和取值的时候,要注意寄存器的长度,有的寄存器的值只有8位。 //还要注意,使用volatile修饰寄存器变量。volatile 参考http://www.cnblogs.com/mylinux/p/4630749.html
//addr.h typedef unsigned int S3C24X0_REG32; /* NAND FLASH (see S3C2410 manual chapter 6) */ typedef struct { S3C24X0_REG32 NFCONF; S3C24X0_REG32 NFCMD; S3C24X0_REG32 NFADDR; S3C24X0_REG32 NFDATA; S3C24X0_REG32 NFSTAT; S3C24X0_REG32 NFECC; } S3C2410_NAND; //nand.c static S3C2410_NAND* s3c2410nand = (S3C2410_NAND *)0x4e000000; //如此,s3c2410nand 表示寄存器组的起始地址 。 //&s3c2410nand->NFCMD 表示NFCMD寄存器的地址 。 //s3c2410nand->NFCMD 表示NFCMD寄存器的值 。 //寄存器赋值和取值的时候,要注意寄存器的长度,有的寄存器的值只有8位。 //还要注意,使用volatile修饰寄存器变量。 /* 读取数据 */ static unsigned char s3c2410_read_data(void) { volatile unsigned char *p = (volatile unsigned char *)&s3c2410nand->NFDATA; return *p; }