文章标题

来源:互联网 发布:sql group by详解 编辑:程序博客网 时间:2024/04/29 12:59

一、系统时钟

(一)时钟体系

1、时钟控制逻辑:

既可以外接晶振,然后通过内部振荡电路产生时钟源;也可以直接使用外部提供的时钟源,它们通过引脚的设置来选择。

2、时钟源:
(1)一个主振荡器
(2)一个32.768kHz低功耗振荡器
(3)一个低功耗的内部RC振荡器

3、时钟管理
(1)SLCK
(2)MAINCK
(3)PLLACK
(4)PLLBCK

如图所示:
这里写图片描述

这里写图片描述

这里写图片描述

为了降低在启动系统时对电源的要求,在系统复位后,没有使能主振荡器,而是选择了SCLK。

可以通过软件设置主振荡器寄存器Main Oscillator Register(CKGR_MOR)的MOSCEN位来使能和禁用主振荡器。

寄存器PMC_SR的MOSCS位用来指示主振荡器是否使能,当寄存器CKGR_MOR的MOSCEN位被清零后,寄存器PMC_SR的MOSCS位被自动清零,指示主振荡器被禁用。

当使能主振荡器时,必须给主振荡器计数器赋一个与主振荡器的启动时间相对应的值。在通过设置寄存器CKGR_MOR的MOSCEN位和OSCOUNT部分来使能主振荡器时,寄存器PMC_SR的MOSCS位被清零,并且启动计数器,该计数器工作时钟为SCLK的8分频,且从OSCOUNT中设置的值开始递减。由于OSCOUNT部分只有8位,所以最大可以设置为256,而SCLK的8分频为4.096kHz,所以,主振荡器的最长启动时间为62.5ms。当计数器递减为0时,寄存器PMC_SR的MOSCS位置位,此时表明主振荡器有效。可以通过设置寄存器PMC_IMR的MOSCS位来触发一个中断。

主时钟频率计数器用来检测连接于主振荡器的晶振频率,主时钟频率计数器工作时钟为主振荡器时钟,当主振荡器工作稳定后,主时钟频率计数器开始递增计数,计数周期为16个SCLK,在计满16个SCLK后,计数器停止计数,同时寄存器CKGR_MCFR(Main Clock Frequency Register)的MAINRDY位被置位,计数器的计数值可以在寄存器CKGR_MCFR的MAINF域获得,如此便可以知道连接于主振荡器的晶振频率是多少。

主时钟可以直接使用外部提供的时钟源,此时主振荡器被旁路掉(Bypass)。通过软件将寄存器CKGR_MOR的OSCBYPASS位置1和MOSCEN位清零,来旁路主振荡器,以使用外部提供的时钟源。

4、PMC(Power Management Controller)

PMC可以使能和禁用各外设的时钟输入以及ARM处理器的时钟输入。PMC提供一下时钟:

这里写图片描述

(1)主时钟控制器(Master Clock Controller)
用来控制MCK的生成,MCK主要供系统各外设和存储控制器使用。主时钟控制器对应的寄存器为PMC_MCKR,其中,CSS域(Clock Source Selection)用来选择时钟源,默认为SCLK;PRES域(prescaler)用来设置分频因子;MDIV域用来设置PCK的分频因子(此因子可以使处理器时钟快于MCK)。

每次重新设置寄存器PMC_MCKR后,寄存器 PMC_SR的MCKRDY位被清零,直到新的MCK被建立后,MCKRDY位才被置位,同时可以触发一个处理器中断。

(2)处理器时钟控制器(Processor Clock Controller)
用来实现低功耗模式(空闲模式),可以通过设置寄存器PMC_SCDR(System Clock Disable Register)来禁用PCK,可以通过读寄存器PMC_SCSR来获取PCK的状态。PCK在系统复位后被使能,当PCK被禁用后,处理器进入等待中断模式,即进行处理器空闲模式,当任一中断发生时,PCK将自动使能。

