从零入手Kinetis系统开发.docx
- 文档编号:15843774
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:52
- 大小:72.78KB
从零入手Kinetis系统开发.docx
《从零入手Kinetis系统开发.docx》由会员分享,可在线阅读,更多相关《从零入手Kinetis系统开发.docx(52页珍藏版)》请在冰点文库上搜索。
从零入手Kinetis系统开发
整理内容转自,向jihceng0622表示感谢!
!
!
【原创】从零入手Kinetis系统开发
(一)
研究飞思卡尔的Kinetis有段时间了,由于一直在跟飞思卡尔的片子打交道,所以从Kinetis一出来就引起了我很大的兴趣,从去年9月份发布以来,估计大家就都在翘首以盼FSL能尽快出开发套件和相关资料,呵呵。
提到这,就不得不对飞思卡尔抢占的市场先机赞一个,毕竟M4的核还是飞思卡尔领先发布了,虽然紧接着NXP和意法都推出了相关产品,不过在当今这个激烈的市场机制下,尤其是电子产品,谁先抢占先机谁就占据了优势,这个我们从如今智能手机领域竞争的激烈程度上就可略窥一斑,虽然不灰常了解FSL为什么ColdFire,PowerPC做的好好的,转向ARM(估计是在如今ARM家族正如日中天的大环境下,显然飞思卡尔也不想落下它,偏的太远,呵呵),不过飞思卡尔片子的可靠性还是公认比较好的了,就是小小的期望一下,FSL以后客户定向能稍稍微偏向下我们小群体(片子太贵了啊,汗~),尤其是我们这些个穷学生,呵呵。
以上纯是自己一点个人观点,有点偏主观色彩,大家心急的可以直接略过,不心急的咱以后再探讨,呵呵,那下面咱直接进入主题。
既然标题是从零入手,就得像垒积木那样一步步的来,因为我也是从零开始的,也希望同大家一块儿交流自己学习期间的一点心得和经验,给过去、现在或者将来徘徊在Kinetis大门外犹豫的广大电子爱好者一点启发,起码别像我当初那样愁眉苦脸四处碰壁找不到入门的途径,毕竟Kinetis太新了以至于现在资料都很少(咳咳,主要都是英文的,看着太累了,哎),大多数人都在边摸索边前进着,当然肯定有大牛已经远远走在前列了,这个只能仰视了,呵呵,我们还是一步步慢点来踏实些。
下面我以我自己的开发经历给大家敲响Kinetis的大门(有点大了,咳咳)。
第一系列就首先带大家准备一下开发系统的搭建,巧妇难为无米之炊,那我们就从硬件和软件两个方面准备一下:
硬件方面,因为我手里有块K60的最小系统板(要玩就玩数大的是吧,60够大的了,呵呵,开玩笑的,这个根据自己实际情况来,其实大部分操作还是一样的),以后的开发不出意外的话就先以它为例,下面给大家看下俺的板子,片子用的还是工程测试的片子(PK60,哎,期待看到MK60呢一直,呵呵),不过不影响使用,还是比较稳定的。
上图:
还有就是调试工具了,我看了飞思卡尔的官方的tower系统,上面是自带JM60的JTAG的了,还是挺好的,不过我最后还是选择了J-Link,广大ARM爱好者的最爱了,功能强大而且又便宜,我觉得还是挺适合我们一些低消费群体的了,现在已经出到V8版本的了,而且还支持在线固件升级,还是很靠谱的,虽然现在J-Link被我们广大国内厂家抄的较为泛滥,PCB我就发现过好几个版本的,拆过几个发现都不一样来,汗,呵呵,不过用着还是挺好的,而且估计也正是因为这点才造成价格真是低啊,真好,嘿嘿。
。
。
至于最后为什么选择了J-Link,下面软件马上揭晓。
软件方面,目前有三种支持的开发环境,即CodeWarrior,IARFORARM和KeilForARM,版本和IAR版本以上开始支持Cortex-M4内核,至于Keil我没测试,在这里就不敢乱说了,毕竟群众的眼睛太雪亮了,呵呵。
至于下载问题,可以直接到官方网站上去下载,下special版的,IAR下Evaluation版的,毕竟免费,不用白不用,遇到各种代码限制的话,大家都懂的,知道怎么做了吧,呵呵。
由于以前一直在用CW开发环境,觉着真的很强大,尤其是在线仿真跟踪功能,真的很好用,文本编辑也很人性化,总之很好,不过我最后还是选择了IAR,一是想换种口味,找找新鲜,对比下两者区别,毕竟IAR的编译效率还是有良好的口碑的,还有一个原因是正好我在玩430,所以索性趁此机会熟悉下,现在发现还是不错的。
还有就是上面提到的问题,为什么最后选择了J-Link,一个是性价比高,还有一个主要原因是我发现Tower自带的JTAG在IAR环境下竟然不支持在线跟踪,自动刷新,每次查看内存读寄存器还要点暂停,这个对于我们这些懒惯的人来说有点无法容忍了,呵呵,哎,最后只能挣扎着用J-Link了,目前运行正常,没发现大问题。
现在”米“,”锅“都有了,生米不能吃,等到咱能吃了,估计也该大圆满了,呵呵,以后希望跟大家一块儿烹饪咱们这锅饭,它叫”Kinetis“,呵呵,这是第一篇,话多有点罗嗦,以后争取言简意赅,咳咳。
。
。
未完待续~
【原创】从零入手Kinetis系统开发
(二)
经过了上一篇的一阵啰嗦的准备,呵呵,该有的硬件和软件开发环境已经选择好了,下面该是我们大展身手的时候了。
。
。
废话不多说了,首先想先以自己的理解分析介绍下飞思卡尔官方提供的k60最小系统的硬件电路和IAR例程的编程结构,这个很重要,先学学人家的在创新自己的(汗,不知不觉走上了中国制造思想的这条路,先模仿再超越,至于能不能超越?
?
?
未知,呵呵)。
说的这里我还想提一下,我在这里想分享的不仅仅是自己的开发过程和以后可能的一些代码(当然这部分很重要,想得到一些高手们的一些意见和交流),而是更重要的想分享给徘徊在初学者阶段的人学习一款新片子的完整流程也就是学习方法,授人以“渔”才是王道,呵呵,虽然这个流程我时至今日还在摸索完善,但是期望能给他们一些启发,因为身为一个搞电子的学生,都是从那一步走过来的,我深知其中的艰辛和渴望有人指点的迫切。
至于这个流程,呵呵,随着本系列的深入,我相信会体会出来的~
言归正传,首先介绍下FSL塔式结构的K60最小系统板子上的资源,上图:
从图上我们可以看到,它几乎把K60的资源全部引出来了,原理图在附件:
1、电源部分,USB供电,经过LDO转成,这里重点提一下,其实可以不用LDO而是采用K60自带的USB电压调节器,5v输入电压调节器输入端(VREGIN),输出(VOUT33)以供芯片工作,我上篇的板子就是这样用的,飞思卡尔显然也考虑到了,所以加了跳线选择;
2、时钟部分,50MHz有源晶振,32768Hz实时时钟(RTC)。
其中主时钟输入如果用到以太网模块的话需要引出,因为以太网的PHY和K60需要同相,很重要;至于RTC,供电VBAT则可以使用外部电源也可接纽扣电池,掉电保存;
3、加速度传感器MMA7660,官方有个DEMO例程有个小应用用到它,还是挺好玩的,可以做些姿态感知;
4、ADC,外接一个电位器,貌似这都快成为一个最小系统的(括弧:
测试用的)的标配了,呵呵,用来测试AD模块的,官方例程有介绍;
5、TSI,个人觉着FSL很好的一个资源,集成了电容触摸功能,在当下电容触摸红红火火的时候,这个飞思卡尔没有落下,挺好,呵呵;
6、LED灯,这个也是标配了(想起了跑马灯,流水灯,呵呵,真怀念,哈哈),测试GPIO用;
7、SD卡驱动,人家是正经的SD模式驱动,可不像俺以前搞的SPI模式(速度不是很快,还不稳,哎);
8、infraredport,红外调制模块。
9 。
。
。
。
。
。
(待加)
下面以飞思卡尔官方提供的在IAR环境下的GPIO例程为例,分析下编程结构,注意是分析飞思卡尔的编程结构,而不是逐行讲程序,因为我觉着熟悉一个开发环境工具,首先就要熟悉它的工程构架和风格,然后编辑编译连接代码,功能设置,下载调试等等,最后这才敢说叫掌握一种开发环境,这才敢以后毕业写在简历上呢,呵呵。
。
。
再上图:
如上图,官方的例程一般都是K60和K40平台的两种,这里我们通过选择左侧工程窗口的选项卡选择K60平台,然后选择FLASH_512K_PFLASH配置模式,这是随便选择的,呵呵,其实这个配置模式还是很重要的,这个会在下次重点介绍下,下面分别介绍下每个工作组。
1、common工作组
这个工作组的文件比较杂,这里挑几个重要的以后会用到的说一下。
首先startup两个文件,可以直接就猜到,这个启动代码有关的文件,其实这个文件只包括了RAM区的初始化即把向量表和一些数据放到RAM区,所以是不全的,以后我会单独写一篇有关启动代码部分的,而且最后把启动部分都归到一个文件里;然后就是文件,用在终端交互上;最后就是文件了,也是最重要的头文件了,你会发现几乎每个模块都加载了这个头文件,而且你也会发现你翻遍了这几个工作组文件都没找的K60的头文件,应为它们都在这个文件里加载了,这个需要引起足够的重视。
至于其他的文件以后用到再分析。
2、cpu文件组
这个文件组涉及到了M4核文件arm_cm4,启动文件、、和向量表文件。
这几个文件都很重要,其中M4核文件包括了一些有关NVIC即中断模块的应用函数,例如使能和禁止IRQ中断,设置中断优先级等,至于启动部分都会统一在后面系列介绍,至于vectors文件则是缺省的向量表文件,这个以后用到中断设置的时候会用到,很重要。
3、drivers文件组
这是驱动部分文件组,这个例程只写了三个部分的驱动,即多时钟产生器(MCG),异步串行通信(UART),看门狗(wdog)。
这个文件组主要就是放置K60资源的驱动代码,这里只有三个,因为例程里只用到了这三个模块,可以直接调用其内部子函数。
4、IAR文件组
这个文件组为IAR环境的配置模式文件组,每个icf文件代表一种配置模式,其内部对K60内存映射做了相应的的分配,从每个文件名就可以看出其含义,具体区别和分析,将在下系列做详细的介绍。
5、platforms文件组
这个是平台文件组,内部包括了跟相应平台相关的硬件配置定义。
像这个例程,就包括了UART通信端口和波特率的定义和系统全局时钟的定义。
6、project文件组
这个才是我们最喜欢的真正“main”文件组了,呵呵,把当成就是了。
我们在工程开发相关的文件可以放到这个文件组里,这个例程是实现K60的GPIO功能,所以添加了文件。
另外文件则是编写中断服务程序需要用到的头文件了,里面定义了所需中断的中断向量和中断服务程序的声明。
7、output文件组
这个文件组包括了整个工程编译链接后生成的文件,其中.map文件描述了K60最后的内存分配情况,在里面可以查看工程耗费的ROM容量和RAM容量还有一些变量函数等等的地址,还是挺有用的;out文件则是最后生成的文件,调试下载所需的文件。
这篇主要对K60Tower系统官方的的硬件和软件进行了简单的介绍,有了这个基础才能建立自己风格的硬件和软件环境。
人家的毕竟是人家的,用着不舒服,只有自己消化吸收了用自己容易理解的风格建立一套有自己特色的开发系统才是正道,呵呵,拭目以待,下回分解~
附件为tower硬件原理图和较新的官方IAR关于K60的例程。
【原创】从零入手Kinetis系统开发(三)之建立自己风格的IAR编程结构
本来按计划在这篇博客第三系列,我是想跟大家一块儿分析和整理下K60的启动代码部分的。
可是后来想来想去,觉着既然上一篇写了飞思卡尔的官方例程的编程结构,那么这次就一鼓作气索性先把自己的工程风格建立起来,而且这样建立好了工程之后再分析其启动代码也不显得突兀,容易接受和理解,呵呵(咳咳,有点当老师的赶脚了)。
所以这篇如果具体来说,应该叫做“从零建立属于自己风格的基于IAR的K60工程”。
既然说是自己风格,可能就有些偏主观色彩了,呵呵,希望高手大侠们不要拍砖,主要是拿出来希望可以给入门级的同志们一点借鉴和经验,当然也希望跟高手们交流下,有错误的地方期待得到你们的批评指正(这点很重要的)。
由于这篇内容可能会有点多甚至有点乱,所以下面就不再废话了,直接上图了哈(都快口头禅了,晕)~
呵呵,上图就是我自己的一种风格,其中Library文件组为自己做的库,包括了CPU文件组(K60的内核部分),Drivers文件组(K60功能模块驱动),Headers文件组(部分系统头文件)和StartUp文件组(K60的启动代码文件);Link文件组为K60的配置模式文件组,icf文件可以到网上搜一搜它的作用,Project文件组为一个新项目工程的文件组,在该文件组新建功能C文件,Output文件组为链接输出文件组,,out文件用于下载调试。
每个人可能都有一种编程风格,只不过如果可以给大家一点启发或者借鉴则足已。
整体的工程架构我已经晒出来了(呵呵,我也潮一把,用一用“晒”这个字),也就是本篇的任务和最终的目标,下面将分几个步骤层层剥解,如果把它看成牛,那希望我们能像庖丁一样游刃有余,开始吧:
(可能有的步骤较粗略,没办法,篇幅所限,注重领会精神,呵呵)
(1)目前大多数开发环境都是基于项目工程(project)来管理的,但是每个project又必须建立在工作区内,且一个工作区允许多个项目的建立,如果第一次建立一个project则必须要先建立工作区。
好了,概念介绍完了,图来了(前提软件已经打开了,呵呵):
图新建工作区
图 新建工程
图新建空工程
图已经建立好的空工程
(2)建立相应的工作组,如前面整体风格所示,主要建立Library文件组(自己做的库),Link文件组(该工程的配置文件组),Project文件组(项目文件组)和out文件组(输出文件组)。
图 在工作区右键选择添加工作组
图建立好的文件组架构(空的)
(3)给文件组添加相应的C文件,这部分涉及到移植官方例程的文件到该工程。
图 所建工程的根目录结构,就是把所需的c和h文件拷贝到上图和下图所示相应的文件夹下
图configfiles下文件结构,为icf文件,配置K60调试方式内存分配等
图Library下文件结构
图启动代码文件目录(下篇会仔细分析)
图K60内核部分文件目录
图drivers下的文件目录,目前只添加了这几个功能模块的文件,C文件和相应的头文件在相应文件夹里面,这里面篇幅所限,不再细贴图了,呵呵
图系统所需头文件的目录文件,看看,基本上所需的重要的头文件都放在该文件夹里除了具体功能的头文件,像,等等
图该目录下放置实际工程文件,这里只新建了文件,以后随着工程的深入,会不断放置新的文件
图具体添加相应文件到相应的文件组的操作,注意了,文件组只是起到了组织文件的作用,跟刚看到的同样文件名的文件夹不是一个概念,也就是说,这文件组名可以不与相应的文件夹同名,但是可以把相应文件夹下的c文件添加到相应的文件组下,ok?
呵呵
(4)相应的文件添加完毕后,下面就涉及到工程的设置问题了,这部分是重中之重,注意了。
图右键工程名,选择Options,进入工程设置选项卡,也可以菜单选项Project->Options进入
在GeneralOptions里选好内核,其他部分默认即可,然后进入C/C++Complier选项卡
这个很重要,如果要自己建立或者移植官方的例程到自己的工程文件夹下,这个头文件包含目录一定要添加,其中$PROJ_DIR$表示路径在当前工程文件夹中也就是工程文件.ewp文件所在的目录,“\..”表示返回上一级文件夹,“\文件夹名”表示进入这个文件夹。
这是一种相对路径的用法,方便以后移植,这个灰常重要,这个细说要很多东西,所以建议到网上搜一搜该用法。
这个是Outputconverter选项卡,选中输出motorola文件,这个是可选的,其实也可不选
这个是下载调试选项,这里需要注意一下,呵呵,如果用飞思卡尔官方的tower系统,这里驱动器需选择PEmicro以便使用板上自带的OSJTAG,不过我因为用的是J-Link,所以。
。
。
咳咳,是吧,懂的,呵呵,然后Runto可以不点,这样的话调试初始运行会首先进入到启动代码,便于我们分步调试,这个以后会详细介绍。
由于我上个步骤选择了J-Link调试工具,所以这步进入该选项卡设置,其实默认即可,呵呵。
(5)设置配置模式
可以看到系统默认的两种配置模式,这里不需要它们了,逐个点Remove,然后分别新建Flash_512K和RAM_128K,然后确认,然后就可以看到配置模式里多出了两个选项即Flash_512K和RAM_128K,这里我选择RAM128K
当然仅仅这样不算完,我们还需要给其配置相应的icf文件,这下想到上面提到的那个configfiles文件夹了吧也即是上图所示Link文件组里的文件,呵呵,所以接下来我们选中工程然后右键进入Options选项卡的Linker选项
在这里选中Overridedefault,然后选择好icf所在的文件路径,其他选项卡默认即可,接下来同样设置好Flash_512k的icf文件路径,这样就有了两中配置模式,这里我默认选择RAM_128K模式。
这样属于自己风格的IAR工程就建立好了,图有些多而且有点乱,见谅。
因为篇幅所限,可能有些部分一带而过,这些以后用到了可能会再详细介绍,呵呵,未完待续~
【原创】从零入手Kinetis系统开发(四)之启动代码分析
在对K60开发应用程序或编写硬件模块的驱动程序之前,我们需要对其启动流程有所了解。
也许对一些简单的8位或者16位单片机进行系统开发时,我们往往不用去关心其启动代码部分,一般都是直接使用开发环境默认给出的启动代码,没必要去改。
但是对于像ARM这类的复杂的32位片上系统来说,在启动代码部分,需要通过软件对一些硬件资源进行配置和设置一定的工作状态,这样我们就不得不去认真的了解它了。
下面就以飞思卡尔tower系统上的片子MK60N512VMD100为例分析官方提供的Demo程序的启动流程。
简单的概括下K60的启动流程,主要分为四个部分(咳咳,我自作主张的分的,大家不要拍砖啊,呵呵):
(1)初始化K60的通用寄存器(R0~R12),使能全局中断,跳转到start函数;
(2)关闭看门狗,在调试阶段一般关闭它,毕竟老是频繁的喂狗也是挺麻烦的;
(3)复制中断向量表、初始化的数据和以__ramfunc声明的子函数到RAM区(一定程度上提高了代码执行速度),并清零零初始化数据区;
(4)初始化系统时钟;
在逐步分解介绍之前,必须要首先了解下*.icf文件,我默认采用128KB_Pflash配置模式,所以这里打开文件,由于这个代码较多,所以就挑重要的说了:
/*******************************用到的,捡重要的说,可能不是挨着的语句*******************************
definesymbol__ICFEDIT_intvec_start__=0x00000000;ntvec};ntvec代码段中的只读部分放在存储空间mem中的__ICFEDIT_intvec_start__地址上
placeataddressmem:
__code_start__{readonlysection.noinit};oinit段中的只读部分放到地址空间 __code_start__开始的地址上
************************************************************************************************************/
.intvec这个段可以在文件中找得到,上图了又:
这里可以看到,系统默认是把中断向量表放到了.intvec段里,由上面可以看到也就是默认放到了0x00000000地址。
(1)下面逐步分解,其中第一步可以在文件里找到,如下:
;AREA Crt0,CODE,READONLY ;namethisblockofcode
SECTION.noinit:
CODE ;下面这部分汇编代码放到.noinit段里地址为0x00000410(从上面分析可以看到)
EXPORT __startup
__startup ; __startup标号,其实这个是复位向量,在中断向量表里可以查到为vector001
MOV r0,#0 ;清零所有通用寄存器
MOV r1,#0
MOV r2,#0
MOV r3,#0
MOV r4,#0
MOV r5,#0
MOV r6,#0
MOV r7,#0
MOV r8,#0
MOV r9,#0
MOV r10,#0
MOV r11,#0
MOV r12,#0
CPSIE i ;打开全局中断
importstart
BL start ;跳转到start的C函数
__done
B __done
END
可能有些人会迷惑为什么CPU会复位之后从__startup标号开始执行,这里我以CPU的角度走一遍这个流程,CPU上电复位或者其他方式复位之后,它会首先从0x00000000地址读取堆栈指针到SP,然后再从0x00000004地址(注意地址总线为32位,所以每次跳4个字节才能读取下个地址)读取程序指针到PC,最后CPU就跳到PC指针所指向的地址开始执行程序了,至于从0x00000004读取的PC指针指向的地址是哪呢,那就是上面所说的__startup标号指向的程序地址了,这个我们可以在文件里找到,如下:
(2)接下来跳到了文件的start函数,首先执行关闭看门狗功能,也就是第二步了:
/*Disablethewatchdogtimer*/
wdog_disable();cf文件里可以找到,里面定义了它们的地址*/
externuint32__VECTOR_TABLE[];
externuint32__VECTOR_RAM[];
/*CopythevectortabletoRAM*/
/*如果它们地址不一样(我用的是128KB_Pflash所以是不一样的),则复制flash内的向量表到RAM区得向量表*/
if(__VECTOR_RAM!
=__VECTOR_TABLE)
{
for(n=0;n<0x410;n++)
__VECTOR_RAM[n]=__VECTOR_TABLE[n];
}
/*PointtheVTORtothenewcopyofthevectortable*/
/*当然单单复制到RAM区不行,还需要告诉系统我把向量表地址改变了,还需要写VTOR*/
write_vtor((uint32)__VECTOR_RAM);
/*下面就是复制初始化数据
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 入手 Kinetis 系统 开发