找回密码
 立即注册
楼主: 神农鼎

STC8新设计将搭载新MDU32硬件32位加减乘除移位,向64位超算进军,请建议

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2023-12-06 15:33:02

20

主题

110

回帖

771

积分

荣誉版主

积分
771
发表于 2023-12-10 14:59:58 | 显示全部楼层
神*** 发表于 2023-12-10 10:15
STC32的 DMA-SPI 是设置的啥速度 ? 驱动 WS2812B...
帮也开源下参考程序,供大家交叉参考

等有空了我整理一下源码发出来,话说stc也可以考虑整个硬件驱动,这玩意用量还是很大的,搞个便宜的就可以成专用驱动了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2023-12-06 15:33:02

20

主题

110

回帖

771

积分

荣誉版主

积分
771
发表于 2023-12-10 19:23:09 | 显示全部楼层
神*** 发表于 2023-12-10 10:15
STC32的 DMA-SPI 是设置的啥速度 ? 驱动 WS2812B...
帮也开源下参考程序,供大家交叉参考

stc32f12k54驱动全彩led,无需反相,灯带数量只受xdata大小限制
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=5601
(出处: 国芯论坛-STC全球32位8051爱好者互助交流社区)
已上传

点评

感谢,已加精,已广为转发 51世界 共享 [attachimg]29223[/attachimg] https://www.stcaimcu.com/forum.php?mod=viewthread&tid=5601&page=1&extra=#pid44047 SPI-DMA, 驱动全彩LED,猜猜驱动的谁 SPI-DMA@STC32F12  详情 回复 发表于 2023-12-10 19:41
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:99
  • 最近打卡:2025-06-16 09:28:47

733

主题

1万

回帖

1万

积分

管理员

积分
16651
发表于 2023-12-10 19:41:18 | 显示全部楼层
ch*** 发表于 2023-12-10 19:23
stc32f12k54驱动全彩led,无需反相,灯带数量只受xdata大小限制
https://www.stcaimcu.com/forum.php?mod ...

感谢,已加精,已广为转发 51世界 共享
截图202312101941012228.jpg

https://www.stcaimcu.com/forum.p ... amp;extra=#pid44047
SPI-DMA, 驱动全彩LED,猜猜驱动的谁
SPI-DMA@STC32F12K54驱动全彩LED,无需反相,灯带数量只受xdata大小限制
===STC32F12K54, 8K edata
===STC32F12K54, 4K xdata, xdata 可以做 DMA-SPI 的缓冲区

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2023-12-06 15:33:02

20

主题

110

回帖

771

积分

荣誉版主

积分
771
发表于 2023-12-10 20:06:17 | 显示全部楼层
还有就是希望带sw硬件仿真的产品,默认开启仿真(切到其他口不占用3.0和3.1),像stm32那样,可以在程序中关闭仿真和把仿真口用作普通io。
这样的话开发起来直接keil里面下载不用先设置仿真芯片
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:531
  • 最近打卡:2025-06-16 05:02:46
已绑定手机

28

主题

717

回帖

2217

积分

金牌会员

打工人

积分
2217
发表于 2023-12-10 20:06:32 | 显示全部楼层
希望能带can通讯

点评

[attachimg]29233[/attachimg]  详情 回复 发表于 2023-12-10 20:09
打工人
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:99
  • 最近打卡:2025-06-16 09:28:47

733

主题

1万

回帖

1万

积分

管理员

积分
16651
发表于 2023-12-10 20:09:18 | 显示全部楼层

截图202312102009129316.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:24
  • 最近打卡:2025-06-13 00:05:49

115

主题

1223

回帖

1万

积分

荣誉版主

积分
13004
发表于 2023-12-10 23:08:41 | 显示全部楼层
本帖最后由 杨为民 于 2023-12-10 23:14 编辑

STC8H MDU32+功能设计
1.   STC MDU32+简介
(1)STC MDU32+是一款32位多功能数字运算单元。
(2)STC MDU32+使用一组扩展的32位/16位/8位通用寄存器来实现扩展运算的功能。
(3)由于STC8H的DATA空间很小,并且Keil的C51编译器缺省只使用8051的BANK0寄存器地址(DATA地址范围为00H~7H),因此STC MDU32+的扩展通用寄存器映射到地址00H~0FH的DATA空间,可以用传统的8051指令对其内容进行存取,实现了对8051的兼容。
(4)除了扩展通用寄存器,STCMDU32+还包含了一个扩展操作寄存器EOP(SFR)和一个扩展状态寄存器ESR以及一个扩展操作出错(比如除以0,操作溢出)专用中断INT_MDU32。

2.  STC MDU32+寄存器8位、16位、32位地址映射表
STC8H单片机系列
  
地址
  
