电子说
前言
SCR是Standby Controller的简称,是以8051内核为基础的CPU。本视频首先介绍了MCU的两个域,接着介绍了SCR的架构,其中包括SCR和主核的通信,SCR唤醒源,SCR的外设资源等内容,最后介绍了SCR的调试方法以及示例程序。
正文
1.Overview
分离的IO:也就是一部分IO是处于High performance domain里面的,另一部分IO是处于low power domain里面的。
High performance domain一般使用Vext或者Vddm或者Vflex作为参考电源,Low power domanin使用Vevrsb作为参考电源的。
在TC3xxx芯片里面,Pin33和Pin34口是处在Low power domain的,是使用Vevrsb作为参考电源的。
2.System Architecture:Standby Domain
深灰色:Swtich Off,在进入到Standby模式后就被关闭了,因为EVRC和EVR33都关掉了,所以TC3xx的内核(Tricore)以及VDDP3已经没有电了,所以进入Standby后内核是断电了的,那么从Standby唤醒走的流程和Power On Reset走的流程是差不多的。
浅灰色:Optional,可选的模块,进入到Standby模式后可以选择开启或者关闭。SCR(Standby Controller)和Wake-up Timer(WUT)以及Pin Wake-up unit等(灰色部分)是相互独立的,一个选择关闭后剩下的可以选择关闭或者开启。
白色:Always on,永远在工作的。EVR LDO Preregulator可以产生一个和内核电压一样大小的电压VDDPD = 1.25V,给Standby RAM(CPU0 dLMU...)以及EVRC,EVR33供电。PLPBG Low Power Bandgap是用来Monitor监控SHPBG High Precision Bandgap的。
SHPBG High Precision Bandgap的作用是作为Second monitor的参考源,就是在做电源监控的时候可以设置一个电源的范围,采集电源ADC值和设置的电源电压范围进行比较。SHPBG High Precision同时是SCR里面ADC的参考源。Pin Wake-up unit可以有PINA和PINB两种唤醒源,而PORST/ESR1/PINA是处于Core Domain的,如果Core Domain和Standby Domain共轨的话,这些引脚(PINA/PINB)都是可以作唤醒源的。
但是在上图图中Standby Domain和Core Domain用了独立的电源,一旦Main Supply断电的话,PINA就无法作为唤醒引脚了。这种独立供电的方式除了SCR,WUT,PINB可以作为唤醒源外,VEXT(Core Domain的主电源)也可以作为唤醒源,比如VEXT上升到某个阈值的时候唤醒Core Domain(下降到某个阈值的时候进入到Standby mode)
3.SCR Architecture
SCR本身是一个8051核,SCR的代码是运行在XRAM的,数据也存放在XRAM。存放在XRAM的数据如果要去访问的话,需要使用DBTR寄存器,当成扩展的ROM去访问它。
SCR和主核TriCore间有多种访问方式:
1)主核和SCR之间可以互相发送中断
2)Shawdow Register也就是映射寄存器相互访问,比如在SCR设置了SCRINTEXCHG寄存器后,在Tricore的PMSWCR2.SCRINT寄存器位域就会相应改变,利用这个特性可以做一些简单的调试,比如让SCR全速运行起来,运行到不同地方设置SCRINTEXCHG不同的值,在Tricore里面就可以通过PMSWCR2.SCRINT监控SCR的运行到哪里了。使用这种调试方式的话,Tricore就不能进入休眠。
3)P33和P34这两组pin脚可以归属于Tricore也可以归属于SCR,由PCSR寄存器配置。所以在进入Standby之前需要将P33和P34的控制器权交给SCR。
SCR除了普通的IO唤醒监控外,还支持很多的外设唤醒监控,比如特定帧CAN唤醒。
SCR支持多种唤醒源,用的比较多的是Software request,也就是往SCU_STDBYWKP.SCRWKP寄存器位域里面写入1就唤醒主核了,大部分的唤醒功能都是用这个功能去做的。对于IO的将车,SCR有自己的外部中断,但一个跳变沿过来的时候,首先会进入到SCR的中断,在中断里面设置SCU_STDBYWKP.SCRWKP唤醒主核。
Aurix 1G上的SCR Block Diagram,Aurix 2G上的SCR相比于1G上的SCR做了一些改变,比如原来的XRAM是挂在SPI下面的,访问Aurix 1G的XRAM需要使用SPI接口。
Aurix 2G的XRAM直接挂在SPB总线下面,访问XRAM直接通过通过地址访问,更加便捷。
XC800核集成了T0 T1 UART三个外设,其他的RTC,WDT,T2CCU,SSC都是扩展的外设。SCR_P00.0 - SCR_P00.7对应Tricore的SCR_P33.0 - SCR_P33.7,SCR_P01.0对应Tricore的P34.1, SCR_P01.1- SCR_P01.7对应Tricore的SCR_P33.9 - SCR_P33.15。
主核即使进入休眠了,也可以通过OCDS/JTAG/DAP/SPD口来调试SCR。
16-bit看门狗只有低八位可以设置。
可以选择70KHz的Standby clock时钟,也可以选择100MHz的back up clock。
没有喂狗或者错误的窗口喂狗都会产生Watch Dog的Event,这个Event首先会产生一个NMI的中断,类似一个Prewarning的中断,这个中断发生以后,再等0x30(48)个时钟周期后发生Reset(Reset是Enabled),这个Prewarning的中断(NMI)一旦发生以后,就算再去喂狗,依然在48个cycle以后还会发生Reset。
SCR的看门狗的Event(NMI Request)可以用来唤醒主核,前提是SCU_STDBYWKP.WDTWKSEL设置为1。
RTC事件产生的Interrupt Request可以用来唤醒主核,前提是SCU_STDBYWKP.RTCWKSEL设置为1。
T2CCU可以用来作PWM的输入捕获和PWM的输出控制。
在SCR里面有一个Wake-up CAN的通道,不是我们常规见的CAN Node,仅仅嵌入了CAN的一个Filter,但我们收到的CAN Frame和Filter中预设的ID匹配的话,就产生一个Wake-up的Event,不是通常意义上的CAN Module,只能收不能发CAN报文。收报文的引脚也有很多个,如图所示。
4.Debug System
调试SCR可以使用主核的DAP口(主核不能休眠),也可以使用SCR私有的DAP口。
两种调试SCR的方法:
方法1:SCR的SCRINTEXCHG寄存器映射到shadow Register,也就是主核的PMSWCR2.SCRINT,SCR在不同的地方设置SCRINTEXCHG不同的值,Tricore中查看PMSWCR2.SCRINT值就可以知道SCR的当前的状态。
方式2:主核访问XRAM,可以直接通过地址访问,SCR访问XRAM需要使用DPTR指令,当成扩展的RAM来使用。
可以在XRAM里面开辟一个区域,比如说这个区域的前面一段是SCR to Tricore的信息,后面半段是Tricore to SCR的信息,通过这种方式可以作一些参数的交互。
5.SCR SW Framework
SCR的代码放在SCR的目录下面,SCR的编译器Config_8051_Tasking目录下的Config_Tasking.mk里面(主要就是设置c51的编译器路径,Taking支持c51芯片的编译),编译完成后就会产生.Hex文件,使用0_Utilities目录下的Hex2CArrray tool将.Hex转成CArray这样的C文件。
在运行SCR之前,第一步是使能SCR,第二部是把SCR mode设置为Programmer Mode(SCR boot mode,通过寄存器设置),第三步就是把CArray里面内容写道XRAM里面,第四步把SCR的boot mode设置为Normal mode,SCR就跑起来了,SCR跑起来以后,MCU就可以进入它的Standby mode,在进入Standby mode之前需要把唤醒源配置好。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !