CM3 支持 64 位整数, LDRD STRD

 1 ;CM3 在一定程度上支持 64 位整数。
 2 ;其中 LDRD/STRD 就是为 64 位整数的数据传送而设的,语法 格式为:
 3 
 4     LDRD.W RL, RH, [Rn, #+/-offset] {!}
 5     STRD.W RL, RH, [Rn, #+/-offset] {!}
 6     LDRD.W RL, RH, [Rn],#+/-offset
 7     STRD.W RL, RH, [Rn],#+/-offset
 8 
 9     LDR R2, =0x1000     ;(0x1000)= 0x1234_5678_ABCD_EF00 : 00 EF CD AB 78 56 34 12
10     LDRD.W R0, R1,[R2]  ;R0= 0xABCD_EF00, R1=0x1234_5678
11     STRD.W R1, R0,[R2]  ;(0x1000)=0xABCD_EF00_1234_5678 : 78 56 34 12 00 EF CD AB 

Memory : [ RL ] [ RH ]

For example, the following piece of code stores the 64-bit value 0x0123456789ABCDEF to address 0xA0000000:
void perip_64bitaccess(void)
{
  unsigned long long value = 0x0123456789ABCDEF;
  *((volatile unsigned long long*) (0xA0000000)) = value;
}

 

 

__asm void stm_llout(unsigned long long* addr, unsigned long long value)
{
  STM r0, {r2,r3}
  BX LR
}

__asm unsigned long long ldm_llin(unsigned long long* addr)
{
  LDM r0, {r0,r1}
  BX LR
}

unsigned long long perip_64bitaccess(void)
{
  unsigned long long ullvalue = ldm_llin((unsigned long long*)0x40004000);
  stm_llout((unsigned long long*)0x40000000, ullvalue);
  return ullvalue;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值