Cortex-M3基础学习
无 * 备 注:无 ************************************************************** *****************/ 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 权威指南》。 有输出总会有输入,今天测试一下按键的功能,第一节已经说过了与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 -- 延时时长 * 出口参数: 无 * 备 注:无 **************************************

Cortex-M3 相关文章:
- 基于CMSIS标准的Cortex-M3的应用软件开发(06-20)
- 基于μC/OS-II和TCP/IP协议的多串口服务器(08-23)
- μC/OS-II就绪表算法在Cortex-M3架构上的适配设计(01-22)
- STM32中断与嵌套NVIC快速入门(01-25)
- 基于STM32的电池管理系统触摸屏设计方案(01-25)
- 发挥ARM Cortex-M3和M4微控制器最大作用的要诀(01-21)
