历史上的今天
返回首页

历史上的今天

今天是:2025年04月06日(星期日)

2021年04月06日 | 恩智浦 飞思卡尔Freescale Kinetis KEA128学习笔记3--GPIO模块(二)

2021-04-06 来源:eefocus

通过IO控制小灯亮灭。


//============================================================================

//文件名称:light.h

//功能概要:小灯构件头文件

//版权所有:苏州大学飞思卡尔嵌入式中心(sumcu.suda.edu.cn)

//版本更新:2014-12-10  V1.0

//芯片类型:KEA128

//============================================================================

 

#ifndef _LIGHT_H     //防止重复定义(_LIGHT_H  开头)

#define _LIGHT_H

 

//头文件包含

#include "common.h"    //包含公共要素头文件

#include "gpio.h"      //用到gpio构件

 

//指示灯端口及引脚定义

#define LIGHT_0       (PORTC|0)    //灯0使用的端口/引脚

#define LIGHT_1       (PORTC|1)    //灯1使用的端口/引脚

#define LIGHT_2       (PORTC|2)    //灯2使用的端口/引脚

#define LIGHT_3       (PORTC|3)    //灯3使用的端口/引脚

 

//灯状态宏定义(灯亮、灯暗对应的物理电平由硬件接法决定)

#define LIGHT_ON        1    //灯亮

#define LIGHT_OFF       0    //灯暗

 

 

//=================接口函数声明===============================================

//============================================================================

//函数名称:light_init

//函数参数:port_pin:(端口号)|(引脚号)(如:(PORTB)|(5) 表示为B口5号脚)

//       state:设定小灯状态。由宏定义。

//函数返回:无

//功能概要:指示灯驱动初始化。

//============================================================================

void light_init(uint_16 port_pin, uint_8 state);

 

//============================================================================

//函数名称:light_control

//函数参数:port_pin:(端口号)|(引脚号)(如:(PORTB)|(5) 表示为B口5号脚)

//       state:设定小灯状态。由宏定义。

//函数返回:无

//功能概要:控制指示灯亮暗。

//============================================================================

void light_control(uint_16 port_pin, uint_8 state);

 

//============================================================================

//函数名称:light_change

//函数参数:port_pin:(端口号)|(引脚号)(如:(PORTB)|(5) 表示为B口5号脚)

//函数返回:无

//功能概要:切换指示灯亮暗。

//============================================================================

void light_change(uint_16 port_pin);

 

#endif    //防止重复定义(_LIGHT_H  结尾)

 

 

//===========================================================================

//声明:

//(1)我们开发的源代码,在本中心提供的硬件系统测试通过,真诚奉献给社会,不足之处,欢迎指正。

//(2)对于使用非本中心硬件系统的用户,移植代码时,请仔细根据自己的硬件匹配。

//

//苏州大学飞思卡尔嵌入式中心

//技术咨询:0512-65214835  http://sumcu.suda.edu.cn

 


//===========================================================================

//文件名称:light.c

//功能概要:小灯构件源文件

//版权所有:苏州大学飞思卡尔嵌入式中心(sumcu.suda.edu.cn)

//版本更新:2014-12-10  V1.0

//芯片类型:KEA128

//===========================================================================

 

#include "light.h"

 

//===========================================================================

//函数名称:light_init

//函数参数:port_pin:(端口号)|(引脚号)(如:(PORTB)|(5) 表示为B口5号脚)

//       state:设定小灯状态。由light.h中宏定义。

//函数返回:无

//功能概要:指示灯驱动初始化。

//===========================================================================

void light_init(uint_16 port_pin, uint_8 state)

{

gpio_init(port_pin, 1, state);

}

 

//===========================================================================

//函数名称:light_control

//函数参数:port_pin:(端口号)|(引脚号)(如:(PORTB)|(5) 表示为B口5号脚)

//       state:设定小灯状态。由light.h中宏定义。

//函数返回:无

//功能概要:控制指示灯亮暗。

//===========================================================================

void light_control(uint_16 port_pin, uint_8 state)

{

gpio_set(port_pin, state);

}

 

//===========================================================================

//函数名称:light_change

//函数参数:port_pin:(端口号)|(引脚号)(如:(PORTB)|(5) 表示为B口5号脚)

//函数返回:无

//功能概要:切换指示灯亮暗。

//===========================================================================

void light_change(uint_16 port_pin)

