微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 自学Cortex-M3(1):GPIO实验1

自学Cortex-M3(1):GPIO实验1

时间:07-04 来源:互联网 点击:

*********************************************************

  * 函数名称: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 */

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

  Led2Off();

  Led3Off();

  Led4Off();

  Led5Off();

  Led6Off();

  Led7Off();

  Led8Off();

  }

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

  * 函数名称:int main(void)

  * 函数功能: 主函数

  * 入口参数: 无

  * 出口参数: 无

  * 备 注:无

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

  int main(void)

  {

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

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

  /* 在core_cm3.h中定义*/

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

  while(1)

  {

  Led1On(); //LED1开

  Led4On(); //LED4 开

  DelayMs(200);

  Led1Off(); //LED1关

  Led4Off(); //LED4关

  DelayMs(200);

  }

  }

  因为程序是最基础的实验,所以不是太难,程序中延时函数用的是系统节拍定时器,每1m中断一次,系统节拍定时器的中断配置函数是SysTick_Config(uint32_t ticks)它在core_cm3.h中有定义,有兴趣的话可以看看。GPIO是一个结构体指针,原型在LPC17XX.H这个头文件中,其定义的原型如下所示:

  typedef struct

  {

  __IO uint32_t FIODIR;

  uint32_t RESERVED0[3];

  __IO uint32_t FIOMASK;

  __IO uint32_t FIOPIN;

  __IO uint32_t FIOSET;

  __O uint32_t FIOCLR;

  } GPIO_TypeDef;

  还有几个宏定义,如下所示:

  1)、#define GPIO1 (( GPIO_TypeDef *) GPIO1_BASE)

  上面这个宏是把GPIO1指向芯片GPIO1的基址上,

  2)、#define GPIO1_BASE (GPIO_BASE + 0x00020)

  3)、#define GPIO_BASE (0x2009C000UL)

  这三个宏就把GPIO的基址定义了出来,关于LPV1768内部地址的分配情况,可以参看它的数据手册,也可参考一下《ARM Cortex-M3 权威指南》,这本书在网上有电子书,好像宋岩宁牛人早已把它翻译成中文了,懒猫现在也正在参考这本书,另外一定要多去NXP网站看一下它的handbook,whitepaper等资料,还可多到论坛转转,有些坛子里深藏了好多老鸟,好多大虾,好多大牛,有你学的,有你问的,只要肯用心,一根网线,能解决很多问题。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top