*********************************************************
* 函数名称: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等资料,还可多到论坛转转,有些坛子里深藏了好多老鸟,好多大虾,好多大牛,有你学的,有你问的,只要肯用心,一根网线,能解决很多问题。
|