轻松玩转DSP:基于TMS320F2833x
上QQ阅读APP看书,第一时间看更新

第2章 片上初始化单元

2.1 时钟及控制

稳定的系统时钟是芯片工作的基本条件,F2833x的时钟电路由片内振荡器和锁相环组成。

2.1.1 时钟的产生

1.F2833x的振荡器及锁相环

二维码2.1

OSC/PLL时钟模块是为DSP片内及片上外设提供基准时钟信号。具有两种输入信号:一种是无源石英晶体,价格便宜,但体积较大;另一种是有源晶振,常用30MHz(其他频率的也有一些,但是30MHz使用最广,可替代性好)。F2833x片内振荡器及锁相环(Phase Locked Loop,PLL)结构如图2.1所示。

上述两种输入方式,F2833x提供了3种连接方式,具体见第1章。

图2.1 片内振荡器及PLL模块

振荡电路产生的时钟信号OSCCLK可不经PLL模块而直接通过多路器,再经分频得到CLKIN信号送往CPU。OSCCLK也可作为PLL模块的输入时钟,经PLL模块倍频后通过多路器,再经分频得到CLKIN信号送往CPU。

PLL模块的输出频率受锁相环控制寄存器PLLCR中的倍频系数DIV(图2.1中SysCtrlRegs.PLLCR.bit.DIV所示)和锁相环状态寄存器PLLSTS中的分频系数DIVSEL(图2.1中SysCtrlRegs.PLLSTS.bit.DIVSEL所示)影响。

2.锁相环状态寄存器PLLSTS和锁相环控制寄存器PLLCR

(1)锁相环状态寄存器PLLSTS

寄存器位寻址格式为SysCtrlRegs.PLLSTS.bit.DIVSEL,PLLSTS寄存器如图2.2所示。

图2.2 PLLSTS寄存器的位格式

(2)锁相环控制寄存器PLLCR

PLLCR寄存器如图2.3所示,位寻址格式为SysCtrlRegs.PLLCR.bit.DIV。

图2.3 PLLCR寄存器的位格式

为了得到150MHz的系统时钟,一般做法是先将30MHz的晶振10倍频,再进行2分频。读者可调用TI公司给出的参考函数void InitPll(Uint16 val,Uint16 divsel),并在函数的形参配置适当的参数:InitPll(0x0A,0x02)。

其中:

2.1.2 F28335系统时钟的分配

CLKIN经CPU后会生成系统时钟SYSCLKOUT分发给各单元,如图2.4所示。

1.高速外设时钟

系统时钟(SYSCLKOUT)经高速外设时钟预分频寄存器HISPCP(见图2.5),分频后得到高速外设时钟。高速外设时钟只提供给ADC模块使用。

如:SysCtrlRegs.HISPCP.all=0x0001;//HSPCLK=1/2×SYSCLKOUT

2.低速外设时钟

系统时钟(SYSCLKOUT)经低速外设时钟预分频寄存器LOSPCP(见图2.6),分频后得到低速外设时钟。低速外设时钟只提供给SCI、SPI及McBSP模块使用。

如:SysCtrlRegs.LOSPCP.all=0x0002;//LSPCLK=1/4×SYSCLKOUT

3.外设时钟控制寄存器

若要使用外设,必须使能该外设的时钟。外设时钟控制寄存器PCLKCR0、PCLKCR1和PCLKCR3的位格式如图2.7所示。相应位置1表示使能该外设时钟,置0表示禁止该外设时钟。另外,PCLKCR0[TBCLKSYNC]是PWM模块时基同步位使能位。

图2.4 系统时钟SYSCLKOUT的分发

图2.5 高速外设时钟预分频寄存器HISPCP的位格式

图2.6 低速外设时钟预分频寄存器LOSPCP的位格式

如禁用I2C-A时钟,使能SCI-A、ePWM5时钟,代码为

图2.7 外设时钟控制寄存器的位格式

2.1.3 F28335的看门狗电路

二维码2.2

程序可控时,是不需要看门狗这种机制的。但在有外界干扰发生的情况下,比如DSP的供电电压突然波动;芯片周围产生的EMI干扰(DSP运行时用手摸芯片所产生的静电);不严格的系统调试方法(用仿真器运行时,使用非隔离的示波器进行调试);硬件设计的缺陷(IGBT的某一次通断所产生的EMI),均会造成程序的失控。在电力电子应用中,程序失控是极其危险的,可能发出错误的触发信号,损坏IGBT等器件,甚至对使用者造成危害。