{

gpio_reverse(port_pin);

}

主程序头文件


//============================================================================

//文件名称:includes.h

//功能概要:工程总头文件

//版权所有:苏州大学飞思卡尔嵌入式中心(sumcu.suda.edu.cn)

//版本更新:2014-12-10  V1.0

//芯片类型:KEA128

//============================================================================

 

#ifndef _INCLUDES_H  //防止重复定义(开头)

#define _INCLUDES_H

 

//包含使用到的构件头文件

#include "common.h"

#include "gpio.h"

#include "light.h"

 

//防止全局变量重复声明的前缀处理方法

#ifdef GLOBLE_VAR                 //GLOBLE_VAR在main.c文件中宏定义

#define G_VAR_PREFIX          //main.c文件中使用全局变量不加“extern”前缀

#else

#define G_VAR_PREFIX  extern  //其他文件中使用全局变量自动加“extern”前缀

#endif

//声明全局变量(全局变量类型前一律前缀G_VAR_PREFIX)

G_VAR_PREFIX char g_uart_num;

 

//定义宏常数

#define RUN_COUNTER_MAX   1500000ul   //小灯闪烁频率

 

#endif              //防止重复定义(结尾)

c文件


//说明见工程文件夹下的Doc文件夹内Readme.txt文件

#define GLOBLE_VAR  //只需在main.c中定义一次,用来防止全局变量的重复定义

 

#include "includes.h"

 

int main(void)

 {

    //1. 声明主函数使用的变量

    uint_32 mRuncount;     //主循环计数器

    //2. 关总中断

    DISABLE_INTERRUPTS;    //关总中断

    //3. 初始化外设模块

    light_init(LIGHT_0, LIGHT_OFF);     //初始化灯0

    light_init(LIGHT_1, LIGHT_OFF);     //初始化灯1

    light_init(LIGHT_2, LIGHT_OFF);     //初始化灯2

    light_init(LIGHT_3, LIGHT_OFF);     //初始化灯3

    //4. main中使用的局部变量初始化

    mRuncount = 0;            //主循环计数器

    //5. 全局变量初始化

    //6. 使能模块中断

    //7. 开总中断

    ENABLE_INTERRUPTS;   //开总中断

 

    //进入主循环

    //主循环开始==================================================================

    for (;;)

    {

        //运行指示灯闪烁----------------------------------------------------------

        mRuncount++;               //主循环次数计数器+1

        if (mRuncount >= RUN_COUNTER_MAX)  //主循环次数计数器大于设定的宏常数

        {

            mRuncount = 0;           //主循环次数计数器清零

            light_change(LIGHT_0);      //灯0(LIGHT_0)状态变化

            light_change(LIGHT_1);      //灯1(LIGHT_1)状态变化

            light_change(LIGHT_2);      //灯2(LIGHT_2)状态变化

            light_change(LIGHT_3);      //灯3(LIGHT_3)状态变化

        }

        //以下加入用户程序--------------------------------------------------------

 

    }  //主循环end_for

 

    //主循环结束==================================================================

    return 0;

}

推荐阅读

史海拾趣

苏州锋驰(Feng)公司的发展小趣事
稳流器通常通过将多余电压转化为热量来维持恒定的电流输出,因此存在一定的能量消耗。
ATOP_Technologies公司的发展小趣事

在追求技术创新的同时,ATOP Technologies也始终注重品质管理和品牌建设。公司通过了ISO-9001认证,从产品的研发设计到生产,所有的流程都严格遵循最佳品质原则。此外,ATOP Technologies还注重品牌形象的塑造和推广,通过参加行业活动、举办技术研讨会等方式,不断提升品牌知名度和影响力。

Datatronic公司的发展小趣事

随着全球化趋势的加速,Datatronic公司开始将目光投向国际市场。公司通过参加国际展览、设立海外办事处等方式,积极拓展海外市场。同时,公司还加强了与国际企业的合作,引进先进的技术和管理经验。这些努力使得Datatronic公司在国际市场上逐渐获得了认可,品牌影响力得到了提升。

Diotec Electronics Corp公司的发展小趣事

随着环保意识的提高,Diotec开始关注绿色发展和社会责任。公司积极采用环保材料和生产工艺,减少生产过程中的环境污染。同时,Diotec还参与了一系列公益活动,为当地社区和环境保护事业做出了贡献。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了基础。

Digital Core Design公司的发展小趣事

