查看: 5182|回复: 0

[分享] 低成本高性能的 I.MXRT1010

[复制链接]
  • TA的每日心情
    开心
    2025-7-11 08:53
  • 签到天数: 301 天

    连续签到: 2 天

    [LV.8]以坛为家I

    3873

    主题

    7477

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    39276
    最后登录
    2025-7-21
    发表于 2020-12-22 14:52:31 | 显示全部楼层 |阅读模式
    低成本高性能的 I.MXRT1010



    建立在 Cortex-M7内核上的第一颗跨界I.MXRT1050,消除了对外围器件架构的需求。例如,片内完全集成的电源管理功能DC-DC转换器消除了对外部电源PMIC专用芯片的需求。512 KB-2MB的片上SRAM意味着可以消除外部DRAM,从而进一步降低总的器件成本。此外,片上Flashless的闪存不仅可以实现更高的操作频率,还可以将i.MX RT的成本降低到只有竞争对手MCU成本的一小部分。在系统级,通过使用标准片外NOR闪存进行数据存储,降低了总体BOM成本。与集成片上闪存相比,片外闪存编程更快、更便宜。由于直接编程的简单性,标准片外闪存的编程速度更快,例如,与片上集成嵌入式闪存MCU相比,编程一个外部2MB串行闪存可以快60%。与更复杂的多引脚数的 MCU相比,外部闪存的使用也简化并降低了编程设备的成本,因为外部闪存器件的引脚数量更少,已经可以同质替换的选择余地更大。

    21.png

    即使将外部闪存(8-16MB)的成本包括在i.MX RT1050的成本中,i.MX RT1050的CM/$价值比竞争对手高出3-5倍。
    22.png

            在40nm工艺的 i.MX RT1010 家族中有许多智能的外设,500 MHz Arm® Cortex®-M7 内核,具有如下特性:
    23.png

    16 KB L1 指令缓存
    8 KB L1 数据缓存
    支持 VFPv5架构的全浮点 FPU (单精度)
    支持 Armv7-M Thumb 指令集
    集成 MPU, 最多 16 个独立的保护区
    总共 128 KB I-TCM 和 D-TCM


        紧耦合的 (TCM) 内存,CPU可以单周期的访问 TCM,可以实现很高的性能。如何在I.MX RT1010上使用FPU乘法指令。在Kinetis Cortex-M4F上,浮点单元被激活,然后2个浮点因子被传递给一个汇编函数,该函数使用FPU乘法指令VMUL将寄存器S0、S1中的值相乘,并将乘积返回给调用函数。


        只要编译器设置正确,所有可以用FPU指令完成的操作都应该自动完成。检查在编译C文件时看到的编译器标志包括


    -mfloat-abi=hard -mfpu=fpv5-d16


        并在反汇编模式下检查一些代码,以确认它是否如所期望的那样工作。另外,在代码中使用强制转换时也要小心,以确保计算中使用的类型与预期的一样——看看Eric Styger对Cortex-M4F上的FPU操作的讨论,不要忘记,i.MX RT中双精度的FPU在做非控制类型时不会受到相同的影响。


        虽然编译器可能会利用FPU的启动代码来启用它,否则第一次访问将失败,但是大多数启动代码都会默认启用它。在不需要FPU操作的产品中(并且适当地通知编译器不要使用硬件的FPU方法),可以禁用FPU并改善中断延迟,因为需要保存的寄存器更少-这意味着启动代码最好是有条件的,即开发人员是否有意使用硬件的FPU,或者开发人员倾向于避免它,以便在一个主要是整数的环境中从改进的中断响应时间中获益。


        在不带FPU的CPU中有两种算法。一种是使用性能很低的软件浮点库。另一种是使用定点数据。以IAR为例,如果在不带FPU的CPU上编译以下C代码并启用硬件的浮点库,编译器生成的代码如图所示。可以看到用浮点函数模拟的整数运算。


        float32_t f1 = 3.14;    float32_t fr = 2.1234;    float32_t fs;


        fs = f1*fr*fr;
    24.png

        如果在CPU集成FPU的项目里面编译代码,代码类似如下形式:
    25.png

        可以参考编译器选项帮助文档来配置使用S/W浮点库和使能硬件的浮点库。作为定点的数据,可以访问 Fixed-point arithmetic - Wikipedia, https://en.wikipedia.org/wiki/Fixed-point_arithmetic。在 CMSIS DSP 源代码库中实现了不同的数据类型。为了使用 powf(), expf()浮点函数,不需要特殊的ewl库,可以使用系统默认的,使能FPU的方法如下:


    ; Enable the floating point coprocessor
    #if defined (_VFPv4_)
           MOVW r1,#60808              ; load CPACR           
           MOVT r1,#57344              ; (0xE000ED88)
           LDR r0,[r1]
           ORR.W r0,r0,#VFPEnable ; Enable FPU
           STR r0, [r1] ; on CP10, CP11
           MOV.W r0,#R2N_Enable
           VMSR FPSCR, r0
    #endif


        另外,编译器中使能的方法如下:在预编译器中定义如下的宏:


    __VFPV4__


        在文件__arm_eabi_init.c中包含  __fp_init() ,初始化这个就可以使能FPU。当然做浮点运算有可能消耗的Stack会更大,因此有必要需要修改栈的大小。


        如果是使用的MDK的环境使能硬件的FPU,在 Options for Target - Target - Floating Point Hardware中可以进行配置。
    26.png

        这个里面有3个下拉选项:不使用,使用单精度的,使用双精度的。在选择 "Floating Point Hardware" 选项后,MDK 配置相应的 C/C++ 选项和链接器选项,用于 Options for Target - C/C++ - Compiler control string 和 Options for Target - Linker - Linker control string。


    选择 "Not Used"--cpu=Cortex-M7添加到编译器和链接器选项:对于这个--cpu选项,选项 --cpu=Cortex-M7 --fpu=SoftVFP 被无保留定义,这意味着只有软件浮点支持,被浮点库fplib执行浮点操作时才被选中。


    选择"Use Single Precision",--cpu=Cortex-M7.fp.sp 财务报表向编译器和链接器添加了选项:对于这个--cpu选项,选项--fpu=FPv5 SP是无保留定义的,这意味着硬件浮点单元的选择符合FPv5体系结构的单精度变量。


    选择"Use Double Precision",--cpu=Cortex-M7.fp.dp向编译器和链接器添加了选项:对于这个--cpu选项,选项--fpu=FPv5 DP是无保留定义的,这意味着硬件浮点单元的选择符合FPv5体系结构的双精度变量。


        而且,针对CMSIS库,在系统启动文件里面调用 SystemInit() 来使能 FPU。
    1. #if (__FPU_USED == 1)                   // Keil
    2.   /* enable FPU if available and used */
    3.   SCB->CPACR |= ((3UL << 10*2) |             /* set CP10 Full Access               */
    4.                  (3UL << 11*2)  );           /* set CP11 Full Access               */
    5. #endif
    复制代码

        由于一些额外的浮点处理指令添加到FPv5(Contex-M7 Floating-Point Extension),可以支持单精度和双精度的浮点,可以提升浮点处理的效率,也可以指定一些特定的浮点,诸如 FPv4 用于单精度浮点操作,为了实现这个操作,需要指定 --fpu=FPv4-SP 选项,诸如 --cpu Cortex-M7.fp.sp --fpu=FPv4-SP,它操作由--cpu=namepoption定义的任何FPU选项。

    qiandao qiandao
    回复

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-21 12:43 , Processed in 0.079915 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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