您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 飞思卡尔嵌入式课件Kl25第四章--第一个样例程序及工程组织
第4章第一个样例程序及工程组织主要内容:4.1通用I/O接口基本概念及连接方法4.2端口控制模块与GPIO模块的编程结构4.3GPIO驱动构件封装方法与驱动构件封装规范4.4第一个C语言工程:控制小灯闪烁4.5工程文件组织框架与第一个C语言工程分析4.6第一个汇编语言工程:控制小灯闪烁4.7本章小结14.1通用I/O接口基本概念及连接方法1.I/O接口的概念I/O接口,即输入输出接口,是微控制器同外界进行交互的重要通道,实现MCU与外部设备的数据交换。在嵌入式系统中,接口种类繁多,有显而易见的人机交互接口,如操纵杆、键盘、显示器;也有无人介入的接口,如网络接口、机器设备接口2.通用I/O(GPIO)所谓通用I/O,也记为GPIO(GeneralPurposeI/O),即基本的输入/输出,有时也称并行I/O,或普通I/O,它是I/O的最基本形式。MCU内部程序可以对通用I/O的端口寄存器进行读写来实现开关量的输入输出操作,且大多数通用I/O引脚可以通过编程来设定其工作方式为输入或输出,称之为双向通用I/O。23.上拉下拉电阻与输入引脚的基本接法输入引脚有三种不同的连接方式:带上拉电阻的连接、带下拉电阻的连接和“悬空”连接。若MCU的某个引脚通过一个电阻接到电源(Vcc)上,这个电阻被称为“上拉电阻”。与之相对应,若MCU的某个引脚通过一个电阻接到地(GND)上,则相应的电阻被称为“下拉电阻”。悬空的芯片引脚被上拉电阻或下拉电阻初始化为高电平或低电平。34.输出引脚的基本接法作为通用输出引脚,MCU内部程序向该引脚输出高电平或低电平来驱动器件工作,即开关量输出。如图所示。其中O1引脚是发光二极管LED的驱动引脚,当O1引脚输出高电平时,LED不亮;当O1引脚输出低电平时,LED点亮。O2引脚接蜂鸣器驱动电路,当O2脚输出高电平时,蜂鸣器响;O2脚输出低电平时,蜂鸣器不响。44.2.1端口控制模块KL25的大部分引脚具有复用功能,可以通过端口控制模块(Portcontrolandinterrupts,PORT)提供的寄存器编程指定其为某一具体功能。PORT模块内含3类寄存器,分别是:引脚控制寄存器(PinControlRegister),全局引脚控制寄存器(GlobalPinControlRegister)、中断状态标志寄存器(InterruptStatusFlagRegister)。4.2端口控制模块与GPIO模块的编程结构51.寄存器映像地址分析KL25芯片有5个端口A~E。每个端口有32个引脚控制寄存器PORTx_PCRn(其中x=A~E,n=0~31),2个全局引脚控制寄存器(PORTx_GPCLR、PORTx_GPCHR)、1个中断状态标志寄存器(PORTx_ISFR)。以下地址分析计算均为16进制,略去十六进制前缀“0x”不写。每个端口有32个引脚控制寄存器PORTx_PCRn。端口x的基地址=4004_9000+x*1000(x=A~E,对应0~4)。端口x的每个引脚控制寄存器PORTx_PCRn的地址为=4004_9000+x*1000+n*4(x=A~E,对应0~4,n=0~31)。例如PORTA_PCR1的地址为:4004_9000+0*1000+1*4=4004_9004。6每个端口有2个全局引脚控制寄存器。全局引脚控制寄存器(低)PORTx_GPCLR,地址=4004_9080+x*1000(x=A~E,对应0~4);全局引脚控制寄存器(高)PORTx_GPCHR,地址=4004_9084+x*1000(x=A~E,对应0~4)。每个端口的有1个中断状态标志寄存器。地址=4004_90A0+x*1000(x=A~E,对应0~4)。72.相关名词解释(1)模拟引脚是指不能够配置成GPIO的引脚叫做模拟引脚(Analogpin),如RESET、EXTAL及XTAL等引脚。(2)数字引脚是指能够被配置成GPIO的引脚叫做数字引脚(Digitalpin)。(3)无源滤波器(Passivefilter)是由电容器、电抗器和电阻器适当组合而成,并兼有无功补偿和调压功能的滤波器。(4)引脚驱动能力(DriveStrength)是指引脚放出或吸入电流的承受能力,一般用mA单位度量。(5)转换速率(Slewrate)是指电压在高低电平间转换的时间间隔,一般用ns单位度量。(6)数字输入/输出(Digitalinput/output)是指芯片引脚只能输入/输出高电平(逻辑1)和低电平(逻辑0)两个电压值。(7)引脚复用槽(Pinmuxingslot)是指信号复用装置与引脚之间的接口,引脚通过连接不同的信号复用槽可以配置成不同的功能。(8)W1C是指对某位写1而使得该位清0,俗称写1清0。83.引脚控制寄存器(PORTx_PCRn)每个端口的每个引脚均有一个对应的引脚控制寄存器,可以配置引脚中断或DMA传输请求,可以配置引脚为GPIO功能或其他功能,可以配置是否启用上拉或下拉,可以配置选择输出引脚的驱动强度,可以配置选择输入引脚是否使用内部滤波等。其中“X”表示复位后状态不确定。有关功能说明请见教材P65-P6694.全局引脚控制寄存器每个端口的全局引脚控制寄存器有两个,分别为PORTx_GPCLR、PORTx_GPCHR,为只写寄存器,读出总为0。每个寄存器的高16位被称为全局引脚写使能字段(GlobalPinWriteEnable,GPWE),低16位被称为全局引脚写数据字段(GlobalPinWriteData,GPWD)。KL25芯片每个端口有32个引脚控制寄存器,分为两组:低引脚控制寄存器组(15~0)和高引脚控制寄存器组(31~16),全局引脚控制寄存器PORTx_GPCLR批配置低引脚控制寄存器组(15~0),而全局引脚控制寄存器PORTx_GPCHR配置高引脚控制寄存器组(31~16)。这样可以实现一次配置16个功能相同的引脚,提高了编程效率。全局引脚控制寄存器不能配置引脚控制寄存器的高16位,因此,不能使用该功能配置引脚中断。105.中断状态标志寄存器(PORTx_ISFR)数字引脚模式下,每个引脚的中断模式可以独立配置,在引脚控制寄存器IRQC字段可配置选择:中断禁止(复位后默认);高电平、低电平、上升沿、下降沿、沿跳变触发中断;上升沿、下降沿、沿跳变触发DMA请求。支持低功耗模式下唤醒。每个端口的中断状态标志寄存器(PORTx_ISFR),对应32个引脚,相应位为1,表明配置的中断已经被检测到,反之没有。各位具有写1清0特性。114.2.2GPIO模块1.KL25的GPIO引脚80引脚封装的KL25芯片的GPIO引脚分别记为PORTA、PORTB、PORTC、PORTD、PORTE共5个端口,共含61个引脚。端口作为GPIO引脚时,逻辑1对应高电平,逻辑0对应着低电平。(1)PORTA口有10个引脚,分别为PTA1~2、PTA4~5、PTA12~17;(2)PORTB口有12个引脚,分别为PTB0~3、PTB8~11、PTB16~19;(3)PORTC口有16个引脚,分别为PTC0~13、PTC16~17;(4)PORTD口有8个引脚,分别为PTD0~7;(5)PORTE口有15个引脚,分别为PTE0~5、PTE20~25、PTE29~31。122.GPIO寄存器每个GPIO口均有6个寄存器,5个GPIO口共有30个寄存器。PORTA、PORTB、PORTC、PORTD、PORTE各口寄存器的基地址分别为400F_F000h、400F_F040h、400F_F0080h、400F_F0C0h、400F_F100h,所以各口基地址相差40h。各GPIO口的6个寄存器分别是数据输出寄存器、输出置1寄存器、输出清0寄存器、输出反转寄存器、数据输入寄存器、数据方向寄存器。其中输出寄存器的地址就是口的基地址,其他寄存器的地址依次加4。所有寄存器均为32位宽度,复位时均为0000_0000h。13其他各口功能与编程方式完全一致,只是相应寄存器名与寄存器地址不同,其中寄存器名只要把其中的PORTA口“A”子字母分别改为B、C、D、E即可获得,地址按上述给出的规律计算。144.2.3GPIO基本编程步骤与举例1.GPIO基本编程步骤 要使芯片某一引脚为GPIO功能,并定义为输入/输出,随后进行应用,基本编程步骤如下: (1)通过端口控制模块(PORT)的引脚控制寄存器PORTx_PCRn的引脚复用控制字段(MUX)设定其为GPIO功能(即令MUX=0b001); (2)通过GPIO模块相应口的“数据方向寄存器”来指定相应引脚为输入或输出功能。若指定位为0,则为对应引脚输入;若指定位为1,则为对应引脚输出。 (3)若是输出引脚,则通过设置“数据输出寄存器”来指定相应引脚输出低电平或高电平,对应值为0或1。亦可通过“输出置位寄存器”、“输出清位寄存器”、“输出取反寄存器”改变引脚状态,参见表4-1中关于寄存器的说明。 (4)若是输入引脚,则通过“数据输入寄存器”获得引脚的状态。若指定位为0,表示当前该引脚上为低电平;若为1,则为高电平。152.理解GPIO基本编程步骤举例 举例说明:设PORTB口的19脚接一个发光二极管,低电平点亮。现在要点亮这个发光二极管,步骤如下:(1)计算给出PORTB19引脚控制寄存器地址从4.2.1节的端口控制模块可知,PORTB端口的引脚控制寄存器基地址为0x4004A000u,其中后缀u表示无符号数,给出不优化的32位指针变量portB_ptr:volatileuint_32*portB_ptr=(uint_32*)0x4004A000u;PORTB19引脚控制寄存器地址=基地址+偏移量:volatileuint_32*portB_PCR_19=portB_ptr+19;这里是19,而不是19*4,由于定义了32位指针,portB_ptr加1相当于地址加4。portB_ptr加19代表了portB_ptr地址加上19*4。16(2)计算给出PORTB的数据方向寄存器、输出寄存器的地址PORTB端口(作为GPIO功能)的基地址为0x400FF040u:volatileuint_32*gpioB_ptr=(uint_32*)0x400FF040u;参考表4-1,PORTB的数据方向寄存器地址=基地址+偏移量,PORTB的数据输出寄存器地址=基地址+偏移量:volatileuint_32*portB_PDDR=gpioB_ptr+5;volatileuint_32*portB_PDO=gpioB_ptr+0;(3)设置PORTB19引脚为GPIO引脚即令相应引脚控制寄存器的10-8位(MUX字段)为0b001,其他位使用默认0:*portB_PCR_19=0x00000100;(4)通过令PORTB的方向寄存器相应位为1,定义PORTB19引脚为输出*portB_PDDR|=(119);(5)通过PORTB的输出寄存器相应位赋0,使PORTB19引脚输出低电平*portB_PDO&=~(119);174.3.1制作GPIO驱动构件的必要性及GPIO驱动构件封装要点分析 1.制作GPIO驱动构件的必要性将软件构件技术应用到嵌入式软件开发中,可以大大提高嵌入式开发的开发效率与稳定性,可以使软件具有更好的开放性、通用性和适应性。特别是对于底层硬件的驱动编程,只有封装成底层驱动构件,才能减少重复劳动,使开发者专注于应用软件稳定性与功能设计上。以KL25的GPIO为例,它有61个引脚可以作为GPIO,分布在5个端口,使用直接地址去操作相关寄存器无法实现软件移植与复用。应该把对GPIO引脚的操作封装成构件,通过函数调用与传参的方式实现对引脚的干预与状态获取,这样的软件才便于维护与移植。同时,底层驱动构件的封装,也为在操作系统下对底层硬件的操作提供了基础。 4.3GPIO驱动构件封装方法与驱动构件封装规范182.GPIO驱动构件封装要点分析 GPIO驱动构件可以实现对所有G
本文标题:飞思卡尔嵌入式课件Kl25第四章--第一个样例程序及工程组织
链接地址:https://www.777doc.com/doc-4498900 .html