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 + -
显示快捷键?