最近搞飞思卡尔iMX6 4核A9处理器,有几个问题要请教下:
1、每个核都是有一套独立的指令寄存器吧,问题来了,PC寄存器和一些状态寄存器是否也是独立的?
2、在裸机开发的情况下,怎么获取当前的代码运行在哪个核上面?
3、如果在多核处理器上面实现一个longjmp应如何实现?longjmp只能实现核内长跳吗?
4、核处于关闭状态,来一中断后,是所有核都唤醒还是只有其中一个?核被关闭后,然后被唤醒,需要重新初始化核的PLL等那些参数吗?standby状态与其他两关闭状态主要区别在哪?
5、中断发生后,哪个核要进行中断服务处理是程序员事件还是硬件事件?还是两种都支持?
6、一般裸机开发用什么开发平台比较方便,用jlink或者ulink可以实现单步调试吗?
Hello Ocean0208
由于最近事情较多,实在对不起这么才回复您相关问题。
>1、如果core屏蔽了CPSR.I和CPSR.F,中断到达时,还能唤醒WFE/WFI产生的休眠吗?还是对WFI/WFE两种情况有区别?
当CPU 处于WFI standby mode时,无论CPSR.I 和CPSR.F为何值,只要有IRQ和FIQ均可以唤醒CPU
当CPU 处于WFE standby mode时,IRQ和FIQ是否可以唤醒CPU,取决于CPSR.I 和CPSR.F如何设置。
>2、看到GIC500里有个wake_request信号,是不是具体化了这个过程,即wake_request要连接到CPU的一个pin上,唤醒target CPU,接着再处理中断?
我认为这适用于不同的应用场景。Wake_request 的一个典型应用是CPU在Power down mode下reboot的处理。其基本思路就是当一个特定的core 被power down, 且GICR_WAKER.ProcessorSleep bit 被设置为1, 若此时GIC收到了只面向这个处于power down mode的core的中断时,就会尝试唤醒该处于Power down mode的core. GIC会拉高与该core对应的wake_request信号,当PMU收到该信号时,启动power up以及reboot 流程。这与处于standby mode下的自动唤醒还是有较大区别的。需要注意的是,不是所有的Core 都可以与GIC-500搭配使用。其中对于ARMv7 架构的Core来讲,只能与GIC-400/390 搭配使用。
Best Regards
Darren Ma