您当前的位置:五五电子网电子知识单片机-工控设备源码-程序Cortex-M3处理器按键实验程序自学 正文
Cortex-M3处理器按键实验程序自学

Cortex-M3处理器按键实验程序自学

点击数:7708 次   录入时间:03-04 11:58:30   整理:http://www.55dianzi.com   源码-程序

    有输出总会有输入,今天测试一下按键的功能,第一节已经说过了与GPIO端口相关的寄存器,这里不在重复,想要从端口读取数据,首先把FIODIR这个寄存器设置为输入,再从FIOPIN寄存器读取数据就可以了,这个寄存器具有读写功能。下面说一下这个实验的电路图,如下所示:

图1 JoySTICk按键连线图

      关于按键电路还有一个,不过是接在外部中断0 上的,其电路图如下图所示:

      这次实验没有涉及到外部中断,都是做普通的IO输入使用的,所以在这里外部中断就做学习总结了。下面给出这次实验的主程序:

      /*********************************************************************************

      文件名称:mian.c

      功    能: 主要调度函数及应用函数

      编译环境: MDKV4.12

      时    钟: 外部12MHz

      日    期: 11/08/16

      作    者: 懒猫爱飞

      备    注:NULL

      ---------------------------------------------------------------------------------

      修改内容:NULL

      修改日期:XXXX年xx月xx日      xx时xx分

      修改人员:xxx xxx xxx

      **********************************************************************************/

      #include"main.h"

      volatile unsigned lONg SysTickCnt;      /* 用于系统时钟计数*/

      /********************************************************************************

      * 函数名称:void SysTick_Handler (void)

      * 函数功能: 系统节拍定时器中断函数,每1ms计数一次

      * 入口参数: 无

      * 出口参数: 无

      * 备    注:无

      *******************************************************************************/

      void SysTick_Handler (void)

      {

      SysTickCnt++;

      }

      /********************************************************************************

      * 函数名称:void Delay (unsigned long tick)

      * 函数功能: 毫秒级延时函数

      * 入口参数: unsigned long tick -- 延时时长

      * 出口参数: 无

      * 备    注:无

      *******************************************************************************/

      void DelayMs (unsigned long tick)

      {

      unsigned long systickcnt;

      systickcnt = SysTickCnt;

      while ((SysTickCnt - systickcnt) < tick);

      }

      /********************************************************************************

      * 函数名称:void PortInit(void)

      * 函数功能: 端口初始化

      * 入口参数: 无

      * 出口参数: 无

      * 备    注:无

      *******************************************************************************/

      void PortInit(void)

      {

      GPIO1->FIODIR = 0xB0000000;          /* LEDs on PORT1 defined as Output    */

      GPIO2->FIODIR = 0x0000007C;          /* LEDs on PORT2 defined as Output    */

      LEDAllOff();                                                                                                /* 初始化时熄灭所有的灯*/

      }



www.55dianzi.com

      /********************************************************************************

      * 函数名称:int main(void)

      * 函数功能: 主函数

      * 入口参数: 无

      * 出口参数: 无

      * 备    注:无

      *******************************************************************************/

      int main(void)

      {

      unsigned char LEDFlag = 1;  // 记录LED状态

      SystEMInit();     /* 系统初始化,函数在system_LPC17xx.c文件夹中定义*/

      SysTICk_Config(SystemFrequency/1000 - 1);   /* 配置时钟中断,每1ms中断一次*/

      /* 在core_cm3.h中定义*/

      PortInit();       /* 端口初始化*/

      while(1)

      {

      if(!LedFlag)

      {

      Led1On();  // 点亮LED

      }

      else

      {

      Led1Off(); // 熄灭LED

      }

      if(!KEY_VAL)

      {

      DelayMs(10);

      while(!KEY_VAL);

      LedFlag ^=1;  // Led状态改变一次

      }

      if(!KEY_EN)       // 此处是为了测试摇杆按键的功能是否正常

      {

      DelayMs(10);

      while(!KEY_EN);

      Led8Neg();  // 点亮LED // Led状态改变一次

      }

      }

      }

      上一节对程序没有做过多的解释,这里详细分析一下,工程中包含的源文件如下图所示:

      工程中startup_LPC17XX.s是M3的启动文件,启动文件由汇编语言写的,它的作用一般是下面这几个:

      1)堆和栈的初始化

      2)向量表定义

      3)地址重映射及中断向量表的转移

      4)设置系统时钟频率

      5)中断寄存器的初始化

      6)进入C应用程序

      工程中main.c是我写的应用程序,也就是这次实验的程序,core_cm3.c与core_cm3.h主要是M3外围驱动源代码与头文件,使用时一般不需要修改,直接调用就可以。system_LPC17xx.c与system_LPC17xx.h是关于系统的文件,里面主要提供了系统初始化函数SystemInit(),文件中默认情况下定义的晶振的大小为12M,使用的是外部晶振,还使用了PLL0倍频,关于倍频的问题,以后慢慢再总结。芯片LPC1768的初始化主要包括时钟配置,电源管理,功耗管理等。相比较而言,时钟配置相对复杂,因为它包括两个PLL倍频电路,一个是主PLL0主要是为系统和USB提供时钟,另一个是PLL1专门为USB提供48M时钟,但也可以不使用它们。由于时钟配置比较灵活,所以相以设置这些参数也比较复杂,但是这些在系统文件中已有明确的定义,所以想要变动时只需修改系统文件中相应的宏或函数即可。

[1] [2]  下一页


本文关键字:处理器  程序  源码-程序单片机-工控设备 - 源码-程序