1、ARM Cortex-M4学习与实践,山东大学智能车工作室 纪成 2013年3月,山东大学 Kinetis培训,基于飞思卡尔Kinetis系列,山东大学 Kinetis培训,飞思卡尔Kinetis功能特性,K60开发生态系统介绍,IAR+Jlink开发K60方法,K60代码框架分析,K60外设资源在智能车中的应用,K60学习资源整理,1、ARM发展史,一、飞思卡尔Kinetis功能特性,山东大学 Kinetis培训,2、ARMv7处理器分类,3、ARM Cortex-M4特性,4、飞思卡尔Kinetis家族介绍,5、K60内部资源介绍,ARM发展史,山东大学 Kinetis培训,ARM架构发展
2、历程,ARMv7处理器分类,山东大学 Kinetis培训,ARMv7根据应用分类:,应用处理器(Cortex-A系列)Aplication Processor,实时控制器(Cortex-R系列)Real-time Processor,微控制器(Cortex-M系列)Micro Controller,ARM Cortex-M4特性,ARM Cortex-M4处理器是在M3的基础上强化了运算能力,采用一个扩展的单时钟周期乘法累加(MAC)单元,优化的单指令多数据(SIMD)指令,饱和运算指令和一个可选的单精度浮点单元(FPU),源于Cortex-M4系列一些创新性的技术,包括: RISC处理器内核
3、,高性能32位CPU、具有确定性的运算、低延迟3阶段管道,可达1.25DMIPS/MHz; Thumb-2指令集,16/32位指令的最佳混合,提供最佳代码密度; 低功耗模式,支持多种状态低功耗模式; 嵌套矢量中断控制器(NVIC),低延迟、低抖动中断响应、支持以纯C编写中断服务例程,能出色的完成中断处理; 广泛的工具和RTOS支持,广泛的第三方工具支持、Cortex微控制器软件接口标准(CMSIS)最大限度缩短开发周期和难度; CoreSight调试和跟踪,JTAG和2针串行线调试(SWD)连接、支持多处理器、支持实时跟踪。,山东大学 Kinetis培训,飞思卡尔Kinetis家族,山东大学
4、Kinetis培训,飞思卡尔Kinetis家族,山东大学 Kinetis培训,飞思卡尔Kinetis K系列,山东大学 Kinetis培训,增加段式液晶的驱动,增加USB功能,增加模拟测量引擎,以太网和硬件加密,增加USB功能,增加图形液晶驱动,增加以太网,硬件加密,温度检测和DRAM控制器,Kinetis 命名规则,山东大学 Kinetis培训,K60内部资源介绍,山东大学 Kinetis培训,K60内部资源介绍,山东大学 Kinetis培训,K60内部资源介绍,山东大学 Kinetis培训,K60内部资源介绍,山东大学 Kinetis培训,山东大学 Kinetis培训,二、K60开发生态系
5、统,软件应用,调试工具,开发环境,其他支持,Kinetis开发环境,支持Kinetis开发的IDE(集成开发环境)目前主要包括CodeWarrior10.1及以上版本,IAR6.1及以上版本和Keil MDK(即Keil for ARM)等。,山东大学 Kinetis培训,Kinetis开发环境,山东大学 Kinetis培训,CodeWarrior10.2,Kinetis开发环境,山东大学 Kinetis培训,IAR 6.3,Kinetis开发环境,山东大学 Kinetis培训,开发环境对比,山东大学 Kinetis培训,Kinetis调试工具,目前Kinetis的调试工具主要有飞思卡尔自己的
6、OSBDM及USBDM、P&E Multilink、J-Link和ulink等等,其中JLink(目前发展到V8版本)以其支持范围广、价格便宜、速度快等优势得到广泛应用。,山东大学 Kinetis培训,J-Link,P&E Multilink,OSBDM,山东大学智能车工作室根据开源资料,自行设计了OSBDM调试器和USBDM调试器,其中OSBDM由飞思卡尔官方开源,目前由P&E公司维护,USBDM由网友pgo开源和维护。,经过二次设计和完善,目前山大设计的OSBDM分别支持CW、IAR和Keil MDK三种开发环境,而且支持飞思卡尔几乎全系列MCU,包括:Freescale HCS12/HC
7、S12(X)/HCS08(已测试MC9S12DG128、MC9S08JM60)Freescale Coldfire V1,V2,V3,V4(已测试MCF52259)Freescale DSC全系列(已测试MC56F8366)Freescale PowerPC架构的Qorivva系列(已测试MPC5604B)Freescale Cortex-M4核的Kinetis系列(已测试K10、K60),Kinetis调试工具,山东大学 Kinetis培训,Kinetis开发板,山东大学 Kinetis培训,山东大学 Kinetis培训,三、IAR+Jlink开发K60方法,IAR+Jlink开发K60方法
8、,山东大学 Kinetis培训,山东大学 Kinetis培训,四、K60代码框架分析,K60上电启动顺序,山东大学 Kinetis培训,(1)上电起初,单片机的电压调节器会把整个系统置于POR(上电复位)状态的上电阶段,一直到工作电压达到了可以让单片机正常工作的电压阈值之后才释放这个上电阶段,进入复位阶段; (2)在复位保持期间,由单片机内部的模式控制复位逻辑统筹支配整个复位阶段的执行顺序; (3)首先MCG模块使能,并默认为FEI时钟模式; (4)相应模块的时钟使能,包括Coreclock,Systemclock,Flashclock,busclock等这些不需要门控(clock gate,
9、M4的特色)控制的时钟; (5)Flash控制器从复位状态释放(注意这时外部RESET脚仍然保持低电平),并且执行一系列的初始化操作(因为要为接下来的代码执行做准备了);,K60上电启动顺序,山东大学 Kinetis培训,(6)单片机/RESET引脚释放,但是系统复位状态继续保持,一直到上面的Flash控制器初始化完毕(如果Flash控制器提前初始化好,则/RESET引脚释放后立即从POR状态苏醒); (7)Kinetis从复位状态唤醒之后,开始设置堆栈(stack),程序计数器(PC)和连接寄存器(LR),即从中断向量表地址0读取内容给堆栈指针,地址4读取内容给PC指针,LR寄存器设置为0x
10、FFFF_FFFF。 (8)上面三个寄存器设置好了之后,单片机就开始从PC指针指向的地址开始执行代码了,即进入启动代码阶段,最后才转到main开始执行。,K60启动代码分析,山东大学 Kinetis培训,RestHandler,清零通用寄存器组,跳转到Kinetis_Start_C,关闭看门狗,如果从ROM启动,则复制中断向量表到RAM中,修改中断向量表地址为RAM中的地址,复制初始化数据段.data到RAM,把以ram_function声明的函数拷贝到RAM中,清零RAM中初始化为0的.BSS段,初始化锁相环PLL,跳转到main函数,内存映射.map文件分析,山东大学 Kinetis培训,
11、山东大学 Kinetis培训,五、K60外设资源在智能车 中的应用,K60外设资源在智能车中的应用,K60高精度高速的AD,可以有效的采集传感器模拟参数; K60的每个IO都可以设置为中断触发源,为智能车硬件设计提供更大的灵活性; K60的FTM模块可以提供PWM通道,控制智能车的舵机和电机; K60的PIT模块实现周期性中断,提供时间基准,或者与LPTMR模块的脉冲累加功能实现速度测量; K60使用ARM Cortex-M4的核,具有1.25DMIPS/MHz的运算能力,另外还有单时钟周期乘法累加(MAC)单元,优化的单指令多数据(SIMD)指令、饱和运算指令等,使更加复杂的处理算法的实现成
12、为可能。,山东大学 Kinetis培训,K60外设资源,山东大学 Kinetis培训,GPIO模块,山东大学 Kinetis培训,GPIO模块需要考虑如下几个寄存器:PORTx_PCRn端口控制寄存器,管理管脚复用GPIOx_PDDR端口数据方向寄存器GPIOx_PDOR端口数据输出寄存器GPIOx_PDIR端口数据输入寄存器GPIOx_PTOR端口输出翻转寄存器,GPIO模块,山东大学 Kinetis培训,PORTx_PCR,MUX-管脚复用控制,PE-拉电阻使能0禁能上拉或者下拉电阻1禁能上拉或者下拉电阻,PS-拉电阻属性设置0使能下拉电阻1使能上拉电阻,GPIO模块,山东大学 Kinet
13、is培训,GPIOx_PDDR,GPIO模块,山东大学 Kinetis培训,GPIOx_PDOR,GPIO模块,山东大学 Kinetis培训,GPIOx_PDIR,GPIO模块,山东大学 Kinetis培训,GPIOx_PTOR,GPIO模块,山东大学 Kinetis培训,例程:,PORTE_PCR(10) |= PORT_PCR_MUX(1); /使能PTE10为GPIOGPIOE_PDDR |= 1 10; /设置PTE10为输出GPIOE_PDOR /设置PTE10输出为0,A/D模块,山东大学 Kinetis培训,K60的AD模块特点:,(1)最高16位AD转换精度,逐次逼近型的,所以
14、速度没问题,而且能做到如此精度已实属不易了,再往高估计就该换-的了;(2)最多4对差分模拟输入通道和24个单端模拟输入通道,对一般工业应用足够了;(3)输出精度可选,差分模式可编程16位,13位,11位和9位模式,单端模式可编程为16位,12位,10位和8位;(4)输入时钟可选四种时钟,即bus_clock,bus_clock/2,ALTCK,ADACK;(5)内设内部温度传感器,用于监控芯片温度;(6)硬件平均功能,对AD转换结果在队列里平均之后输出;(7)带自校准模式;(8)最高64倍PGA(programable gain Amplifier)。,A/D模块,山东大学 Kinetis培训
15、,A/D模块需要考虑如下几个寄存器:ADCx_SC1nADC状态及控制寄存器1ADCx_CFG1ADC配置寄存器1ADCx_CFG2ADC配置寄存器2ADCx_RnADC结果寄存器ADCx_SC2ADC状态及控制寄存器2,A/D模块,山东大学 Kinetis培训,void ADC_Init1(void) SIM_SCGC3 |= (SIM_SCGC3_ADC1_MASK ); /打开 ADC1 门控时钟ADC1_CFG1 = ADC_CFG1_ADIV(3) /输入时钟8分配 | ADC_CFG1_MODE(0) /8位精度| ADC_CFG1_ADICLK(0); /时钟源为Busclk A
16、DC1_SC2 = 0;ADC1_SC1A = ADC_SC1_ADCH(20); /选择AD1_20通道ADC1_SC1A /禁止转换完成中断 ,ADC初始化函数:,A/D模块,山东大学 Kinetis培训,void Read_ATD1(uint8 *pbuf ,uint16 len) doADC1_SC1A |= ADC_SC1_ADCH(20); / 写入ADCx_SC1A触发转化 while(!(ADC1_SC1A ,ADC读函数:,PWM模块,山东大学 Kinetis培训,FTM模块的特点:1、时钟源可选择,FTM的时钟源可以来自系统时钟或外部时钟。可对时钟分频,分频比为1,2,4,
17、8,16,32,64,128,这属于定时器的特性;2、最多3个FTM定时器FTM0、FTM1、FTM2,即可以有3个自由计数器,也即可以存在独立的3路PWM模块;3、所有的通道都可以设置为中心对齐的PWM输出模式,且某个FTM定时器中的每对通道都可以级联以产生PWM信号;4、 PWM通道可成对工作在相同输出或互补输出,也可各通道独立输出,当通道成对互补输出时可使用死区插入功能,这对一些全桥控制电路有很大意义,省去了外围死区电路;5、可软件控制PWM的输出,即屏蔽或者开启单独某个通道。,PWM模块,山东大学 Kinetis培训,PWM模块需要考虑如下几个寄存器:PORTx_PCR端口控制寄存器
18、FTMx_MODE特征模式选择寄存器FTMx_SC状态及控制寄存器 FTMx_OUTINT通道输出初始状态寄存器FTMx_CNT计数寄存器 FTMx_OUTMASK输出屏蔽寄存器FTMx_MOD模数寄存器(周期寄存器)FTMx_CnSC通道状态及控制寄存器FTMx_CnV通道值寄存器(占空比寄存器)FTMx_CNTIN计数器初始值寄存器,PIT模块,山东大学 Kinetis培训,PIT模块,山东大学 Kinetis培训,PIT模块需要考虑如下几个寄存器:PIT_MCRPIT模块控制寄存器PIT_LDVALn定时器加载寄存器PIT_TCTRn定时器控制寄存器PIT_TFLGn定时器标志寄存器,P
19、IT模块,山东大学 Kinetis培训,PIT_MCR,PIT模块,山东大学 Kinetis培训,PIT_LDVALn,PIT模块,山东大学 Kinetis培训,PIT_TCTRL,PIT模块,山东大学 Kinetis培训,void PIT_Init(void) SIM_SCGC6 |= SIM_SCGC6_PIT_MASK; / 打开 PIT 时钟 PIT_TCTRL0 / 开始定时,PIT初始化函数:,PIT模块,山东大学 Kinetis培训,void PIT0_ISR(void) PIT_TCTRL0 /*Insert your Code*/,PIT中断服务函数:,学习资料整理,网络资料
20、: 1.http:/ 2. http:/www.freescaleic.org/bbs/forum_891.html 飞思卡尔技术社区Kinetis分区; 3.http:/ 飞思卡尔官方Kinetis主页 4、飞思卡尔官方论坛https:/ 教材资料:嵌入式系统原理与实践ARM Cortex-M4 Kinetis微控制器 王宜怀 电子工业出版社,山东大学 Kinetis培训,K60学习资料整理,推荐文章链接1、【原创】从零入手Kinetis系统开发(九)之中断使用方法 http:/ 2、【原创】从零入手Kinetis系统开发(十三)之PWM模块http:/ 3、Kinetis时钟模块MCG详解 http:/ 4、飞思卡尔Kinetis 60(K60)时钟系统分析 http:/ 5、【原创】从零入手Kinetis系统开发(十一)之FlexBus模块 http:/ 6、【原创】手把手教你安装破解IAR For ARM 6.3 http:/ Kinetis培训,邮箱:,Thanks,欢迎提问,