在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2951|回复: 3

[求助] 菜鸟求助

[复制链接]
发表于 2010-3-5 09:59:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
请教高手,在做设计的时候往往要用到配置寄存器,而且一些模块的操作的根据和选择都来自配置寄存器,希望能有人帮我解释一下配置寄存器如何设计,配置寄存器如何被其它模块所访问呢?顺便帮我讲一下寄存器的地址和宽度,比如寄存器的地址是0x0020--0x003E,宽度是32位,我不明白为什么寄存器的地址是一个范围呢??迷茫中啊,本人是超级菜鸟,希望达人帮忙解答一下,不胜感激。
发表于 2010-3-5 10:17:05 | 显示全部楼层
你要指定一个通讯协议,来访问你的寄存器,比如说I2C或者你自己设计一套东西。
然后你的模块接收到配置指令后,对地址部分(就是你说的0x0020-0x003e这些)进行译码,然后填写相应的寄存器。
发表于 2010-3-15 12:52:35 | 显示全部楼层
恩,对头
发表于 2010-3-15 23:19:23 | 显示全部楼层
以UART模块为例,它的内部有两个寄存器,一个是状态寄存器,另一个是控制寄存器,状态寄存器指示UART的状态,包括使能,是否准备好等信号,而控制寄存器用于控制UART的一些输出以及指示信号,通过这些信号,外部的处理器可以把数据输入控制寄存器中,从而指示是否准备好数据的传输,同时读取状态寄存器,了解一些状态信息。
在nios中,有这样一段程序:
#define ALTERA_AVALON_UART_STATUS_PE_MSK              (0x1)
#define ALTERA_AVALON_UART_STATUS_PE_OFST             (0)
#define ALTERA_AVALON_UART_STATUS_FE_MSK              (0x2)
#define ALTERA_AVALON_UART_STATUS_FE_OFST             (1)
#define ALTERA_AVALON_UART_STATUS_BRK_MSK             (0x4)
#define ALTERA_AVALON_UART_STATUS_BRK_OFST            (2)
#define ALTERA_AVALON_UART_STATUS_ROE_MSK             (0x8)
#define ALTERA_AVALON_UART_STATUS_ROE_OFST            (3)
#define ALTERA_AVALON_UART_STATUS_TOE_MSK             (0x10)
#define ALTERA_AVALON_UART_STATUS_TOE_OFST            (4)
#define ALTERA_AVALON_UART_STATUS_TMT_MSK             (0x20)
#define ALTERA_AVALON_UART_STATUS_TMT_OFST            (5)
#define ALTERA_AVALON_UART_STATUS_TRDY_MSK            (0x40)
#define ALTERA_AVALON_UART_STATUS_TRDY_OFST           (6)
#define ALTERA_AVALON_UART_STATUS_RRDY_MSK            (0x80)
#define ALTERA_AVALON_UART_STATUS_RRDY_OFST           (7)
#define ALTERA_AVALON_UART_STATUS_E_MSK               (0x100)
#define ALTERA_AVALON_UART_STATUS_E_OFST              (8)
#define ALTERA_AVALON_UART_STATUS_DCTS_MSK            (0x400)
#define ALTERA_AVALON_UART_STATUS_DCTS_OFST           (10)
#define ALTERA_AVALON_UART_STATUS_CTS_MSK             (0x800)
#define ALTERA_AVALON_UART_STATUS_CTS_OFST            (11)
#define ALTERA_AVALON_UART_STATUS_EOP_MSK             (0x1000)
#define ALTERA_AVALON_UART_STATUS_EOP_OFST            (12)

#define ALTERA_AVALON_UART_CONTROL_REG                3
#define IOADDR_ALTERA_AVALON_UART_CONTROL(base)       \
        __IO_CALC_ADDRESS_NATIVE(base, ALTERA_AVALON_UART_CONTROL_REG)
#define IORD_ALTERA_AVALON_UART_CONTROL(base)         \
        IORD(base, ALTERA_AVALON_UART_CONTROL_REG)
#define IOWR_ALTERA_AVALON_UART_CONTROL(base, data)   \
        IOWR(base, ALTERA_AVALON_UART_CONTROL_REG, data)

#define ALTERA_AVALON_UART_CONTROL_PE_MSK             (0x1)
#define ALTERA_AVALON_UART_CONTROL_PE_OFST            (0)
#define ALTERA_AVALON_UART_CONTROL_FE_MSK             (0x2)
#define ALTERA_AVALON_UART_CONTROL_FE_OFST            (1)
#define ALTERA_AVALON_UART_CONTROL_BRK_MSK            (0x4)
#define ALTERA_AVALON_UART_CONTROL_BRK_OFST           (2)
#define ALTERA_AVALON_UART_CONTROL_ROE_MSK            (0x8)
#define ALTERA_AVALON_UART_CONTROL_ROE_OFST           (3)
#define ALTERA_AVALON_UART_CONTROL_TOE_MSK            (0x10)
#define ALTERA_AVALON_UART_CONTROL_TOE_OFST           (4)
#define ALTERA_AVALON_UART_CONTROL_TMT_MSK            (0x20)
#define ALTERA_AVALON_UART_CONTROL_TMT_OFST           (5)
#define ALTERA_AVALON_UART_CONTROL_TRDY_MSK           (0x40)
#define ALTERA_AVALON_UART_CONTROL_TRDY_OFST          (6)
#define ALTERA_AVALON_UART_CONTROL_RRDY_MSK           (0x80)
#define ALTERA_AVALON_UART_CONTROL_RRDY_OFST          (7)
#define ALTERA_AVALON_UART_CONTROL_E_MSK              (0x100)
#define ALTERA_AVALON_UART_CONTROL_E_OFST             (8)
#define ALTERA_AVALON_UART_CONTROL_DCTS_MSK           (0x400)
#define ALTERA_AVALON_UART_CONTROL_DCTS_OFST          (10)
#define ALTERA_AVALON_UART_CONTROL_RTS_MSK            (0x800)
#define ALTERA_AVALON_UART_CONTROL_RTS_OFST           (11)
#define ALTERA_AVALON_UART_CONTROL_EOP_MSK            (0x1000)
#define ALTERA_AVALON_UART_CONTROL_EOP_OFST           (12)
注意到MSK和OFST,BASE了吗?如果想让微处理器能够控制这些寄存器(STATUS 和 CONTROL),就必须把这些寄存器映射到相应的存储器中,base就是这些寄存器的基址,而OFST对应着偏移地址,MSK表示第几位对应着寄存器的第几位,这样微处理器可以通过往这些地址中写入或读出相应的数据
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-9-20 16:36 , Processed in 0.027061 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表