面对版权问题的挑战和市场的变化,Core Design开始寻求变革。公司的创始人Jeremy Heath-Smith和Adrian Smith在《古墓丽影:黑暗天使》发行后不久就辞去了在Eidos和Core的职务,并创立了新的工作室Circle Studio。然而,这个新工作室最终也未能逃脱被市场淘汰的命运。在2006年6月,Circle Studio被Eidos彻底抛弃,并卖给了另一家公司Rebellion。虽然Core Design的名字被保留下来,但其实际的开发团队和运营已经发生了巨大的变化。在这个过程中,Core Design不得不面对现实,寻找新的发展机遇和方向。

以上这些故事展示了Core Design在电子行业中的发展历程,包括其初创时期的艰辛、成功时期的辉煌、挑战时期的困境以及变革时期的新生。这些故事都基于事实,旨在客观地呈现Core Design的历史和发展。

ASM公司的发展小趣事

进入21世纪,ASM公司开始关注中国市场的潜力。随着中国经济的快速增长和半导体产业的蓬勃发展,ASM公司看到了巨大的商机。公司加大了对中国市场的投入,与中国半导体代工厂建立了紧密的合作关系,为中国市场提供了高质量的产品和服务。这一举措不仅促进了ASM公司在中国市场的快速发展,也为中国半导体产业的进步做出了贡献。

问答坊 | AI 解惑

过流保护方法

(1) 减压法:是指在故障出现时,降低门级电压.由于短路电流比例于外加正门级电压Ug1,因此在故障时,可将正门级电压降低. (2) 切断脉冲方法:由于在过流时,Uce电压升高,我们利用检测集电极电压的方法来判断是否过流,如果过流,就切断触发脉冲.同时尽量 ...…

查看全部问答>

请问大家如何快速显示wince界面

大家好!如何能在7-8秒以内看到wince桌面? usb com cs8900 sd touch nand 等驱动要加载,而不是精简的?…

查看全部问答>

华清远见联手ARM公司资深专家基于ARM平台全国嵌入式系统设计系列高端技术讲座(成都站)

                                                 活动介绍: 作为全 ...…

查看全部问答>

大家看看这AT91RM9200的项目评估如何~?

致力于嵌入式计算提供嵌入式产品、解决方案、技术服务 当今社会,在日常生活的各个微观角落,电子化和信息化的趋势不断深入;具有各种特定功能的电子产品、信息产品、消费类家电蜂拥出现;各行各业对完整的电子信息化解决方案需求日渐增多。在这 ...…

查看全部问答>

请各位大哥大姐们赐教

我用的是C51系列单片机,现在想利用单片机内部的ROM来存储我的数据,便为功能设置状态记录,请问用C该怎么写?…

查看全部问答>

面向汽车应用的LED驱动技术浅谈

中心议题: 汽车LED照明的设计应用双LED应用方案简介 解决方案: 需要内部检测电阻器降低发生噪声干扰 在过去的十年里,汽车电子产品有了突飞猛进的发展,车载电子控制、车载信息服务以及娱乐系统不管是在数量上还是在精细程度上都有了显著的 ...…

查看全部问答>

LAYOUT 注意事项

布局前的准备:1 查看捕捉点设置是否正确.08工艺为0.1,06工艺为0.05,05工艺为0.025.2 Cell名称不能以数字开头.否则无法做DRACULA检查.3 布局前考虑好出PIN的方向和位置4 布局前分析电路,完成同一功能的MOS管画在一起5 对两层金属走向预先订好。一个 ...…

查看全部问答>

想搞一个STM32F103ZET6的开源项目!

想要软硬件全部开源。大家说说对啥感兴趣?或者做一个核心板!希望香水城能够提供支持!哈哈!…

查看全部问答>

使用Timer时需要特殊的设置吗

                                 自己创建的一个IAR工程,在option中的设置使用IO口,AD时都是很正常的,但是同样的设置使用Timer时,却出现了如图 ...…

查看全部问答>

分享比Protel更好用的线路板设计软件加视频教程

PADS原理图和线路板设计全过程录相(8小时)-06 PADS作为国能最常用的线路板设计软件,被广大电子硬件设计工程师所青睐!据不完全调查,深圳市各大电子公司,60%的电子工程师都在用PADS,其界面比PROTE LL简洁。因此想从事硬件设计工程的朋友 ...…

查看全部问答>