首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

stm32的位寻址

stm32的位寻址

位寻址(地址映射)" title="STM32的 位寻址(地址映射)" action-data="http%3A%2F%2Fs5.sinaimg.cn%2Fmiddle%2F0414b736gc48551f8a454%26690" action-type="show-slide" style="margin: 0px; padding: 0px; border-width: 0px; list-style: none;">

位寻址(地址映射)" title="STM32的 位寻址(地址映射)" action-data="http%3A%2F%2Fs3.sinaimg.cn%2Fmiddle%2F0414b736gc48551f4b302%26690" action-type="show-slide" style="margin: 0px; padding: 0px; border-width: 0px; list-style: none;">


STM比较特色的就是 位带操作:
如下解释:
(寄存器的地址是固定好的,我们想要进行位操作的话 就需要用到地址映射,将位带区寄存器的 各位 映射到 位带别名区的地址。)


位寻址(地址映射)" title="STM32的 位寻址(地址映射)" action-data="http%3A%2F%2Fs8.sinaimg.cn%2Fmiddle%2F0414b736gc48559397c17%26690" action-type="show-slide" style="margin: 0px; padding: 0px; border-width: 0px; list-style: none;">

位寻址(地址映射)" title="STM32的 位寻址(地址映射)" action-data="http%3A%2F%2Fs12.sinaimg.cn%2Fmiddle%2F0414b736gc485592afa2b%26690" action-type="show-slide" style="margin: 0px; padding: 0px; border-width: 0px; list-style: none;">


通过 位带别名区 的 4个字节(32个位)用来存放 位带区的 位地址。
如将 0x2200 0000 映射到 0x2000 000 的第一个位!

具体的映射C程序是这样的:

位寻址(地址映射)" title="STM32的 位寻址(地址映射)" action-data="http%3A%2F%2Fs5.sinaimg.cn%2Fmiddle%2F0414b736gc48576cdc3a4%26690" action-type="show-slide" style="margin: 0px; padding: 0px; border-width: 0px; list-style: none;">



算法公式:
(addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)
addr & 0xF0000000: 取0x4001 0808    的最高位 得到 0x4000 0000
+0x2000000  :   得到 0x4200 0000
+((addr &0xFFFFF)<<5): 将低5位提取出来 乘以 32.  映射到位带别名区
bitnum<<2 :对第2位 进行加操作。 乘以4. 映射到某位

得到其位带别名区的地址
继承事业,薪火相传
返回列表