(3)USB时钟控制器(USB Clock Controller)
USB的时钟源始终未PLLBCLK,若要使用USB,必须设置PLL产生48MHz、96MHz或者192MHz的信号。

(4)外设时钟控制器(Peripheral Clock Controller)
用来控制系统外设的时钟,外设时钟在系统复位时默认是禁用的。相关寄存器为PMC_PCER(Peripheral Clock Enable Register)、PMC_PCDR(Peripheral Clock Disable Register)和PMC_PCSR(Peripheral Clock Status Register)。寄存器中的各位对应外设号,通常也对应分配给外设的中断号。

(5)可编程时钟输出控制器(Programmable Clock Output Controller)
用来控制通过引脚PCK0和PCK1输出时钟信号,相关寄存器为PMC_PCKx。

5、时钟初始化序列
(1)使能主振荡器
(2)检测主振荡器的频率(可选)
(3)设置PLLA时钟
(4)设置PLLB时钟
(5)设置MCK和PCK时钟
(6)设置可编程时钟
(7)设置外设时钟

二、GPIO接口

系统复位后默认为GPIO,由PIO控制器控制。

这里写图片描述

(一)GPIO功能

相关寄存器:
Pull-up Resistor Control
(1)PIO_PUER(Pull-up Enable Register)
(2)PIO_PUDR(Pull-up Disable Resistor)
(3)PIO_PUSR(Pull-up Status Register)
Output Control
(4)PIO_OER(Output Enable Register)
(5)PIO_ODR(Output Disable Register)
(6)PIO_OSR(Output Status Register)
(7)PIO_SODR(Set Output Data Register)
(8)PIO_CODR(Clear Output Data Register)
(9)PIO_ODSR(Output Data Status Register)
Synchronous Data Output
(10)PIO_OWER(Output Write Enable Register)
(11)PIO_OWDR(Output Write Disable Register)
(12)PIO_OWSR(Output Write Status Register)
Multi Drive Control(Open Drain)
(13)PIO_MDER(Multi-driver Enable Register)
(14)PIO_MDDR(Multi-driver Disable Register)
(15)PIO_MDSR(Multi-driver Status Register)
Inputs
(16)PIO_PDSR(Pin Data Status Register)
Input Glitch Filtering
(17)PIO_IFER(Input Filter Enable Register)
(18)PIO_IFDR(Input Filter Disable Register)
(19)PIO_IFSR(Input Filter Status Register)
Input Change Interrupt(The PIO Controller can be programmed to generate an interrupt when it detects an input change on an I/O line.)
(20)PIO_IER(Interrupt Enable Register)
(21)PIO_IDR(Interrupt Disable Register)
(22)PIO_IMR(Interrupt Mask Register)
(23)PIO_ISR(Interrupt Status Register)(When the software reads PIO_ISR, all the interrupts are automatically cleared. )

(二)外设功能
当I/O line被设置为外设用时,则I/O line的驱动由外设来控制。

相关寄存器:
I/O Line or Peripheral Function Selection
(1)PIO_PER(PIO Enable Register)
(2)PIO_PDR(PIO Disable Register)
(3)PIO_PSR(PIO Status Register)
Peripheral A or B Selection
(4)PIO_ASR(A Select Register)
(5)PIO_BSR(Select B Register)

(三)配置

1、外设A功能
(1)PIO_IDR
(2)PIO_PUER或者PIO_PUDR
(3)PIO_ASR
(4)PIO_PDR

2、外设B功能
(1)PIO_IDR
(2)PIO_PUER或者PIO_PUDR
(3)PIO_BSR
(4)PIO_PDR

3、输入功能
(1)PIO_IDR
(2)PIO_PUER或者PIO_PUDR
(3)PIO_ODR
(4)PIO_PER

4、输出功能
(1)PIO_IDR
(2)PIO_PUDR
(3)PIO_SODR或者PIO_CODR
(4)PIO_OER
(5)PIO_PER