找回密码
 立即注册
查看: 443|回复: 16

关于TFPU的使用方式,写入DMAIR后需跟随NOP指令。

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:189
  • 最近打卡:2026-04-02 19:41:58

25

主题

231

回帖

2091

积分

金牌会员

积分
2091
发表于 2026-1-4 19:25:01 | 显示全部楼层 |阅读模式
实际使用中发现,写入DMAIR后需要跟着一条NOP指令,否则会死机。
例如浮点乘法计算,
MOV DMAIR, #0x1E
NOP
如果去掉后面的NOP,直接使用计算结果的话,导致死机。
死机是个笼统的说法,实际是系统失去响应,具体是计算结果出错,还是跑飞目前还没深究。

官方通用的使用方法是代替keil库函数,
MOV DMAIR之后必然有RET指令,
也就是写DMAIR和取计算结果之间有一些间隔,
官方这样用法是没问题的。

同样的 MOV DMAIR, #0x1E,有些地方可以不跟随NOP,有些地方必须跟NOP。

例子可参考https://www.stcaimcu.com/forum.php?mod=viewthread&tid=21780中的asm文件,内部大量的MOV DMAIR,#xx指令,后面均附带NOP指令。
去掉其中个别NOP运行无影响,但有另一些NOP去掉会导致死机。
暂时还没看到规律。

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:368
  • 最近打卡:2026-04-02 08:50:05

844

主题

1万

回帖

2万

积分

管理员

积分
22799
发表于 2026-1-4 20:55:08 | 显示全部楼层
具体哪个型号的 MCU, 工作频率 ?


AI8051U ?
STC32G144K246 ?
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:493
  • 最近打卡:2026-04-02 08:56:15
已绑定手机

104

主题

4229

回帖

9395

积分

荣誉版主

无情的代码机器

积分
9395
发表于 2026-1-4 20:57:47 | 显示全部楼层
和执行时间有关?

截图202601042057221638.jpg
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:189
  • 最近打卡:2026-04-02 19:41:58

25

主题

231

回帖

2091

积分

金牌会员

积分
2091
发表于 2026-1-4 21:40:05 | 显示全部楼层
神*** 发表于 2026-1-4 20:55
具体哪个型号的 MCU, 工作频率 ?

AI8051U上试的,STC32G144还没试。
CPU 40MHz,TFPU 120MHz。
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:189
  • 最近打卡:2026-04-02 19:41:58

25

主题

231

回帖

2091

积分

金牌会员

积分
2091
发表于 2026-1-4 21:41:17 | 显示全部楼层
erci*** 发表于 2026-1-4 20:57
和执行时间有关?

好像是和MOV DMAIR后面的指令有关。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:368
  • 最近打卡:2026-04-02 08:50:05

844

主题

1万

回帖

2万

积分

管理员

积分
22799
发表于 2026-1-4 23:13:55 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:189
  • 最近打卡:2026-04-02 19:41:58

25

主题

231

回帖

2091

积分

金牌会员

积分
2091
发表于 2026-1-5 00:35:04 | 显示全部楼层
最简测试工程
等效C代码
  1. void calc(float fa, float fb, float *fc)
  2. {
  3.         *fc = fa * fb;
  4. }
复制代码


汇编
  1.         MOV      DR8,fc?040          ;参数fc
  2.         MOV      DMAIR,#0x1E         ;DR4 = DR4 * DR0
  3.         NOP                      ;不加NOP会死机
  4.         MOV      @DR8+0x2,WR6        ;保存计算结果
  5.         MOV      @DR8,WR4
  6.         RET   
复制代码


test_fpu.rar (22.36 KB, 下载次数: 6)
完整测试工程

已确认与时钟频率无关,与TFPU时钟选择系统时钟或PLL高速时钟无关。
只要MOV DMAIR,#data后面是MOV  @DRk+dis,WRj或MOV  @DRk,WRj这种指令就会死机。
在MOV DMAIR,#data后面是其它指令则不会死机。

在 MOV DMAIR,#data
和 MOV  @DRk+dis,WRj
之间插入NOP可避免死机。
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:189
  • 最近打卡:2026-04-02 19:41:58

25

主题

231

回帖

2091

积分

金牌会员

积分
2091
发表于 2026-1-5 00:55:45 | 显示全部楼层
程序段后面加上亮LED指令验证,死机时不会继续向下执行。

已确认
不是计算结果错误,是彻底停机,不再继续执行指令。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:32
  • 最近打卡:2026-03-30 12:09:14

2

主题

114

回帖

1192

积分

金牌会员

积分
1192
发表于 2026-1-5 14:51:06 | 显示全部楼层
每个芯片都有这问题还是个别芯片有这问题
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:189
  • 最近打卡:2026-04-02 19:41:58

25

主题

231

回帖

2091

积分

金牌会员

积分
2091
发表于 2026-1-5 15:11:39 | 显示全部楼层
Easy*** 发表于 2026-1-5 14:51
每个芯片都有这问题还是个别芯片有这问题

目前测的是全部ai8051u有这个问题,
STC32G144没问题。
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-4-2 21:11 , Processed in 0.154154 second(s), 85 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表