自助建站网站seo公司,想学编程做网站,做效果图网站有哪些,怎么在网站做外部链接RT1170这个芯片带有双核#xff1a;Cortex-M7和Corterx-M4#xff0c;两个核都可以独立地运行#xff0c;当然双核也可以同时运行。在上一篇文章中#xff0c;介绍了一下在RT1170中消息模块MU的使用#xff1a;双核通信之MU消息单元详解#xff0c;因为这是双核之间用来通…RT1170这个芯片带有双核Cortex-M7和Corterx-M4两个核都可以独立地运行当然双核也可以同时运行。在上一篇文章中介绍了一下在RT1170中消息模块MU的使用双核通信之MU消息单元详解因为这是双核之间用来通信的核心单元。那有了这个基础之后这一篇文章就来学习一下在这个芯片中如何启动双核。 文章目录 1 内存映射2 双核启动2.1 CM7作为主核2.2 CM4作为主核 3 总结 1 内存映射
首先我们来分别看一下CM7和CM4的芯片内置内存分配
(1)CM7
Start AddressEnd AddressSizeDescription2038_0000203F_FFFF512KBOCRAM M7 (FlexRAM)2036_00002037_FFFF128KBOCRAM M7 (FlexRAM ECC)2035_00002035_FFFF64KBOCRAM2 ECC2034_00002034_FFFF64KBOCRAM1 ECC202C_00002033_FFFF512KBOCRAM22024_0000202B_FFFF512KBOCRAM12020_00002023_FFFF256KBOCRAM M4 (LMEM 128KB SRAM_L 128KB SRAM_U backdoor)2000_00002007_FFFF512KBDTCM (FlexRAM)0000_00000007_FFFF512KBITCM (FlexRAM)
上面0x20200000~0x2023FFFF的OCRAM M4是CM4 TCM的重映射地址CM7可以通过这个别名区域访问CM4 TCM。
当CM4关闭电源时CM7不能访问这块内存否则结果是不可预测的。CM7通过重映射地址访问这块内存时速度不及CM4中直接访问这块内存
(2)CM4
Start addressEnd addressSizeDescription2038_0000203F_FFFF512KBOCRAM M7 (FlexRAM)2036_00002037_FFFF128KBOCRAM M7 (FlexRAM ECC)2035_00002035_FFFF64KBOCRAM2 ECC2034_00002034_FFFF64KBOCRAM1 ECC202C_00002033_FFFF512KBOCRAM22024_0000202B_FFFF512KBOCRAM12000_00002001_FFFF128KBSystem TCM (LMEM RAM_U)1FFE_00001FFF_FFFF128KBCode TCM (LMEM RAM_L)
对于这里的OCRAM M7 (FlexRAM)和OCRAM M7 (FlexRAM ECC)虽然这里写的是M7的内存但是经过我的测试M4是可以访问和修改这块内存的。
(3)共享内存区域
这里M7和CM4可以共同访问一些内存
RAMAccess address for CM7Access address for CM4SizeOCRAM M40x2020_00000x1FFE_0000128KBOCRAM M40x2022_00000x2000_0000128 KBOCRAM M70x2038_0000Same as CM7128KBOCRAM M7 ECC0x2036_0000Same as CM7128KBOCRAM10x2024_0000Same as CM7512 KBOCRAM20x202C_0000Same as CM7512 KBOCRAM1_ECC0x2034_0000Same as CM764 KBOCRAM2_ECC0x2035_0000Same as CM764 KB
当然FlexSPI1和FlexSPI2接的Flash、SEMC接的SDRAM所映射的内存在双核间也是共享的。
2 双核启动
对于RT1170的双核来说它们有一个主从关系(默认是CM7为主核CM4为从核)。上电后将启动主核然后由主核在代码中激活并启动从核。
2.1 CM7作为主核
默认情况下CM7为主核。在CM7上电后需要激活CM4核。当然我们还需要准备好CM4核的代码这就有两种情况
1、CM4代码在NOR上XIP执行需要提前将CM4的程序放在NOR的指定内存位置即可(编译的时候程序也要链接到这个位置)。
2、CM4代码在内置SRAM中执行 此时CM7中的程序需要将CM4的程序拷贝到CM4的ITCM中。
CM4的程序可以保存在SD卡、EMMC、U盘等存储介质中这里CM7就可以通过CM4 TCM的重映射地址0x20200000进行拷贝
接下来就是启动CM4核有两个步骤
(1)设置CM4的向量表地址
RT芯片提供了寄存器来(IOMUXC_LPSR_GPR的GPR0和GPR1)设置CM4程序的vector table的地址正确地设置才能成功激活从核。 我们需要填充CM4_INIT_VTOR_HIGH和CM4_INIT_VTOR_LOW为CM4的向量表地址。
(2)激活M4核
需要置以下两个寄存器的位 (1)Slice Control Register中的偏移在284h的CTRL_M4CORE寄存器
置bit0为1可以给CM4进行软件复位
(2)SRC Control Register
CM4会一直保持在复位状态我们需要置这个寄存器的bit0为1来解除CM4的复位状态。
现在CM4核就成功启动了。
2.2 CM4作为主核
在RT1170中默认CM7为主核如果需要设置CM4为主核的话需要烧写0x960处熔丝的第12位为1。 同样地如果CM7的程序需要在RAM中运行需要CM4的程序来拷贝CM7的程序到RAM中。
接下来也是设置向量表和启动CM7核
1、向量表IOMUXC_LPSR_GPR的GPR26寄存器
2、复位CM7核Slice Control Register中的偏移在2A4h的CTRL_M7CORE寄存器
2、启动CM7核SRC Control Register的bit1
这里就不详细介绍了因为这种方法需要烧写熔丝也很少有人用到。
3 总结
本文介绍了CM7和CM4相互激活的基本设置在SDK中有一个MCMGR(Multicore Manager)实现了多核之间的管理操作除了实现本文所述的设置外还有双核之间状态的同步。下一节就来剖析MCMGR中的源码实现。