DSP学习笔记--时钟和系统控制

@[TOC](DSP学习)

时钟和系统控制

1:各类寄存器

时钟和系统控制寄存器
这里所有的寄存器都受EALLOW保护
PCLKCR寄存器复位之后都置0
HISPCP复位后频率为SYSCLKOUT/2
LOSPCP复位后频率为SYSCLKOUT/4
这里说了三个外设时钟控制寄存器和外设高低速两个寄存器,所以除了跟看门狗有关的三个,还有PLLSTS,PLLCR,SCSR,LPMCR0四个没说。

时钟的产生

时钟来源

这里的PLL有三种工作状态:
1:PLL Off 在进入PLL off(由PLLSTS上的PLLOFF位控制)之前,PLLCR寄存器必须设置成0x0000
2:PLL Bypass,上电后和外部复位后的默认状态,PLLCR设置成0x00,或者在PLLCR寄存器修改后PLL锁到另一个频率的之前的这段时间(存疑)。
3:PLL Enabled,PLLCR写不为0的数据进入此状态,在写数据进PLLCR的过程中,系统进入PLL Bypass状态,直到PLL锁定。
注意: PLLSTS[DIVSEL] must be 0 before writing to the PLLCR and should be changed only after PLLSTS[PLLLOCKS] = 1.

## 主振荡器失效检测电路

振荡器失效检测电路
注意事项:
1:遵循正确的操作流程去改变PLLCR寄存器的值
2:在limp mode下,别去改变PLLCR的值
—在写PLLCR的值之前要检查PLLSTS[MCLKSTS] bit = 0
3:在缺失晶振的情况下看门狗是不工作的,也不会产生复位信号。
4:limp mode不是在一上电的情况下就存在的。
—只有在晶振一开始在的情况下,PLL才会产生limp mode时钟
5:在limp mode下不要进入HALT低功耗模式
—系统会进入STANDBY或者hang,也会在HALT模式下出不去,所以在进HATL模式前要检查PLLSTS[MCLKSTS] bit = 0

这里说到了一个limp mode 及在各种状态下对进入limp mode的处理
1: PLL by-pass
—PLLCR设为0x0000,根据PLLSTS[DIVSEL]位,OSCLK除以多少加到CPU上面CLKIN。当检测到OSCCLK缺失,系统会切到PLL,置位missing clock detect status bit并产生一个 a missing clock reset,系统工作在PLL limp mode频率或者一半。
2:PLL Enable mode
—PLLCR不为0,CLKIN=OSCCLK*n/(1,2,4)置位missing clock detect status bit并产生一个 a missing clock reset,系统工作在PLL limp mode频率的一半。
3: STANDBY low power mode
—CLKIN不加到CPU,如果检测到input clock缺失,置位missing clock detect status bit并产生一个 a missing clock reset,
如果是工作在PLL by-pass模式,1/2的PLL limp frequency加到CPU,系统工作在1或者1/2或者1/4(取决于PLLSTS[DIVSEL] bit.)
4:HALT low power mode
—此状态下,所有加到系统的时钟都停止,当系统退出引模式时,发生了和STANBY low power mode一样的事情(存疑)

**

## XCLKOUT

**

XCLKOUt图片
这个应该是外部的时钟信号。

**

2: PLL Control (PLLCR) Register

**
在这个寄存器写数据前要注意的点:
1:PLLSTS[DIVSEL] bit must be 0 (CLKIN divide by 4 enabled),只有在PLL锁定后才能改变PLLSTS[DIVSEL],也就是PLLSTS[PLLLOCKS] = 1.
2:系统不能工作在limp mode,即PLLSTS[MCLKSTS] bit must be 0。
系统可以从PLLSTS[PLLLOCKS]是否置位可以得知PLL是否锁定。

PLL工作流程
PLL Control, Status and XCLKOUT Register Descriptions*
PLLCR寄存器
表格里的3个注意点要看一下:
1:寄存器受EALLOW保护
2:在改变PLLCR之前PLLSTS[DIVSEL]必须为0,PLLSTS[MCLKSTS]必须为1
3:PLLCR和PLLSTS只有在XRS和看门狗两种复位的情况下才会回到默认设置,A reset issued by the debugger or the missing clock detect logic have no effect(还有会别的复位情况吗?)
PLLSTS寄存器
在这里插入图片描述
在这里插入图片描述

**

3 :LPMCR0寄存器*

太多了,看资料去吧

**

## 看门狗
看门狗功能图
在8位的计数寄存器WDCNTR溢出之前在WDKEY寄存器中按顺序写入0x55和0xAA才能使WDKEY去复位WDCNTR
看门狗配置在复位状态,如果WDCR溢出或者写了一个错误的值到WDCR[WDCHK],则系统复位,并且WDCR[WDFLA】置位,After a reset, the program can read the state of this flag to determine the source of the reset.(这句话后半段,决定复位来源是个什么意思),复位了,软件要去清WDFLAG位,给后来复位源让位置。在标志位置位的情况下,看门狗复位是被禁止的。

**
Watchdog Reset or Watchdog Interrupt Mode
通过SCSR寄存器可以配置看门狗是复位还是中断
1:复位模式:
当计数器溢出的时候,WDRST信号拉低系统复位引脚(XRTS)512个个时钟周期
2:中断模式
WDINT信号被拉低512个时钟周期,触发PIE中的中断WAKEINT,看门狗中断为WDINT的下降沿触发,所以当WAKEINT中断在WDINT信号起来之前是关着的,那么中断就不会立刻触发,留到下次计数器溢出。
如果在WDINT还在低电平的时候将看门狗重新从中断状态配置回复位状态,则系统立刻复位,The WDINTS bit in the SCSR register can be read to determine the current state of the WDINT signal before reconfiguring the watchdog to reset mode.

低功耗模式的下看门狗
STANDBY和IDLE模式下的区别
注意点:
If the watchdog interrupt is used to wake-up from an IDLE or STANDBY low power mode
condition, then make sure that the WDINT signal goes back high again before attempting to
go back into the IDLE or STANDBY mode. The WDINT signal will be held low for 512
OSCCLK cycles when the watchdog interrupt is generated. You can determine the current
state of WDINT by reading the watchdog interrupt status bit (WDINTS) bit in the SCSR
register. WDINTS follows the state of WDINT by two SYSCLKOUT cycles.
这段还是有点不太明白,待以后再看

看门狗寄存器

**4:SCSR(system control and status register )

)**
SCSR寄存器
SCSR寄存器说明

*5:WDCNTR

WDCNTR寄存器

*6:WDKEY

WDKEY寄存器

7:WDCR

WDCR寄存器
WDCR1
InitSysCtrl()函数
此函数的功能就是将系统控制寄存器初始化到想要的状态,具体步骤可以分成四部分:
1:禁止看门狗电路
2:给PLLCR寄存器赋值以获得想要的系统时钟频率
3:给高、低速外设时钟预定标寄存器赋值以获得想要的高、低速外设时钟频率
4:对需要使用的外设时钟进行使能

未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值