双核单片机之初体验

双核单片机之初体验,第1张

 

  在市面上的单片机,如果想找出一款支持PWM、ADCUART中任意一种功能的型号,价格一般都超过人民币1块钱,而且一般都只支持其中的一到两种,除非是价格达到2~3元的型号。而如果选用前面列举参数的单片机,本身硬件已经直接支持ADC,而且还可以通过软件在不影响主程序的前提下实现高速PWM和UART功能。

  

双核单片机之初体验,1.gif,第2张

 

  上图为该双核单片机的内部构架示意图,从图可见该单片机内部有两个核,分别为FPP0和FPP1,每个核自己有独立的程序指针(PC)、堆栈指针(SP)、累加器(ACC)和状态寄存器(CF)。设计原理并不复杂,是让这两个核共享系统时钟,第一个系统时钟周期执行FPP0程序,第二个系统时钟周期执行FPP1程序,依次间隔往复,这样就可以让两个核各自运行自己的程序。

  两个核都可以访问控制RAM和特殊功能寄存器,因为在一个系统周期内只有一个核在工作,所以不会出现两个核同时写某个RAM或寄存器的状况。为了让大家更清晰地理解这个双核单片机的工作机理,下面我以问答的方式对部分特性进行说明。

  1. 两个核的程序放在什么地方?如何执行?

  样例代码:

  地址 指令

  0x000 goto main0

  0x001 goto main1

  ...

  main0:

  ...

  main1:

  ...

  回答:单片机上电后FPP0的程序指针指向0x000,FPP1的程序指针指向0x001,但是单片机系统只启动FPP0,FPP0跳转到main0开始执行该位置的代码,FPP1需要在main0代码设置相应控制寄存器位才能启动。

  系统上电只启动FPP0是为了便于程序统一初始化各特殊功能寄存器,如果在FPP0和FPP1中都分别进行初始化,很有可能造成系统配置混乱。

  2. 如果我在main1中使用跳转指令跳转到main0中,会有什么后果?

  goto main0

  goto main1

  ...

  main0:

  ...

  main0_loop:

  ...

  goto main0_loop

  ...

  main1:

  ...

  goto main0 //***这里跳转到main0中***//

  ...

  回答:编译器会报警出错,所以后果就是代码错误无法通过编译,需要删除该代码。

  3. 会不会出现两个核同时写某个RAM变量而导致写失败的情况?

  回答:每个系统时钟周期只有一个核会工作,所以不会出现两个核在同一时刻写同一地址的情况。

  4. 既然FPP1需要FPP0的程序来启动,那不启动FPP1时是不是FPP0运行速度会增快一倍呢?

  回答:启动FPP1与不启动FPP1不影响FPP0的运行速度,FPP0的速度总是系统时钟的一半,这个是由系统硬件自动进行分配的,不启动FPP1的影响是在属于FPP1的那一半时间单片机没有执行代码。

  

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/dianzi/2514828.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-05
下一篇 2022-08-05

发表评论

登录后才能评论

评论列表(0条)

保存