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

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

[复制链接]
  • TA的每日心情
    奋斗
    2023-12-6 15:33
  • 签到天数: 2 天

    [LV.1]初来乍到

    20

    主题

    98

    回帖

    978

    积分

    荣誉版主

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

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

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-12-6 15:33
  • 签到天数: 2 天

    [LV.1]初来乍到

    20

    主题

    98

    回帖

    978

    积分

    荣誉版主

    积分
    978
    发表于 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
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    550

    主题

    9344

    回帖

    1万

    积分

    管理员

    积分
    13894
     楼主| 发表于 2023-12-10 19:41:18 | 显示全部楼层
    chen 发表于 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 的缓冲区

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-12-6 15:33
  • 签到天数: 2 天

    [LV.1]初来乍到

    20

    主题

    98

    回帖

    978

    积分

    荣誉版主

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

    使用道具 举报

  • TA的每日心情
    奋斗
    10 小时前
  • 签到天数: 143 天

    [LV.7]常住居民III

    15

    主题

    543

    回帖

    1984

    积分

    金牌会员

    打工人

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

    点评

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

    使用道具 举报

    该用户从未签到

    550

    主题

    9344

    回帖

    1万

    积分

    管理员

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

    截图202312102009129316.jpg
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    63

    主题

    649

    回帖

    1万

    积分

    荣誉版主

    积分
    10802
    发表于 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 反对 0 送花

    使用道具 举报

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 137 天

    [LV.7]常住居民III

    37

    主题

    872

    回帖

    3990

    积分

    荣誉版主

    积分
    3990
    发表于 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
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 137 天

    [LV.7]常住居民III

    37

    主题

    872

    回帖

    3990

    积分

    荣誉版主

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

    使用道具 举报

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 137 天

    [LV.7]常住居民III

    37

    主题

    872

    回帖

    3990

    积分

    荣誉版主

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

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

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-7 16:18 , Processed in 0.079235 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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