0 / 8
1 / 9
2 / A
3 / B
4 / C
5 / D
6 / E
7 / F
808H
EDX
ECX
32位名
DX2
DX
CX2
CX
16位名
BR8
BR9
BR10
BR11
BR12
BR13
BR14
BR15 / CL
8位名
000H
EBX
EAX
32位名
BX2
BX
AX2
AX
16位名
BR0
BR1
BR2
BR3
BR4
BR5
BR6
BR7
8位名
在同一地址的不同名寄存器存取的内容是一样的。寄存器的高位在低地址。

3.   STC MDU32+基本操作
(1)寄存器操作
  
操作助记符
  
操作内容
说明
SWAP_AB
EAX与EBX的内容互换
与之对应的16位、8位寄存器内容也互换。
SWAP_CD
ECX与EDX的内容互换
与之对应的16位、8位寄存器内容也互换

(2)双操作数算术运算
  
操作助记符
  
操作内容
说明
ADDX_EABX
EAX=EAX + EBX
32位加法
ADDX_ABX
AX=AX + BX
16位加法
SUBX_EABX
EAX=EAX - EBX
32位减法
SUBX_ABX
AX=AX - BX
16位减法
MULX_EABX
EDX+EAX=EAX * EBX
32位乘法,结果64位,高32位在EDX
MULX_ABX
AX2+AX=AX * BX
16位乘法,结果32位,高16位在AX2
MULX_KEIL16
AX=AX2 * AX
KEIL编译器的16位乘法,结果16位在AX
DIVU_EABX
EAX+EBX=EAX / EBX
32位无符号除法,结果32位商在EAX,32位余数在EBX
DIVS_EABX
EAX+EBX=EAX / EBX
32位有符号除法,结果32位商在EAX,32位余数在EBX
DIVU_ABX
AX=AX / BX
16位无符号除法,结果16位商在AX,16位余数在AX2
DIVU_KEIL16
AX=AX / AX2
KEIL编译器的16位无符号除法,结果16位商在AX,16位余数在AX2
DIVS_ABX
AX=AX / BX
16位有符号除法,结果16位商在AX,16位余数在AX2
DIVS_KEIL16
AX=AX / AX2
KEIL编译器的16位有符号除法,结果16位商在AX,16位余数在AX2

(3)单操作数算术运算
  
操作助记符
  
操作内容
说明
SET0_EAX
EAX=0
32位全清0
SET1_EAX
EAX=-1
32位全置1
SET0_EBX
EBX=0
32位全清0
SET1_EBX
EBX=-1
32位全置1
SET0_ECX
ECX=0
32位全清0
SET1_ECX
ECX=-1
32位全置1
SET0_EDX
EDX=0
32位全清0
SET1_EDX
EDX=-1
32位全置1



NEGS_EAX
EAX=-EAX
32位求负数
NEGS_EBX
EBX=-EBX
32位求负数
NEGS_AX
AX=-AX
16位求负数
NEGS_BX
BX=-BX
16位求负数



INC1_EAX
EAX=EAX+1
32位加1运算
INC1_EBX
EBX=EBX+1
32位加1运算
INC4_EAX
EAX=EAX+4
32位加4运算
INC4_EBX
EBX=EBX+4
32位加4运算
INC1_AX
AX=AX+1
16位加1运算
INC1_BX
BX=BX+1
16位加1运算
INC2_AX
AX=AX+2
16位加2运算
INC2_BX
BX=BX+2
16位加2运算
DEC1_EAX
EAX=EAX-1
32位减1运算
DEC1_EBX
EBX=EBX-1
32位减1运算
DEC4_EAX
EAX=EAX-4
32位减4运算
DEC4_EBX
EBX=EBX-4
32位减4运算
DEC1_AX
AX=AX-1
16位减1运算
DEC1_BX
BX=BX-1
16位减1运算
DEC2_AX
AX=AX-2
16位减2运算
DEC2_BX
BX=BX-2
16位减2运算

(4)二进制按位运算
  
操作助记符
  
操作内容
说明
BAND_EABX
EAX= EAX & EBX
32位与运算
BAND_ABX
AX= AX & BX
16位与运算
BOR_EABX
EAX= EAX | EBX
32位或运算
BOR_ABX
AX= AX | BX
16位或运算
BXOR_EABX
EAX= EAX ^ EBX
32位异或运算
BXOR_ABX
AX= AX ^ BX
16位异或运算
BCPL_EAX
EAX= ~ EAX
32位求反运算
BCPL_EBX
EBX= ~ EBX
32位求反运算

(5)位移运算
  
操作助记符
  
操作内容
说明
SHLX_EAX_CL
EAX=EAX << CL
32位左移
SHLX_EBX_CL
EBX=EBX << CL
32位左移
SHLX_AX_CL
AX=AX << CL
16位左移
SHLX_BX_CL
BX=BX << CL
16位左移
SHRU_EAX_CL
EAX=EAX >> CL
32位无符号整数右移
SHRU_EBX_CL
EBX=EBX >> CL
32位无符号整数右移
SHRU_AX_CL
AX=AX >>CL
16位无符号整数右移
SHRU_BX_CL
BX=BX >>CL
16位无符号整数右移
SHRS_EAX_CL
EAX=EAX >> CL
32位有符号整数右移
SHRS_EBX_CL
EBX=EBX >> CL
32位有符号整数右移
SHRS_AX_CL
AX=AX >>CL
16位有符号整数右移
SHRS_BX_CL
BX=BX >>CL
16位有符号整数右移




(6)高精度/快速运算
  
操作助记符
  
操作内容
说明
MMD32_EABX
EAX=EAX*EBX/EDX
32位混合乘除,先乘为64位中间结果,再除为32位结果在EAX
MMD16_ABX
AX=AX*BX/DX
16位混合乘除,先乘为32位中间结果,再除为16位结果在AX
LTC32_EAX
EAX=(EAX-EBX)*ECX/EDX
32位线性定标,中间结果为64位(不损失精度)。EAX为测量值,EBX为零点值,ECX为满刻度信号值,EDX为AD变换级数
LTC16_AX
AX=(AX-BX)*CX/DX
16位线性定标,中间结果为32位(不损失精度)。AX为测量值,BX为零点值,CX为满刻度信号值,DX为AD变换级数
MA32_EDX
EDX=EDX+EAX*EBX
32位乘加运算


以上是根据个人编程经验的总结出来的,提出给大家分享和讨论。希望通过对STC8H系列单片机增加MDU32+硬件处理器的方法,将STC8H系列8位单片机的核心性能提高到32位的水平,为用户提供一款低价位高性能的8051单片机。
如果MDU32+实现了上述功能,本质上是为8位的CISC的8051内核增加一颗32位的RISC的APU,这将使STC8H成为第一颗双核的8051单片机


点评

很好很强大!!!  发表于 2023-12-11 08:37
感谢杨老师为 【喀秋莎】 升华为 【远火】 保驾护航  发表于 2023-12-11 07:27
回复 支持 1 反对 1

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5499

积分

荣誉版主

积分
5499
发表于 2023-12-11 04:28:15 | 显示全部楼层
杨老师的大作, 仔细看了 3遍, 写的非常周全, ALU 常用主要功能已全包括.

提点小建议:

1. SWAP_AB         EAX与EBX的内容互换     与之对应的16位、8位寄存器内容也互换。
   SWAP_CD         ECX与EDX的内容互换     与之对应的16位、8位寄存器内容也互换

   这两条指令, 实际操作是 两字内容交换(相当于 51的 XCH 指令), 因为你的寄存器排列风格是: EAX与ECX 组对, EBX与EDX 组对

   并非常规的 EAX与EBX 组对, ECX与EDX 组对, 是否改成 SWAP_AC , SWAP_BD 更加有用一点(字内容的 高低交换, 相当于 51的 SWAP 指令) ?



2. MULX_EABX       EDX+EAX=EAX * EBX      32位乘法,结果64位,高32位在EDX

   这条指令, 与其他操作指令风格有点差异, 是否 高32位改在ECX 中, 会更好一些 ?  

                   ECX+EAX=EAX * EBX      32位乘法,结果64位,高32位在ECX(寄存器EAX与ECX 组对, 在风格上保持高度一致)



3. MULX_ABX / MULX_KEIL16 , DIVU_ABX / DIVU_KEIL16 , DIVS_ABX / DIVS_KEIL16 ,

这 3组 16位乘除法, 有点重复多余, 个人认为 2选1 足够满足实际使用了.

推荐保留 MULX_ABX , DIVU_ABX , DIVS_ABX 操作(和其他操作指令风格一致), KEIL16 的去掉(实际使用中, 前面多加一条数据 MOV 即可实现此功能).


4. 位移运算, 无论左移还是右移, 移出位 放在 CY 中(不能丢弃), 使于后续扩展操作(比如 64位移位, 双精度浮点数运算 等)

点评

感谢老许为 【喀秋莎】 升华为 【远火】 保驾护航  发表于 2023-12-11 07:28
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5499

积分

荣誉版主

积分
5499
发表于 2023-12-11 04:35:21 | 显示全部楼层
5.  最好多增加一条 规格化 32位左移 操作
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5499

积分

荣誉版主

积分
5499
发表于 2023-12-11 05:45:43 | 显示全部楼层
6.  由于 寄存器的高位在低地址。

    是否 把 EAX 和 EBX 及其相关寄存器, 互换一下定义位置, 更加 顺眼便于理解 ?

    同理,   ECX 和 EDX 及其相关寄存器,  也需要互换一下定义位置,
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-17 03:32 , Processed in 0.182324 second(s), 106 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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