《指令集和时钟讲解.ppt》由会员分享,可在线阅读,更多相关《指令集和时钟讲解.ppt(21页珍藏版)》请在三一办公上搜索。
1、第4章,指令集和时钟,目录,4.1 Thumb-2指令集介绍4.2 指令格式4.3 Cortex-M3时钟控制,目录,4.1 Thumb-2指令集介绍4.2 指令格式4.3 Cortex-M3时钟控制,4.1 Thumb-2指令集介绍,Cortex-M3处理器支持Thumb-2指令集,与采用传统的Thumb指令集的ARM7相比,避免了ARM状态与Thumb状态来回切换所带来的额外开销,所有工作都可以在单一的Thumb状态下进行处理,包括中断异常处理。Cortex-M3处理器支持的Thumb-2指令集基于精简指令集计算机(RISC)原理设计,是16位Thumb指令集的一个超集,同时支持16位和3
2、2位指令,指令集和相关译码机制较为简单,在一定程度上降低了软件开发难度。,ARM与Thumb指令集的关系:Thumb指令集是ARM指令集的压缩子集,Thumb指令集(16位),ARM指令集(32位),Thumb与Thumb-2和Cortex-M3指令集的关系,Cortex-M3指令集(16位和32位),Thumb指令集(16位),Thumb-2指令集(16位和32位),目录,4.1 Thumb-2指令集介绍4.2 指令格式4.3 Cortex-M3时钟控制,4.2 指令格式,详细的ARM、Thumb和Cortex-M3指令见word文档指令集大多数工程应用使用C语言进行开发,很少使用汇编语言,
3、只要大概了解汇编指令即可。汇编语言用于阅读和编写启动代码,操作系统移植、C与汇编混合编程等场合。,ARM数值处理指令的格式:S,其中号内的项是必须的,号内的项是可选的。各项的说明如下:opcode:操作码,指令助记符,如LDR、MOV等;cond:执行条件,如EQ,HI等,共4位,对应15种条件(1111系统保留);S:是否影响CPSR寄存器的值;但当目的寄存器为PC时,S后缀表示将SPSR的内容恢复到CPSR中,此种用法多用于异常处理返回。Rd:目标寄存器;Rn:第1个操作数的寄存器;operand2:第2个操作数;举例:ADDS R0,R1,R2,LSL#3;R0=R1+R2*8,影响条件
4、标志位STM32启动代码阅读示例“startup_stm32f10 x_hd.s”,目录,4.1 Thumb-2指令集介绍4.2 指令格式4.3 Cortex-M3时钟控制,4.3 Cortex-M3时钟控制,1.STM32时钟系统概述,1)系统时钟源有3种来源:HSI(内部高速RC时钟)8MHzHSE(外接高速时钟)416MHz,典型值8MHzPLL(锁相环时钟)最大72MHz若未进行时钟设置,系统时钟默认使用HSI 8MHz时钟。还有以下2种二级时钟源:40kHz低速内部RC LSI,可以用于驱动独立看门狗和通过程序选择驱动RTC。RTC用于从停机/待机模式下自动唤醒系统。32.768kH
5、z低速外部晶体LSE,也可用来通过程序选择驱动RTC(RTCCLK)。当不被使用时,任一个时钟源都可被独立地启动或关闭,由此优化系统功耗。,STM32时钟树,参考 STM32中文参考手册V10P56,2)总线时钟HCLK(高速时钟,AHB时钟)最大72MHzFCLK(自由时钟,Cortex自由运行时钟)最大72MHzPCLK1(APB1时钟,低速APB时钟)最大36MHzPCLK2(APB2时钟,高速APB时钟)最大72MHz3)各外设使用的时钟系统时钟定时器STK:可设置为HCLK或HCLK的8分频ADC:PCLK2(APB2时钟)经2/4/6/8分频定时器:可设置为与所在APB总线时钟一致
6、或是2倍RTC:可使用LSE(32.768kHz外部低速时钟)、HSE/128或LSIIIS:系统时钟SYSCLK独立看门狗:LSI(40KHz低速内部时钟)时钟USB:PLLCLK的1/1.5分频得到的48MHz时钟,4)系统时钟(SYSCLK)选择 系统复位后,HSI振荡器被选为系统时钟。当时钟源被直接或通过PLL间接作为系统时钟时,它将不能被停止。只有当目标时钟源准备就绪了(经过启动稳定阶段的延迟或PLL稳定),从一个时钟源到另一个时钟源的切换才会发生。在被选择时钟源没有就绪时,系统时钟的切换不会发生。直至目标时钟源就绪,才发生切换。在时钟控制寄存器(RCC_CR)里的状态位指示哪个时钟
7、已经准备好了,哪个时钟目前被用作系统时钟。当HSI被用于作为PLL时钟的输入时,系统时钟能得到的最大频率是64MHz。,5)时钟输出 微控制器允许输出时钟信号到外部MCO引脚。相应的GPIO端口寄存器必须被配置为相应功能。以下四个时钟信号可被选作MCO时钟:SYSCLK HSI HSE PLLCLK,时钟控制寄存器RCC_CR时钟配置寄存器RCC_CFGRAPB2外设复位寄存器RCC_APB2RSTRAPB1外设复位寄存器RCC_APB1RSTRAHB外设时钟使能寄存器RCC_AHBENRAPB2外设时钟使能寄存器RCC_APB2ENRAPB1外设时钟使能寄存器RCC_APB1ENR另外3个寄
8、存器(时钟中断寄存器RCC_CIR、备份域控制寄存器 RCC_BDCR、控制/状态寄存器 RCC_CSR)不常用,详见STM32中文参考手册V10第6章复位和时钟控制,2.时钟系统相关寄存器,3.时钟系统编程示例,复位后系统时钟默认使用8MHz HSI,若要设置使用HSE经PLL倍频输出72MHz,则时钟系统设置的一般步骤如下:1)复位时钟2)打开外部高速时钟HSE(RCC_CR)3)等待外部高速时钟HSE就绪(RCC_CR)4)设置PLL倍频系数和总线预分频系数(RCC_CFGR)5)选择PLL源(RCC_CFGR)6)使能PLL(RCC_CR)7)等待PLL锁定(RCC_CR)8)选择PL
9、L输出为系统时钟(RCC_CFGR)9)等待PLL输出为系统时钟成功(RCC_CR)10)打开各外设时钟(RCC_AHBENR、RCC_APB2ENR、RCC_APB1ENR),本STM32开发平台使用8MHz外部时钟,经PLL倍频(9倍)后系统时钟SysCLK=72MHz,FCLK=HCLK=72MHz,PCLK1=36MHz,PCLK2=72MHz。,RCC-APB1RSTR=0 x00000000;/复位结束 RCC-APB2RSTR=0 x00000000;RCC-AHBENR=0 x00000014;/睡眠模式闪存和SRAM时钟使能.其他关闭.RCC-APB2ENR=0 x00000
10、000;/外设时钟关闭.RCC-APB1ENR=0 x00000000;RCC-CR|=0 x00000001;/使能内部高速时钟HSION RCC-CFGR/关闭所有中断/以上代码确保RCC复位,可省略,RCC-CR|=0 x00010000;/外部高速时钟使能HSEONwhile(!(RCC-CR17);/等待外部时钟就绪RCC-CFGR=0X00000400;/APB1=DIV2;APB2=DIV1;AHB=DIV1;RCC-CFGR|=7CFGR|=1ACR|=0 x32;/FLASH 2个延时周期RCC-CR|=0 x01000000;/PLLONwhile(!(RCC-CR25);
11、/等待PLL锁定RCC-CFGR|=0 x00000002;/PLL作为系统时钟 while(temp!=0 x02)/等待PLL作为系统时钟设置成功 temp=RCC-CFGR2;temp,RCC-APB2ENR|=(1APB2ENR|=(1APB2ENR|=(1APB2ENR|=(1APB2ENR|=(1APB2ENR|=(1APB2ENR|=(1APB2ENR|=(18);/使能PORTG时钟,阅读提示:#define _IO volatiletypedef unsigned int uint32_t;typedef struct _IO uint32_t CR;_IO uint32_t
12、 CFGR;_IO uint32_t CIR;_IO uint32_t APB2RSTR;_IO uint32_t APB1RSTR;_IO uint32_t AHBENR;_IO uint32_t APB2ENR;_IO uint32_t APB1ENR;_IO uint32_t BDCR;_IO uint32_t CSR;uint32_t RESERVED0;_IO uint32_t CFGR2;RCC_TypeDef;#define RCC(RCC_TypeDef*)RCC_BASE)#define RCC_BASE(AHBPERIPH_BASE+0 x9000)#define AHBPERIPH_BASE(PERIPH_BASE+0 x18000)#define PERIPH_BASE(uint32_t)0 x40000000),