Blackfin处理器功耗由内部功耗、外部功耗和实时钟功耗组成。内部功耗由内部动态电流和静态电流引起。外部功耗取决于处理器内外设的使用情况,在不同的应用场合,片内外设的使用有所不同,外部功耗也会不同。实时钟功耗一般处于特定范围之内,工作温度为25~85℃时,实时钟功耗范围为0.067~0.1825mW。Blackfin系列处理器提供了动态电源管理功能,灵活的对时钟频率、工作模式及内核电压进
行调整,以Blackfin533为例阐述Blackfin系列处理器低功耗设计的具体方法。
1 时钟频率控制
现代DSP芯片中大量使用CMOS FET(Complementary Metal-oxide Semiconductor FET互补金属氧化物场效应管)开关,稳定时或者处于完全打开状态(很低的负载),或者处于完全关闭状态,但是在两种状态转换过程中会产生漏电流,所以开关频率很高时,FET充放电会引起很大的电源功耗。因此,通过降低系统时钟频率可以有效降低系统功耗。
Blackfin533通过外部时钟输入引脚CLKIN接收外部时钟源(10~40 MHz)的时钟输入,再通过锁相环(PLL),电路模块产生内核时钟(CCLK)和系统时钟(SCLK),通过设置PLL相关寄存器实现对CCLK和SCLK的频率控制。PLL系统如图l所示。
CCLK和SCLK均由VCO(Voltage-ControlledOscillator-压控振荡器)输出的时钟分频后得到。VCO输出时钟频率由PLL控制寄存器(PLL_CTL)设置,CCLK和SCLK对VCO的分频因子由PLL分频寄存器(PLL_DIV)设置。PLL_CTL各位说明如表1所示。
对于不同的DF和MSEL值,VCO输出相应的时钟频率,对应关系如表2所示。
需要注意的是VCO最小输出时钟频率为50 MHz,最大输出频率为内核时钟CCLK频率的最大值。对BlackfinBF533,CCLK最大值为600 MHz,而BF532/531的CCLK最大值为400 MHz。所以VCO输出频率不应超出范围50MHz~CCLK。
通过设置PLL分频寄存器PLL_DIV中的CSEL(PLL_DIV的4~5位)确定CCLK,设置SSEL(PLL_DIV的0~3位)确定SCLK,具体对应关系如表3所示。
由于SCLK频率不能高于CCLK的频率,所以在对SSEL参数设置时,需要确定当前CCLK的频率。
假设外部时钟输入CLKIN=27 MHz,将CCLK设置为594 MHz(27×22),SCLK设置为118.8 MHz(594/5),程序代码如下
2 工作模式转换
Blackfin533具有4种工作模式:全速、激活、睡眠、深度睡眠,功耗大小关系为:全速>激活>睡眠>深度睡眠。不同模式下处理器的内核电压及时钟设置不同,如表4所示。所以灵活调整系统的工作模式可以有效的降低系统的功耗。
在转换工作模式时,应该明确处理器当前的工作模式,而系统的工作模式由PLL控制寄存器(PLL_CTL)中的PLL_OFF,BYPASS,STOPCK和PDWN状态位共同确定。图2说明了各种工作模式转换之间的联系以及转换条件。
通过设置PLL_CTL寄存器实现工作模式的转换,新的设置不会立即生效,需要先执行下面的一个程序段
从当前工作模式转换至另一个工作模式的具体过程简述如下
(1)设置唤醒请求,目的:将处理器唤醒,使PLL_CTL中新的设置生效以便进入新的工作模式。
(2)按模式转换条件,设置PLL_CTL。
(3)禁止一切中断,将处理器置入空闲状态,等待唤醒请求。
(4)唤醒后恢复中断,PLL_CTL中设置的新值开始生效,处理器进入新的工作模式,继续执行其他指令。
默认状态下,所有的中断都能产生1个唤醒请求,即当1个中断产生时,处理器内核就会收到1个唤醒请求,如果此时处于空闲状态,则会退出此状态,处理相应(中断)程序。通过系统中断唤醒使能寄存器(SIC_IWR)设置中断与唤醒请求之间的对应关系,其中24~31位保留,其他位分别对应了不同的中断源,如定时器中断、看门狗定时器中断、DMA中断等,某一位如果置1,则相应中断发生时就会产生1个唤醒事件。系统复位后,SIC_IWR中的所有位均为1。
工作模式转换的关键就是对PLL_CTL的设置,这就要求确认系统当前的工作模式,再根据图2所示的转换条件设置PLL_CTL寄存器。另外必须设置唤醒请求,因为它有助于确定处理器何时被唤醒,进入预期的工作状态。
下面是一个从全速模式到激活模式转换的实例:
对唤醒请求进行设置,本例中利用看门狗定时器中断来产生这个唤醒请求。
(1)设置定时器的计数值:通过看门狗计数寄存器(WDOG_CNT)设置。
(2)设置相应事件:当定时器计数至O时产生中断,即看门狗控制寄存器(WDOG_CTL)第3位置1,其余位为0。
(3)利用看门狗中断产生唤醒请求:SIC_IWR寄存器第24位置1,其他位为0,使能看门狗中断唤醒请求。
3 片内外设控制
系统设计中不是所有外设都能用到,而系统具体运行过程中,有些外设也不需要一直工作。所以,在适当的时候可以通过禁用不使用的外设来降低系统的功耗。Blackfin535有专门的外设时钟寄存器(PLL_IOCK),统一控制所有外设的时钟,禁用某外设只需要将PLL_IOCK中对应位置0即可。Blackfin533/532/531没有这种统一的时钟控制寄存器,只能通过每个外设的控制寄存器来使能或禁用外设。
4 内核电压控制
Blackfin系列处理器通过片内的调压器可以将外部的2.2~3.6 V的供电电压转换成0.85~1.2 V,为内核供电。由于功耗与电压的平方成正比,降低内核电压可有效降低系统功耗。片内的调压器需要搭配一定的外部电路才能实现其调压功能,外部电路图3所示。
VDDEXT为I/O供电电压,VDDINT为内核供电电压,VROUT为外部FET/BJT驱动,用于控制开关频率。
通过调压器控制寄存器(VR_CTL)的VLEV(4~7位)来设置内核电压值,VLEV与电压值的对应关系,如表5所示。
修改VR_CTL的VLEV值可将内核电压控制在0.8~1.2 V,也可以将内核供电完全关闭,即将VR_CTL中的FREQ(O~1位)设置为00,此时内核时钟和系统时钟都会停止工作,而内核电压为0。修改内核工作电压的程序段需要放在对PLL_CTL设置程序之后执行。