文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>嵌入式中如何对寄存器进行赋值

嵌入式中如何对寄存器进行赋值

时间:2010-08-03  来源:山行

好久没动手写文章了,今天下午对嵌入式C语言编程进行了思考,也随之对此有了全新的认识,下面总结一下我的心得,希望能给那些对嵌入式编程的认识还处于朦胧状态的朋友一些启示.

我们在学习嵌入式的过程中,总少不了和各式各样的寄存器打交道,对寄存器的正确设置就显得尤为重要.下面就先谈一下如何对寄存器进行设置.

对寄存器进行设置之前必须先知道寄存器的地址,这个在每个处理器的参考手册中都有明确的说明.例如我现在用的处理器芯片是freescale的MCF52277,在MCF52277 Reference Manual对每个模块的寄存器都有详细说明,下面以SDRAM控制器为例,进行相关介绍.

 

Address                                                     Register


 

0xFC0B_8000          SDRAM Mode/Extended Mode Register (SDMR)

0xFC0B_8004          SDRAM Control Register (SDCR)

0xFC0B_8008          SDRAM Configuration Register 1 (SDCFG1)

0xFC0B_800C         SDRAM Configuration Register 2 (SDCFG2)

0xFC0B_8110         SDRAM Chip Select 0 Configuration (SDCS0)

0xFC0B_8114         SDRAM Chip Select 1 Configuration (SDCS1)


 上表为SDRAM控制器相关寄存器的Memory Map(地址映射).

 

最靠左边的Address(地址)栏就是对应的寄存器地址,我们应该清楚的是对寄存器进行设置,也就是对寄存器的地址进行赋值.(认识到这一点是很重要的).

例如,我们要对SDRAM Mode/Extended Mode Register (SDMR)进行设置,用下列语句可以实现:

            0xfc0B8000=0x00001111;

上面的语句就实现了对寄存器SDRAM Mode/Extended Mode Register (SDMR)的设置.

 

但是,这样做会存在这样的问题,即:我们每次对寄存器进行设置,都要先找到其对应的寄存器地址,然后还需要手动敲打一大串十六进制数,这样做显然是很不方便,而且在手动输入寄存器的时候很容易出错.

那么我们用什么方法来解决这个问题呢?别着急,我们可以用头文件很好的解决这个问题.

MCF52277处理器的头文件列表对各个模块的寄存器的都进行了宏定义.例如mcf5227_sdramc.h是对SDRAM控制器的各寄存器进行的宏定义,部分定义如下:

/*********************************************************************

*

* SDRAM Controller (SDRAMC)

*

*********************************************************************/

 

/* Register read/write macros */

#define MCF_SDRAMC_SDMR         (*(vuint32*)(0xFC0B8000))  

#define MCF_SDRAMC_SDCR         (*(vuint32*)(0xFC0B8004))  

#define MCF_SDRAMC_SDCFG1       (*(vuint32*)(0xFC0B8008))  

#define MCF_SDRAMC_SDCFG2       (*(vuint32*)(0xFC0B800C))  

#define MCF_SDRAMC_SDDS         (*(vuint32*)(0xFC0B8100))  

#define MCF_SDRAMC_SDCS0        (*(vuint32*)(0xFC0B8110))  

#define MCF_SDRAMC_SDCS1        (*(vuint32*)(0xFC0B8114))  

#define MCF_SDRAMC_SDCS2        (*(vuint32*)(0xFC0B8118))  

#define MCF_SDRAMC_SDCS3        (*(vuint32*)(0xFC0B811C))  

 

有了头文件的宏定义,我们就可以用如下方式对寄存器进行配置:

MCF_SDRAMC_SDMR=0x00001111:

这种对寄存器进行赋值的方法显然比第一种方式要简单直观,而且不容易出错

 


 

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载