arm: 使用结构体操作寄存器

2023-09-01  

使用结构体操作寄存器:


//寄存器赋值和取值的时候,要注意寄存器的长度,有的寄存器的值只有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;

}


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。