热度 8
2023-2-14 10:46
682 次阅读|
0 个评论
在多核异构CPU中,多个内核就如同多个大脑,而外设和内存等资源就如同手足,那么多个大脑该如何控制手足才能保证它们正常有序地运行呢? 以NXP i.MX8M Plus处理器的A核和M核为例,其实只有少部分外设被指定了属于哪个核,而大部分的外设都能被A核和M核同时使用。如下图所示: 这里我们通过飞凌嵌入式OKMX8MP-C开发板上的UART3进行演示,同时编写A核和M核程序控制UART3打印信息,通过UART3将开发板与电脑链接,在电脑串口调试界面可以看到A核和M核 同时输出了信息 。 A核和M核同时输出信息 那么在实际应用中,当某个外设需要被指定的内核独占或被多核同时使用时,该如何合理安排时序才能避免外设输出异常呢?接下来,小编就 以飞凌嵌入式OKMX8MP-C开发板为例,将多核异构处理器对共享外设和资源的调配方法介绍给大家。 飞凌嵌入式OKMX8MP-C开发板所搭载的NXP i.MX8M Plus处理器具备强悍的性能, 集成4个主频最高可达1.8GHz (工业级主频为1.6GHz) 的Arm Cortex-A53多任务核 和1个Cortex-M7实时核 ,不管是对数据的高速吞吐、处理,还是复杂的人机交互界面处理,都能从容应对。 01 A核独占外设 这种情况比较简单,在设备树中定义设备节点,编译新的设备树,将生成的OK8MP-C.dtb和Image拷贝至以下目录: 开发板/run/media/mmcblk2p1/ 重启开发板,同时M核程序中不初始化UART3即可。以UART3为例: 02 M核独占外设 对于NXP i.MX8M Plus处理器而言,由于A核和M核对内存和外设的访问都是共享且平等的,为了确保不产生资源冲突会 通过资源域(resource domains)控制器从硬件层面来对指定内存和外设的访问权限进行保护 。 i.MX8M Plus处理器允许定义最多4个资源域并将不同的内存和外设资源指定到这些资源域中。默认情况下,A核和相关外设被指定于域0;当M核程序运行后,M核以及相关外设最初也是域0,但马上被重新指定于域1。 因此若一个外设需要被M7内核单独使用,首先要修改A核设备树,删除外设节点;其次在M核程序中将域0改为域1;最后再将外设初始化,这样就可以单独控制了。 域转换代码如下: 0 3 多核共享外设 如果多核想共享某个外设,但在某段时间又需要独占,后续再释放;或者多核的开发人员不是同一人,为了避免出错,在自己的程序中强制独占某个核,是否可以实现呢? 答案是肯定的——使用RDC功能即可。RDC全程为Resource Domain Controller,即 资源域控制器,可以通过寄存器和信号量两种方式实现某个域对外设的独占和释放 。 1. 寄存器RDC_PDAPn 由于i.MX8M Plus处理器最多支持4个域,因此 对寄存器后8比特位写入不同数值,将允许相应的域对某个管脚和内存的读写使能 ,如禁止A核域0读写某个管脚,则设置寄存器为0xFC即可,后两个比特位为0,表示禁止域0读写此外设;其他六个比特位为1,表示允许从域1到域3读写此外设。 每个共享外设在RDC资源表中均有一个序号,用于区别其他外设,如UART3在RDC中定义如下: kRDC_Periph_UART3=104U, /**