stm32中位带操作转化为指针不理解请坛友帮我解释一下谢谢

2020-01-04 18:47发布

1.把“位带地址+位序号”转换别名地址宏:
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
把该地址转换成一个指针:
#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
不清楚为什么这么转换????
2.位带操作并不只限于以字为单位的传送。亦可以按半字和字节为单位传送。例如,可以使用
LDRB/STRB 来以字节为长度单位去访问位带别名区,同理可用于 LDRH/STRH。但是不管用哪一个对
子,都必须保证目标地址对齐到字的边界上。
为什么都必须保证目标地址对齐到字的边界上????
谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
uindex
1楼-- · 2020-01-05 14:30
styleno1 发表于 2019-8-18 16:11
恕我耿直,这是M3内核的可选特性

谢谢指点!原来如此。

a. http://infocenter.arm.com/help/i ... 0179b/CHDJHIDF.html
b. Bit-banding is a term that ARM uses to describe a feature that is available on the Cortex M3 and M4 CPU cores. Basically, the device takes a region of memory (the Bit-band region) and maps each bit in that region to an entire word in a second memory region (the Bit-band Alias Region).
XA144F
2楼-- · 2020-01-05 16:25
位带是非常好的,在模拟spi写一些芯片时很好使。

一周热门 更多>