DJYOS之Cortex M3/M4系列(二):M4浮点单元FPU

SuperAlex 发表于 2015-6-1 11:00:56 | 显示全部楼层 [复制链接]
1 4469
本帖最后由 SuperAlex 于 2015-6-1 10:55 编辑

    相对于Cortex M3,M4内核的亮点就在于强化了运算能力,新加了浮点、DSP、并行计算等,用以满足需要有效且易于使用的控制和信号处理功能混合的数字信号控制市场。
    1.浮点指令集
    Cortex M4 内核内嵌一个可选的单精度浮点单元 (FPU),从指令集上体现在,新增了FPU单元的单精度浮点运算指令,这指令都是用V开头的汇编指令,仅在FPU功能被使能时使用否则将陷入异常。详细的指令列表可参考PDF文档《Cortex-M4 Devices Generic User Guide》表Table 3-1 Cortex-M4 instructions。在使能了硬件浮点单元后,编译器将会生成浮点运算指令,使用FPU硬件浮点功能。

    2.浮点寄存器
    Cortex M4新增了一组浮点寄存器,用于浮点运算和状态存储等。如图所示,其中 还有一个状态寄存器FPSCR。
浮点寄存器.png
    3.入栈出栈
    (1)对Cortex M3内核有一定了解的朋友应该都知道,当内核状态进入异常状态时,CPU会自动入栈寄存器xPSR, PC, LR, R12, R3‐R0,退出异常时会自动出栈xPSR, PC, LR, R12, R3‐R0,同理,将开户了M4 的硬件浮点功能后,进入异常时不仅会自动入栈xPSR, PC, LR, R12, R3‐R0,还会硬件入栈S0-S15,FCPSR,如下图所示。
   (2)值得一提的是,浮点单元FPU有一组控制寄存器,作用是配置浮点计算,其中FPCCR控制寄存器的比特[30]使用默认配置为0时,表示不使用lazy stacking,即硬件完成浮点寄存器自动入栈、出栈,否则,只保留空间,不入栈寄存器。
   (3) 如图所示,栈顶需保持8字节对齐,因此在入栈FPSCR时,自动入栈了四字节的空间,该空间内可能为任意值。
auto stacking.png
(4)M4的硬件识别进入异常前的程序是否使用了浮点指令,即是否使用浮点计算单元,因此,若使用了浮点指令,则入栈顺序和出栈顺序如上图左所示,否则与M3相同,如上图右所示。

    4.DJYOS 移植M4浮点
    与M3已有的移植基础上面,主要工作是需要处理M4的浮点寄存器的现场保存与恢复,由于硬件会完成部分浮点寄存器的处栈和出栈,因此在进入异常后,保存现场只需要手动完成未完成保存的寄存器入栈即可。
    进入异常(djyos使用SVC服务实现任务切换)时,可根据EXC_RETURN的bit [4]为0,表示使用了浮点指令,否则未使用,从而判断是否需要手动入栈浮点寄存器硬件未压栈寄存器。
    具体汇编段处理细节可在源码源码中查看。

    5.FPU浮点配置
    大部分的浮点配置使用上电默认配置即可,在启动代码时,开启浮点即可
    #if (CN_CPU_OPTIONAL_FPU == 1)
        pg_scb_reg->CPACR = (3UL << 20)|(3UL << 22);    //使能FPU
        pg_scb_reg->FPCCR = (1UL << 31);                        //关闭lazy stacking
    #endif

    6.eclipse编译选项设置
    要生成硬件浮点指令,还必须配置编译选项,DJYOS选择的是GCC编译器,eclipse集成开发环境,与浮点相关的配置如图所示
编译配置.png

    DJYOS最新版的源码将支持M4浮点计算,使用者只需要配置好自己的工程配置和打开浮点功能即可,具体工程的编译选项配置可参考DJYOS即将发布的FreeScale K60/K70工程编译选项配置。

回复

使用道具 举报

发表于 2015-6-1 11:00:56 | 显示全部楼层
学习了
回复 支持 反对

使用道具 举报

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

本版积分规则

加入我们,

发现科技可以让生活更美好...

立即注册

如果您已拥有本站账户,则可

精华导读

推荐阅读

资讯排行

站点统计|手机版|小黑屋| 都江堰操作系统交流论坛 ( 粤ICP备11028047号 )

Templated By DJYOS 论坛  粤ICP备11028047号  

返回顶部 返回列表