打印

请问大家一个STM32中SDIO.c中一个问题?

[复制链接]
2291|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
LiangXinJi|  楼主 | 2009-8-19 11:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在SDIO.c中有这么一段宏定义:
/* ------------ SDIO registers bit address in the alias region ----------- */
#define SDIO_OFFSET                (SDIO_BASE - PERIPH_BASE)
/* --- CLKCR Register ---*/
/* Alias word address of CLKEN bit */
#define CLKCR_OFFSET              (SDIO_OFFSET + 0x04)
#define CLKEN_BitNumber           0x08
#define CLKCR_CLKEN_BB            (PERIPH_BB_BASE + (CLKCR_OFFSET * 32) + (CLKEN_BitNumber * 4))
/* --- CMD Register ---*/
/* Alias word address of SDIOSUSPEND bit */
#define CMD_OFFSET                (SDIO_OFFSET + 0x0C)
#define SDIOSUSPEND_BitNumber     0x0B
#define CMD_SDIOSUSPEND_BB        (PERIPH_BB_BASE + (CMD_OFFSET * 32) + (SDIOSUSPEND_BitNumber * 4))
/* Alias word address of ENCMDCOMPL bit */
#define ENCMDCOMPL_BitNumber      0x0C
#define CMD_ENCMDCOMPL_BB         (PERIPH_BB_BASE + (CMD_OFFSET * 32) + (ENCMDCOMPL_BitNumber * 4))
/* Alias word address of NIEN bit */
#define NIEN_BitNumber            0x0D
#define CMD_NIEN_BB               (PERIPH_BB_BASE + (CMD_OFFSET * 32) + (NIEN_BitNumber * 4))
/* Alias word address of ATACMD bit */
#define ATACMD_BitNumber          0x0E
#define CMD_ATACMD_BB             (PERIPH_BB_BASE + (CMD_OFFSET * 32) + (ATACMD_BitNumber * 4))
/* --- DCTRL Register ---*/
/* Alias word address of DMAEN bit */
#define DCTRL_OFFSET              (SDIO_OFFSET + 0x2C)
#define DMAEN_BitNumber           0x03
#define DCTRL_DMAEN_BB            (PERIPH_BB_BASE + (DCTRL_OFFSET * 32) + (DMAEN_BitNumber * 4))
/* Alias word address of RWSTART bit */
#define RWSTART_BitNumber         0x08
#define DCTRL_RWSTART_BB          (PERIPH_BB_BASE + (DCTRL_OFFSET * 32) + (RWSTART_BitNumber * 4))
/* Alias word address of RWSTOP bit */
#define RWSTOP_BitNumber          0x09
#define DCTRL_RWSTOP_BB           (PERIPH_BB_BASE + (DCTRL_OFFSET * 32) + (RWSTOP_BitNumber * 4))
/* Alias word address of RWMOD bit */
#define RWMOD_BitNumber           0x0A
#define DCTRL_RWMOD_BB            (PERIPH_BB_BASE + (DCTRL_OFFSET * 32) + (RWMOD_BitNumber * 4))
/* Alias word address of SDIOEN bit */
#define SDIOEN_BitNumber          0x0B
#define DCTRL_SDIOEN_BB           (PERIPH_BB_BASE + (DCTRL_OFFSET * 32) + (SDIOEN_BitNumber * 4))


请问大家到底是什么意思啊!!
我看了下#define  PERIPH_BB_BASE   ((uint32_t)) 0x42000000  指什么片外地址。
不懂,请大家帮我解释下!!
小弟在这谢过了!


沙发
LiangXinJi|  楼主 | 2009-8-19 12:08 | 只看该作者
看了下参考手册,好像是存储器的映像!!不过不什么理解,谁能不能给我分析下。
谢谢了!!

使用特权

评论回复
板凳
香水城| | 2009-8-19 12:42 | 只看该作者
0x42000000 是使用位段(Bit banding)方式操作片内外设的起始地址。

使用特权

评论回复
地板
LiangXinJi|  楼主 | 2009-8-19 13:38 | 只看该作者
请问香主下面这句是怎么来的呢?
#define DCTRL_RWMOD_BB        [color=Red]    ([color=Red]PERIPH_BB_BASE + (DCTRL_OFFSET * 32) + (RWMOD_BitNumber * 4))   
我看了参考手册位段那节还是不什么理解!!
麻烦香主解释下~!
香主辛苦了!!!!!!!!!!!!!!

使用特权

评论回复
5
香水城| | 2009-8-19 14:16 | 只看该作者
请结合STM32参考手册有关SDIO的章节看,DCTRL_OFFSET 是SDIO_DCTRL寄存器的地址偏移,RWMOD_BitNumber是该寄存器中RWMOD位的位置。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

127

帖子

1

粉丝