看门狗电路,即定时器电路。只要DSP上电,外部晶振开始工作(内部PLL可不工作),它就会不停地进行计数。如果在规定的时间内没有对看门狗电路的计数值清0,它就会发生溢出,产生复位信号。

用户通常将WDCR中的bit6置1来禁止看门狗电路的工作。在调试阶段这么做无可厚非,但在产品阶段这并不是一个明智的决定。就产品设计角度而言,若出现程序跑飞或死机情况系统可利用最后的保护屏障使看门狗定时器没有被按时清0而发生溢出使系统复位。如此一来,CPU被看门狗计数器的溢出事件触发复位后,所有PWM输出都将变为高阻状态,就能保证在程序跑飞时PWM触发信号全部被封锁。

1.看门狗电路组成原理

看门狗电路组成如图2.8所示。

图2.8 看门狗电路的组成

外部晶振时钟OSCCLK除以512后再经预分频寄存器(由WDCR寄存器设置)分频后产生WDCLK时钟。WDCLK作为WDCNTR计数的时基,若没有清零信号,该计数器计满后产生的溢出信号会送到脉冲发生器,产生复位信号。

为不使计数器计满溢出,需要不断地在计数器未满之前产生“清计数器”信号(该信号一方面可由复位信号产生,另一方面可由看门狗关键字寄存器WDKEY产生)。WDKEY寄存器的特点是,先写入55H,紧接着再写入AAH时,就会发出“清计数器”信号。写入其他任何值及组合不但不会发出“清计数器”信号,而且还会使看门狗电路产生复位动作。

看门狗电路复位还会由另一路“WDCHK错误”控制信号产生。WDCR控制寄存器中的检查位WDCHK必须要写入二进制的101,因为这3位的值要与二进制常量101进行连续比较,如果不匹配,看门狗电路就会产生DSP复位信号。

注1]:系统上电时,看门狗默认为使能状态。对于30MHz的晶振频率,对应的WD计数溢出时间大约是4.37ms。为避免看门狗使系统过早复位,应该在系统初始化时先对看门狗寄存器进行配置。

注2]:看门狗标志位(WDFLAG)可区分上电复位(WDFLAG=0)和看门狗复位(WDFLAG=1)。对该标志位需要软件“写1清0”。

注3]:外部晶振由于某种原因失效,则看门狗计时器停止工作。

注4]:若主程序的代码崩溃而ISR程序还在运行,则看门狗无法有效捕获崩溃的故障,也不会产生有效的DSP复位信号。一种比较有效的方法是,在main程序中写入55H,而在ISR中写入AAH。

注5]:由图2.8可知,造成看门狗计数器复位的原因:①DSP系统上电复位;②对看门狗进行有效的“喂狗”操作。由看门狗造成DSP复位的原因:①WDCHK未写入“101”;②对WDKEY写入了除55H和AAH之外的关键字;③未能及时“喂狗”造成看门狗计数器溢出。

2.看门狗电路相关寄存器

(1)看门狗关键字寄存器WDKEY(复位后为00H)

该寄存器为8位可读可写寄存器,对WDKEY的读操作并不能返回关键字的值,而是返回WDCR的内容。按照先写55H,再写AAH的顺序写入关键字时,将产生“清计数器”信号,写入其他任何值及组合不但不会发出“清计数器”信号,还会使看门狗电路产生复位动作。“喂狗”代码如下:

(2)看门狗控制寄存器WDCR

寄存器位寻址格式为SysCtrlRegs.WDCR。位定义如图2.9所示。

图2.9 看门狗控制寄存器WDCR的位定义

使能看门狗代码示例如下:

禁用看门狗代码示例如下:

(3)系统控制与状态寄存器SCSR

系统控制与状态寄存器SCSR的寄存器位寻址格式为SysCtrlRegs.SCSR。位定义如图2.10所示。

图2.10 系统控制与状态寄存器SCSR的位定义

3.程序设计

(1)设计目的

编写代码,使LED1亮1s后每隔500ms亮灭变化。使能看门狗,观察有喂狗和没有喂狗时对LED1的影响。

二维码2.3

分析:在有喂狗操作时,程序会正常工作;在没有喂狗操作时,系统会一直复位,LED1会始终处于亮状态。

(2)延时程序设计

在延时函数中加入了喂狗的代码,读者可观察在屏蔽喂狗代码和不屏蔽喂狗代码的区别。

(3)主程序设计