695

帖子

0

TA的资源

一粒金砂(高级)

21
 
freebsder 发表于 2017-1-18 11:26
m0+支持字节寻址能力,ldr,str后面加b后缀,预取是预取,封装在API(architect programming interface) ...

刚试验一下,依然hardfault,这个擦后是0,我猜他rom也是eeprom构造,因为片内有eeprom,连续编址的

回复

9

帖子

0

TA的资源

一粒金砂(中级)

22
 
赞一个
 
 

回复

1381

帖子

2

TA的资源

五彩晶圆(初级)

23
 
a:        4907              ldr        r1, [pc, #28]      
这里是把 R1 置为 0x02 是可以用 MOVS R1, #2 代替的,省出来存放32-bit常量的4个字节。

Nucleo-L011 板子我没有,LED是接在 PB3 吗?
我还是没看明白内层循环
   add r3, #1
   cmp  r3, r2
   bne ...
这里 R3 用一个不在程序里面的(ROM未定义部分)值 (姑且假定是 0xffffffff), R2 是从 GPIOB.ODR 中读进来,(缺省0) 然后和 R1 (0xffffff7f) 做XOR, 那得多少个周期 R3=R2 才成立?

点评

地址 值 指令/地址 汇编 说明 0x00 09 00 00 00 00000009 设置SP值为00000009 0x04 09 00 00  详情 回复 发表于 2017-1-20 08:07
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

24
 
本帖最后由 ianhom 于 2017-1-20 08:32 编辑
cruelfox 发表于 2017-1-19 23:27
a:        4907              ldr        r1,      
这里是把 R1 置为 0x02 是可以用 MOVS R1, #2 代替的 ...
我正好有这个板子,以下是我的试验结果
未定义的部分值为0,所以最后的数据是0x0000FF7F
因为未定义的部分是0,所以R3被清零
使用的是PB3
0x02是为了使能GPIOB,这里可以复用0x0000FF7F,GPIOB也能使能,省4个字节
前4个字节放SP初值,但用不到SP,可以将0x4002102C(RCC_IOPENR)放到这里,MOVS  R0,SP ,再省4个字节



地址     值                     指令/地址    汇编                                 说明
0x00    09 00 00 00     00000009                                            设置SP值为00000009
0x04    09 00 00 00     00000009                                            设置PC值为00000009,即跳转到0x08这条指令
0x08    06 48               4806           LDR.N  R0, [PC, #0x18]    把RCC_IOPENR的地址读到RO中
0x0A    07 49               4907           LDR.N  R1, [PC, #0x1C]    把0x00000002读到R1中
0x0C    01 60               6001           STR    R1, [R0]                  把0x00000002写入到RCC_IOPENR(使能GPIOB)
0x0E    07 48               4807           LDR.N  R0, [PC, #0x1C]    把GPIOB基地址(GPIOB_MODER)放到R0中
0x10    07 49               4907           LDR.N  R1, [PC, #0x1C]    把0x0000FF7F的值放到R1中
0x12    01 60               6001           STR    R1, [R0]                  把0x0000FF7F的值放到GPIOB_MODER(配置PB3为输出)
0x14    42 69               6942           LDR    R2, [R0, #0x14]     读出GPIOB_ODR的值放到R2中
0x16    4A 40               404A           EORS   R2, R2, R1             R2和R1异或后放到R2中   (实现PB3管脚位的反转)
0x18    42 61               6142           STR    R2, [RO, #0x14]     把R2的值写到GPIOB_ODR中(ON/OFF LED)
0x1A    06 4B               4B06           LDR.N  R3, [PC, #Ox18]    R3中写0
0x1C    5B 1C               1C5B           ADDS   R3, R3, #1            R3 += 1
0x1E    93 42               4293           CMP    R3, R2                    比较R2和R3
0x20    FC D1              D1FC           BNE.N  0x1C                      如果R3比R2小,跳转到0x1C(继续累加延时)
0x22    F7 E7               E7F7            B.N    0x14                        如果R3不比R3小,跳转到0x14(累加结束,反转LED)
0x24    2C 10 02 40     4002102C                                            RCC_IOPENR的地址  
0x28    02 00 00 00     00000002                                             赋值给RCC_IOPENR的值
0x2C    00 04 00 50     50004000                                            GPIOB基地址
0x30    7F FF 00 00      0000FF7F                                             赋值给GPIOB_MODER的值
0x34    00 00 00 00     00000000                                             赋值给R3(清零)

亮灭的时间比例是0xFF7C : 0xFC00

点评

用 SP 初值存放一个常数,然后 MOV R0, SP ,果然高明 既然如此,直接 STR R2, [SP] 更好,省一条指令.  详情 回复 发表于 2017-1-20 09:08
 
 
 

回复

1381

帖子

2

TA的资源

五彩晶圆(初级)

25
 
ianhom 发表于 2017-1-20 08:07
我正好有这个板子,以下是我的试验结果
未定义的部分值为0,所以最后的数据是0x0000FF7F
因为未定义的 ...

用 SP 初值存放一个常数,然后 MOV R0, SP ,果然高明
既然如此,直接 STR R2, [SP] 更好,省一条指令.
 
 
 

回复

1381

帖子

2

TA的资源

五彩晶圆(初级)

26
 
我觉得依赖未定义的部分是 00 还是 FF 这个办法不好,如果是任意值都能跑就pass,否则算犯规
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表