《Kl25-ch04(第一个样例程序及工程组织)》由会员分享,可在线阅读,更多相关《Kl25-ch04(第一个样例程序及工程组织)(48页珍藏版)》请在金锄头文库上搜索。
1、第4章 第一个样例程序及工程组织主要内容: 4.1 通用I/O接口基本概念及连接方法 4.2 端口控制模块与GPIO模块的编程结构 4.3 GPIO驱动构件封装方法与驱动构件封装规范 4.4 第一个C语言工程:控制小灯闪烁 4.5 工程文件组织框架与第一个C语言工程分析 4.6 第一个汇编语言工程:控制小灯闪烁 4.7 本章小结14.1 通用I/O接口基本概念及连接方法1. I/O接口的概念I/O接口,即输入输出接口,是微控制器同外界进行交 互的重要通道,实现MCU与外部设备的数据交换。在嵌入式系统中,接口种类繁多,有显而易见的人机交 互接口,如操纵杆、键盘、显示器;也有无人介入的接口, 如网
2、络接口、机器设备接口2.通用I/O(GPIO)所谓通用I/O,也记为GPIO(General Purpose I/O),即 基本的输入/输出,有时也称并行I/O,或普通I/O,它是I/O 的最基本形式。MCU内部程序可以对通用I/O的端口寄存器 进行读写来实现开关量的输入输出操作,且大多数通用I/O 引脚可以通过编程来设定其工作方式为输入或输出,称之为 双向通用I/O。 23.上拉下拉电阻与输入引脚的基本接法输入引脚有三种不同的连接方式:带上拉电阻的连接、 带下拉电阻的连接和“悬空”连接。若MCU的某个引脚通过一个电阻接到电源(Vcc)上, 这个电阻被称为“上拉电阻”。与之相对应,若MCU的某
3、个引 脚通过一个电阻接到地(GND)上,则相应的电阻被称为“下 拉电阻”。悬空的芯片引脚被上拉电阻或下拉电阻初始化为 高电平或低电平。34.输出引脚的基本接法作为通用输出引脚,MCU内部 程序向该引脚输出高电平或低电平来 驱动器件工作,即开关量输出。如图 所示。其中O1引脚是发光二极管LED 的驱动引脚,当O1引脚输出高电平 时,LED不亮;当O1引脚输出低电平 时,LED点亮。O2引脚接蜂鸣器驱动 电路,当O2脚输出高电平时,蜂鸣 器响;O2脚输出低电平时,蜂鸣器 不响。44.2.1 端口控制模块KL25的大部分引脚具有复用功能,可以通过端口控制模 块(Port control and in
4、terrupts,PORT)提供的寄存器编程 指定其为某一具体功能。PORT模块内含3类寄存器,分别是 :引脚控制寄存器(Pin Control Register),全局引脚控制寄 存器(Global Pin Control Register)、中断状态标志寄存器( Interrupt Status Flag Register)。4.2 端口控制模块与GPIO模块的编程结构51.寄存器映像地址分析KL25芯片有5个端口AE。每个端口有32个引脚控制寄 存器PORTx_PCRn(其中x=AE,n=031),2个全局引脚 控制寄存器(PORTx_GPCLR、PORTx_GPCHR)、1个中断 状态
5、标志寄存器(PORTx_ISFR)。以下地址分析计算均为 16进制,略去十六进制前缀“0x”不写。每个端口有32个引脚控制寄存器PORTx_PCRn。端口x的 基地址=4004_9000+x*1000(x=AE,对应04)。端口x的 每个引脚控制寄存器PORTx_PCRn的地址为 =4004_9000+x*1000+n*4(x=AE,对应04,n=031)。 例如PORTA_PCR1的地址为: 4004_9000+0*1000+1*4=4004_9004。6每个端口有2个全局引脚控制寄存器。 全局引脚控制寄存器(低)PORTx_GPCLR, 地址=4004_9080+x*1000(x=AE,对
6、应04); 全局引脚控制寄存器(高)PORTx_GPCHR, 地址=4004_9084+x*1000(x=AE,对应04)。每个端口的有1个中断状态标志寄存器。 地址=4004_90A0+x*1000(x=AE,对应04)。72相关名词解释 (1)模拟引脚是指不能够配置成GPIO的引脚叫做模拟引脚 (Analog pin),如RESET、EXTAL及XTAL等引脚。 (2)数字引脚是指能够被配置成GPIO的引脚叫做数字引脚 (Digital pin)。 (3)无源滤波器(Passive filter)是由电容器、电抗器和电 阻器适当组合而成,并兼有无功补偿和调压功能的滤波器 。 (4)引脚驱动
7、能力(Drive Strength)是指引脚放出或吸入 电流的承受能力,一般用mA单位度量。 (5)转换速率(Slew rate)是指电压在高低电平间转换的 时间间隔,一般用ns单位度量。 (6)数字输入/输出(Digital input/output)是指芯片引脚只 能输入/输出高电平(逻辑1)和低电平(逻辑0)两个电 压值。 (7)引脚复用槽(Pin muxing slot)是指信号复用装置与引 脚之间的接口,引脚通过连接不同的信号复用槽可以配置 成不同的功能。 (8)W1C是指对某位写1而使得该位清0,俗称写1清0。83引脚控制寄存器(PORTx_PCRn)每个端口的每个引脚均有一个对应
8、的引脚控制寄存器, 可以配置引脚中断或DMA传输请求,可以配置引脚为GPIO 功能或其他功能,可以配置是否启用上拉或下拉,可以配 置选择输出引脚的驱动强度,可以配置选择输入引脚是否 使用内部滤波等。其中“X”表示复位后状态不确定。有关功能说明请见教材 P65-P6694全局引脚控制寄存器每个端口的全局引脚控制寄存器有两个,分别为 PORTx_GPCLR、PORTx_GPCHR,为只写寄存器,读出总为 0。每个寄存器的高16位被称为全局引脚写使能字段( Global Pin Write Enable,GPWE),低16位被称为全局引 脚写数据字段(Global Pin Write Data,GP
9、WD)。KL25芯片每个端口有32个引脚控制寄存器,分为两组: 低引脚控制寄存器组(150)和高引脚控制寄存器组( 3116),全局引脚控制寄存器PORTx_GPCLR批配置低引 脚控制寄存器组(150),而全局引脚控制寄存器 PORTx_GPCHR配置高引脚控制寄存器组(3116)。这样 可以实现一次配置16个功能相同的引脚,提高了编程效率 。全局引脚控制寄存器不能配置引脚控制寄存器的高16位 ,因此,不能使用该功能配置引脚中断。105中断状态标志寄存器(PORTx_ISFR)数字引脚模式下,每个引脚的中断模式可以独立配置, 在引脚控制寄存器IRQC字段可配置选择:中断禁止(复位 后默认);
10、高电平、低电平、上升沿、下降沿、沿跳变触 发中断;上升沿、下降沿、沿跳变触发DMA请求。支持低 功耗模式下唤醒。每个端口的中断状态标志寄存器(PORTx_ISFR),对应 32个引脚,相应位为1,表明配置的中断已经被检测到, 反之没有。各位具有写1清0特性。114.2.2 GPIO模块1KL25的GPIO引脚80引脚封装的KL25芯片的GPIO引脚分别记为PORTA、PORTB 、PORTC、PORTD、PORTE共5个端口,共含61个引脚。端口作 为GPIO引脚时,逻辑1对应高电平,逻辑0对应着低电平。(1)PORTA口有10个引脚,分别为PTA12、PTA45、 PTA1217;(2)PO
11、RTB口有12个引脚,分别为PTB03、PTB811、 PTB1619;(3)PORTC口有16个引脚,分别为PTC013、PTC1617;(4)PORTD口有8个引脚,分别为PTD07;(5)PORTE口有15个引脚,分别为PTE05、PTE2025、 PTE2931。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个
12、寄存器分别是数据输出寄存器、输出置1 寄存器、输出清0寄存器、输出反转寄存器、数据输入寄存 器、数据方向寄存器。其中输出寄存器的地址就是口的基地 址,其他寄存器的地址依次加4。所有寄存器均为32位宽度 ,复位时均为0000_0000h。13其他各口功能与编程方式完全一致,只是相应寄存器名 与寄存器地址不同,其中寄存器名只要把其中的PORTA口“A” 子字母分别改为B、C、D、E即可获得,地址按上述给出的规 律计算。144.2.3 GPIO基本编程步骤与举例1.GPIO基本编程步骤要使芯片某一引脚为GPIO功能,并定义为输入/输出,随 后进行应用,基本编程步骤如下:(1)通过端口控制模块(POR
13、T)的引脚控制寄存器 PORTx_PCRn的引脚复用控制字段(MUX)设定其为GPIO功能 (即令MUX=0b001);(2)通过GPIO模块相应口的“数据方向寄存器”来指定相 应引脚为输入或输出功能。若指定位为0,则为对应引脚输入 ;若指定位为1,则为对应引脚输出。(3)若是输出引脚,则通过设置“数据输出寄存器”来指 定相应引脚输出低电平或高电平,对应值为0或1。亦可通过“ 输出置位寄存器”、“输出清位寄存器”、“输出取反寄存器”改变 引脚状态,参见表4-1中关于寄存器的说明。(4)若是输入引脚,则通过“数据输入寄存器”获得引脚 的状态。若指定位为0,表示当前该引脚上为低电平;若为1, 则为
14、高电平。152理解GPIO基本编程步骤举例举例说明:设PORTB口的19脚接一个发光二极管,低电平 点亮。现在要点亮这个发光二极管,步骤如下:(1)计算给出PORTB19引脚控制寄存器地址从4.2.1节的端口控制模块可知,PORTB端口的引脚控制寄 存器基地址为0x4004A000u,其中后缀u表示无符号数,给出不 优化的32位指针变量portB_ptr:volatile uint_32 *portB_ptr = (uint_32*)0x4004A000u;PORTB19引脚控制寄存器地址=基地址+偏移量:volatile uint_32 *portB_PCR_19 = portB_ptr +
15、 19; 这里是19,而不是19*4,由于定义了32位指针, portB_ptr加1相当于地址加4。portB_ptr加19代表了portB_ptr 地址加上19*4。16(2)计算给出PORTB的数据方向寄存器、输出寄存器的 地址PORTB端口(作为GPIO功能)的基地址为0x400FF040u :volatile uint_32 *gpioB_ptr = (uint_32*)0x400FF040u;参考表4-1,PORTB的数据方向寄存器地址=基地址+偏移 量,PORTB的数据输出寄存器地址=基地址+偏移量:volatile uint_32 *portB_PDDR =gpioB_ptr+5
16、;volatile uint_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 174.3.1 制作GPIO驱动构件的必要性及GPIO驱动构件封 装要点分析1制作GPIO驱动构件的必要性将软件构件技术应用到嵌入式软件开发中,可以大大提高 嵌入式开发的开发效率与稳定性,可以使软件具有更好的开放性 、通用性和适应性。特别是对于底层硬件的驱动编程,只有封 装成底层驱动构件,才能减少重复劳动,使开发者专注于应用 软件稳定性与功能设计上。以KL25的GPIO为例,它有61个引脚可以作为GPIO,分布在 5个端口,使用