main.c
来自「基于MDK的LPC1100处理器开发应用例程」· C语言 代码 · 共 162 行
C
162 行
/*** (C) COPYRIGHT 2010 UP Team, Wuhan University of Technology ************
* 文件名: main.c
* 作者 : UP Team, Wuhan University of Technology
* 日期 : 01/18/2010
* 描述 : 主程序源文件.
*******************************************************************************
*******************************************************************************
* 历史:
* 01/18/2010 : V1.0 初始版本
*******************************************************************************/
/* Includes ------------------------------------------------------------------*/
#include <stdio.h>
#include "LPC11xx.h"
#include "timer16.h"
#include "clkconfig.h"
#include "wdt.h"
#include "gpio.h"
#include "uart.h"
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
extern volatile uint32_t timer16_0_counter;
extern volatile uint32_t p0_1_counter;
volatile uint32_t feed_counter = 0;
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/**
* @函数名:LEDToggle
* @描述:LED灯状态切换
* @参数 端口号: 端口 #
* @参数 位地址: 指定第几位
* @返回值:无
*/
void LEDToggle( uint32_t portNum, uint32_t bitPosi)
{
/* 反转GPIOx.y引脚状态,实现LED灯亮灭状态切换,
x对应GPIO端口,y对应该端口相应的GPIO引脚*/
switch ( portNum )
{
case PORT0:
if ( !(LPC_GPIO0->DATA & (0x1<<bitPosi)))
LPC_GPIO0->DATA |= (0x1<<bitPosi);
else if ( (LPC_GPIO0->DATA & (0x1<<bitPosi)))
LPC_GPIO0->DATA &= ~(0x1<<bitPosi);
break;
case PORT1:
if ( !(LPC_GPIO1->DATA & (0x1<<bitPosi)))
LPC_GPIO1->DATA |= (0x1<<bitPosi);
else if ( (LPC_GPIO1->DATA & (0x1<<bitPosi)))
LPC_GPIO1->DATA &= ~(0x1<<bitPosi);
break;
case PORT2:
if ( !(LPC_GPIO2->DATA & (0x1<<bitPosi)))
LPC_GPIO2->DATA |= (0x1<<bitPosi);
else if ( (LPC_GPIO2->DATA & (0x1<<bitPosi)))
LPC_GPIO2->DATA &= ~(0x1<<bitPosi);
break;
case PORT3:
if ( !(LPC_GPIO3->DATA & (0x1<<bitPosi)))
LPC_GPIO3->DATA |= (0x1<<bitPosi);
else if ( (LPC_GPIO3->DATA & (0x1<<bitPosi)))
LPC_GPIO3->DATA &= ~(0x1<<bitPosi);
break;
default:
break;
}
return;
}
/**
* @函数名:main
* @描述:主函数
* @参数: 无
* @返回值:无
*/
int main (void)
{
SystemInit();
/* 对应UART的NVIC配置包含在UARTIinit()函数中 */
UARTInit(115200);
printf("\n\r-- Basic WDT Project V1.0 --\n\r");
printf("\n\r-- EM-LPC1100 --\n\r");
printf("\n\r-- Feed watchdog timer to prevent it from timeout test --\n\r");
/* 配置WDT时钟 */
WDT_CLK_Setup(WDTCLK_SRC_MAIN_CLK);
/* 初始化Timer16 */
init_timer16( 0, TIME_INTERVAL );
/* 配置NVIC */
NVIC_SetPriority(TIMER_16_1_IRQn, 1);
NVIC_SetPriority(WDT_IRQn, 1);
NVIC_SetPriority(EINT0_IRQn, 0);
/* 初始化BOOT按钮(port0_1) */
GPIOInit();
/* 配置port0_1为输入 */
GPIOSetDir( PORT0, 1, 0 );
/* port0_1上升沿触发中断 */
GPIOSetInterrupt( PORT0, 1, 0, 0, 1 );
GPIOIntEnable( PORT0, 1 );
/* 设置D4...D7对应的port 2_0...3引脚为输出 */
LPC_GPIO2->DIR |= (0x1<<0)|(0x1<<1)|(0x1<<2)|(0x1<<3);
if (LPC_WDT->MOD & WDTOF)
{
printf("\n\r WatchDog Reset! \n\r");
/* 点亮D4...D7 */
LPC_GPIO2->DATA &= ~((0x1<<0)|(0x1<<1)|(0x1<<2)|(0x1<<3));
/* 清除超时标志 */
LPC_WDT->MOD &= ~WDTOF;
}
/* 初始化WDT */
WDTInit();
enable_timer16( 0 );
while( 1 )
{
if ( timer16_0_counter > 0 )
{
/* 喂狗 */
if (p0_1_counter == 0)
{
feed_counter++;
if (feed_counter == 0x7F)
{
LEDToggle(2, 0);
feed_counter = 0;
}
WDTFeed();
}
timer16_0_counter = 0;
}
}
}
/**
* @}
*/
/**
* @}
*/
/**** (C) COPYRIGHT 2010 UP Team, Wuhan University of Technology *****文件结束*******/
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?