亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? gpio.c

?? LPC1114_例程和教程
?? C
字號:
/******************** (C) COPYRIGHT 2010 Embest Info&Tech Co.,LTD. ************
* 文件名: gpio.c
* 作者  : Wuhan R&D Center, Embest
* 日期  : 01/18/2010
* 描述  : NXP LPC11xx 系列處理器 GPIO API 文件
*******************************************************************************
*******************************************************************************
* 歷史:
* 01/18/2010		 : V1.0		   初始版本
*******************************************************************************/
/* Includes ------------------------------------------------------------------*/
#include <stdio.h>
#include "LPC11xx.h"			/* LPC11xx 外設寄存器 */
#include "gpio.h"

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
volatile uint32_t gpio0_counter = 0;
volatile uint32_t gpio1_counter = 0;
volatile uint32_t gpio2_counter = 0;
volatile uint32_t gpio3_counter = 0;
volatile uint32_t p0_1_counter  = 0;
volatile uint32_t p1_1_counter  = 0;
volatile uint32_t p2_1_counter  = 0;
volatile uint32_t p3_1_counter  = 0;

/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/


/**
  * @函數(shù)名:PIOINT0_IRQHandler
  * @描述:使用GPIO一個管腳(端口0的管腳1)作為中斷源 
  * @參數(shù): 無
  * @返回值:無
  */
  /*
void PIOINT0_IRQHandler(void)
{
  uint32_t regVal;

  gpio0_counter++;
  regVal = GPIOIntStatus( PORT0, 1 );
  if ( regVal )
  {
	p0_1_counter++;
	GPIOSetDir( 1, 8, 1 );
	GPIOIntClear( PORT0, 1 );
  }	  
  printf("\n\r PIOINT0_IRQHandler! \n\r");		
  return;
}

*
  * @函數(shù)名:PIOINT1_IRQHandler
  * @描述:使用GPIO一個管腳(端口1的管腳1)作為中斷源
  * @參數(shù):無
  * @返回值:無
 
void PIOINT1_IRQHandler(void)
{
  uint32_t regVal;

  gpio1_counter++;
  regVal = GPIOIntStatus( PORT1, 1 );
  if ( regVal )
  {
	GPIOSetValue(PORT1,8,1);
	GPIOIntClear( PORT1, 0);
  }		
  return;
}
 */

/**
  * @函數(shù)名:PIOINT2_IRQHandler
  * @描述:使用GPIO一個管腳(端口2的管腳1)作為中斷源 interrupt source
  * @參數(shù):無
  * @返回值:無
  
void PIOINT2_IRQHandler(void)
{
  uint32_t regVal;

  gpio2_counter++;
  regVal = GPIOIntStatus( PORT1, 0 );
  if ( regVal )
  {
	GPIOSetValue(PORT1,8,1);
	GPIOIntClear( PORT1, 0);
  }		
  return;
}
*/

/**
  * @函數(shù)名:PIOINT3_IRQHandler
  * @描述:使用GPIO一個管腳(端口3的管腳1)作為中斷源 interrupt source
  * @參數(shù): 無
  * @返回值:無

void PIOINT3_IRQHandler(void)
{
  uint32_t regVal;

  gpio3_counter++;
  regVal = GPIOIntStatus( PORT3, 1 );
  if ( regVal )
  {
	p3_1_counter++;
	GPIOIntClear( PORT3, 1 );
  }		
  return;
}
  */
/**
  * @函數(shù)名:GPIOInit
  * @描述:初始化GPIO,設置GPIO的中斷例程
  * @參數(shù): 無
  * @返回值:真或假,如果VIC表已滿并且GPIO中斷例程已經(jīng)設置了則返回假。
  */
void GPIOInit( void )
{
  /* 使能AHB時鐘到GPIO域。*/
  LPC_SYSCON->SYSAHBCLKCTRL |= (1<<6);

#ifdef __JTAG_DISABLED  
  LPC_IOCON->JTAG_TDO_PIO1_1  &= ~0x07;
  LPC_IOCON->JTAG_TDO_PIO1_1  |= 0x01;
#endif

  /* 當I/O管腳被配置為外部中斷時,建立NVIC。*/
  NVIC_EnableIRQ(EINT0_IRQn);
  NVIC_EnableIRQ(EINT1_IRQn);
  NVIC_EnableIRQ(EINT2_IRQn);
  NVIC_EnableIRQ(EINT3_IRQn);
  return;
}

/**
  * @函數(shù)名:GPIOSetDir
  * @描述:設置GPIO端口方向
  * @參數(shù):端口號,管腳位置,方向(1為輸出,0為輸入)
  * @返回值:無
  */
void GPIOSetDir( uint32_t portNum, uint32_t bitPosi, uint32_t dir )
{
  /* 如果方向是輸出(1),但是GPIOx_DIR的方向沒有設置,設置方向為輸出(1);
  如果方向是輸入(0),但是GPIOx_DIR已經(jīng)設置了,清方向后在設置為輸入(0)。
  其他條件都忽略。在端口3上(只有0至3位),如果位值超出了范圍,沒有錯誤保護	。 */
  switch ( portNum )
  {
	case PORT0:
	  if ( !(LPC_GPIO0->DIR & (0x1<<bitPosi)) && (dir == 1) )
	  {
		LPC_GPIO0->DIR |= (0x1<<bitPosi);
	  }
	  else if ( (LPC_GPIO0->DIR & (0x1<<bitPosi)) && (dir == 0) )
	  {
		LPC_GPIO0->DIR &= ~(0x1<<bitPosi);
	  }	  
	  break;
 	case PORT1:
	  if ( !(LPC_GPIO1->DIR & (0x1<<bitPosi)) && (dir == 1) )
	  {
		LPC_GPIO1->DIR |= (0x1<<bitPosi);
	  }
	  else if ( (LPC_GPIO1->DIR & (0x1<<bitPosi)) && (dir == 0) )
	  {
		LPC_GPIO1->DIR &= ~(0x1<<bitPosi);
	  }	  
	  break;
	case PORT2:
	  if ( !(LPC_GPIO2->DIR & (0x1<<bitPosi)) && (dir == 1) )
	  {
		LPC_GPIO2->DIR |= (0x1<<bitPosi);
	  }
	  else if ( (LPC_GPIO2->DIR & (0x1<<bitPosi)) && (dir == 0) )
	  {
		LPC_GPIO2->DIR &= ~(0x1<<bitPosi);
	  }	  
	  break;
	case PORT3:
	  if ( !(LPC_GPIO3->DIR & (0x1<<bitPosi)) && (dir == 1) )
	  {
		LPC_GPIO3->DIR |= (0x1<<bitPosi);
	  }
	  else if ( (LPC_GPIO3->DIR & (0x1<<bitPosi)) && (dir == 0) )
	  {
		LPC_GPIO3->DIR &= ~(0x1<<bitPosi);
	  }	  
	  break;
	default:
	  break;
  }
}
/*
uint32_t GPIOGetbit(uint32_t portNum,uint32_t bitPosi)
{
	uint32_t bitVal;
	switch(portNum)
	{
		case PORT0:
			bitVal=(LPC_GPIO0->DATA>>bitPosi)&0x01;
			return	bitVal;
			break;
		case PORT1:
			bitVal=(LPC_GPIO1->DATA>>bitPosi)&0x01;
			return	bitVal;
			break;
		case PORT2:
			bitVal=(LPC_GPIO2->DATA>>bitPosi)&0x01;
			return	bitVal;
			break;
		case PORT3:
			bitVal=(LPC_GPIO3->DATA>>bitPosi)&0x01;
			return	bitVal;
			break;
	}	
} */
/**
  * @函數(shù)名:GPIOSetValue
  * @描述:設置/清除一個在GPIO端口X(X是端口號)上的一些特定管腳上的位值。 
  * @參數(shù):端口號,位地址,位值
  * @返回值:無
  */
void GPIOSetValue( uint32_t portNum, uint32_t bitPosi, uint32_t bitVal )
{
   /* 如果值是,但是 GPIOx_DAT 沒有設置,設置 DATA
  為 1; 如果值是 0,但是 GPIOx_DAT 已經(jīng)設置了, 清除
  DATA 為 0。其他條件都忽略。在端口3上(只有0至3位),如果位值超出了范圍,沒有錯誤保護	。 */
  switch ( portNum )
  {
	case PORT0:
	  if ( !(LPC_GPIO0->DATA & (0x1<<bitPosi)) && (bitVal == 1) )
	  {
		LPC_GPIO0->DATA |= (0x1<<bitPosi);
	  }
	  else if ( (LPC_GPIO0->DATA & (0x1<<bitPosi)) && (bitVal == 0) )
	  {
		LPC_GPIO0->DATA &= ~(0x1<<bitPosi);
	  }	  
	  break;
 	case PORT1:
	  if ( !(LPC_GPIO1->DATA & (0x1<<bitPosi)) && (bitVal == 1) )
	  {
		LPC_GPIO1->DATA |= (0x1<<bitPosi);
	  }
	  else if ( (LPC_GPIO1->DATA & (0x1<<bitPosi)) && (bitVal == 0) )
	  {
		LPC_GPIO1->DATA &= ~(0x1<<bitPosi);
	  }	  
	  break;
	case PORT2:
	  if ( !(LPC_GPIO2->DATA & (0x1<<bitPosi)) && (bitVal == 1) )
	  {
		LPC_GPIO2->DATA |= (0x1<<bitPosi);
      }
	  else if ( (LPC_GPIO2->DATA & (0x1<<bitPosi)) && (bitVal == 0) )
	  {
		LPC_GPIO2->DATA &= ~(0x1<<bitPosi);
	  }	  
	  break;
	case PORT3:
	  if ( !(LPC_GPIO3->DATA & (0x1<<bitPosi)) && (bitVal == 1) )
	  {
		LPC_GPIO3->DATA |= (0x1<<bitPosi);
	  }
	  else if ( (LPC_GPIO3->DATA & (0x1<<bitPosi)) && (bitVal == 0) )
	  {
		LPC_GPIO3->DATA &= ~(0x1<<bitPosi);
	  }	  
	  break;
	default:
	  break;
  }
}

/**
  * @函數(shù)名:GPIOSetInterrupt
  * @描述:設置中斷偵測,事件等。邊沿或?qū)哟危?為邊沿,1為層次
  *			  單邊沿或雙邊沿,0為單邊沿,1為雙邊沿高或低有效等。
  * @參數(shù):端口號, 位地址, sense, single/doube, polarity
  * @返回值:無
  */				
void GPIOSetInterrupt( uint32_t portNum, uint32_t bitPosi, uint32_t sense,
			uint32_t single, uint32_t event )
{
  switch ( portNum )
  {
	case PORT0:
	  if ( sense == 0 )
	  {
		LPC_GPIO0->IS &= ~(0x1<<bitPosi);
		/* single or double only applies when sense is 0(邊沿觸發(fā)) */
		if ( single == 0 )
		  LPC_GPIO0->IBE &= ~(0x1<<bitPosi);
		else
		  LPC_GPIO0->IBE |= (0x1<<bitPosi);
	  }
	  else
	  	LPC_GPIO0->IS |= (0x1<<bitPosi);
	  if ( event == 0 )
		LPC_GPIO0->IEV &= ~(0x1<<bitPosi);
	  else
		LPC_GPIO0->IEV |= (0x1<<bitPosi);
	break;
 	case PORT1:
	  if ( sense == 0 )
	  {
		LPC_GPIO1->IS &= ~(0x1<<bitPosi);
		/* single or double only applies when sense is 0(edge trigger). */
		if ( single == 0 )
		  LPC_GPIO1->IBE &= ~(0x1<<bitPosi);
		else
		  LPC_GPIO1->IBE |= (0x1<<bitPosi);
	  }
	  else
	  	LPC_GPIO1->IS |= (0x1<<bitPosi);
	  if ( event == 0 )
		LPC_GPIO1->IEV &= ~(0x1<<bitPosi);
	  else
		LPC_GPIO1->IEV |= (0x1<<bitPosi);  
	break;
	case PORT2:
	  if ( sense == 0 )
	  {
		LPC_GPIO2->IS &= ~(0x1<<bitPosi);
		/* single 或 double 只在 sense 為 0 時應用(edge trigger). */
		if ( single == 0 )
		  LPC_GPIO2->IBE &= ~(0x1<<bitPosi);
		else
		  LPC_GPIO2->IBE |= (0x1<<bitPosi);
	  }
	  else
	  	LPC_GPIO2->IS |= (0x1<<bitPosi);
	  if ( event == 0 )
		LPC_GPIO2->IEV &= ~(0x1<<bitPosi);
	  else
		LPC_GPIO2->IEV |= (0x1<<bitPosi);  
	break;
	case PORT3:
	  if ( sense == 0 )
	  {
		LPC_GPIO3->IS &= ~(0x1<<bitPosi);
		/* single 或 double 只在 sense 為 0 時應用(edge trigger). */
		if ( single == 0 )
		  LPC_GPIO3->IBE &= ~(0x1<<bitPosi);
		else
		  LPC_GPIO3->IBE |= (0x1<<bitPosi);
	  }
	  else
	  	LPC_GPIO3->IS |= (0x1<<bitPosi);
	  if ( event == 0 )
		LPC_GPIO3->IEV &= ~(0x1<<bitPosi);
	  else
		LPC_GPIO3->IEV |= (0x1<<bitPosi);	  
	break;
	default:
	  break;
  }
  return;
}

/**
  * @函數(shù)名:GPIOIntEnable
  * @描述:使能相關(guān)端口管腳中斷
  * @參數(shù):端口號, 位地址
  * @返回值:無
  */
void GPIOIntEnable( uint32_t portNum, uint32_t bitPosi )
{
  switch ( portNum )
  {
	case PORT0:
	  LPC_GPIO0->IE |= (0x1<<bitPosi); 
	break;
 	case PORT1:
	  LPC_GPIO1->IE |= (0x1<<bitPosi);	
	break;
	case PORT2:
	  LPC_GPIO2->IE |= (0x1<<bitPosi);	    
	break;
	case PORT3:
	  LPC_GPIO3->IE |= (0x1<<bitPosi);	    
	break;
	default:
	  break;
  }
  return;
}

/**
  * @函數(shù)名:	GPIOIntDisable
  * @描述:	屏蔽相關(guān)端口管腳的中斷
  * @參數(shù):	端口號, 位地址
  * @返回值:	無 
  */
void GPIOIntDisable( uint32_t portNum, uint32_t bitPosi )
{
  switch ( portNum )
  {
	case PORT0:
	  LPC_GPIO0->IE &= ~(0x1<<bitPosi); 
	break;
 	case PORT1:
	  LPC_GPIO1->IE &= ~(0x1<<bitPosi);	
	break;
	case PORT2:
	  LPC_GPIO2->IE &= ~(0x1<<bitPosi);	    
	break;
	case PORT3:
	  LPC_GPIO3->IE &= ~(0x1<<bitPosi);	    
	break;
	default:
	  break;
  }
  return;
}

/**
  * @函數(shù)名:GPIOIntStatus
  * @描述:獲得端口管腳的中斷狀態(tài)。 
  * @參數(shù):端口號, 位地址
  * @返回值:無 
  */
uint32_t GPIOIntStatus( uint32_t portNum, uint32_t bitPosi )
{
  uint32_t regVal = 0;

  switch ( portNum )
  {
	case PORT0:
	  if ( LPC_GPIO0->MIS & (0x1<<bitPosi) )
		regVal = 1;
	break;
 	case PORT1:
	  if ( LPC_GPIO1->MIS & (0x1<<bitPosi) )
		regVal = 1;	
	break;
	case PORT2:
	  if ( LPC_GPIO2->MIS & (0x1<<bitPosi) )
		regVal = 1;		    
	break;
	case PORT3:
	  if ( LPC_GPIO3->MIS & (0x1<<bitPosi) )
		regVal = 1;		    
	break;
	default:
	  break;
  }
  return ( regVal );
}

/** 
  * @函數(shù)名:	GPIOIntClear
  * @描述:	清除端口管腳的中斷。
  * @參數(shù):	端口號, 位地址
  * @返回值:	無
  */
void GPIOIntClear( uint32_t portNum, uint32_t bitPosi )
{
  switch ( portNum )
  {
	case PORT0:
	  LPC_GPIO0->IC |= (0x1<<bitPosi); 
	break;
 	case PORT1:
	  LPC_GPIO1->IC |= (0x1<<bitPosi);	
	break;
	case PORT2:
	  LPC_GPIO2->IC |= (0x1<<bitPosi);	    
	break;
	case PORT3:
	  LPC_GPIO3->IC |= (0x1<<bitPosi);	    
	break;
	default:
	  break;
  }
  return;
}

/**
  * @}
  */ 

/**
  * @}
  */ 
/************* (C) COPYRIGHT 2010 Wuhan R&D Center, Embest *****文件結(jié)束*******/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲视频香蕉人妖| 亚洲男人的天堂在线观看| 麻豆免费看一区二区三区| 欧美日韩久久不卡| 亚洲综合丝袜美腿| 91美女在线看| 亚洲精品老司机| 色94色欧美sute亚洲线路一久| 亚洲免费观看在线视频| 91免费视频网| 亚洲欧洲韩国日本视频| 色香色香欲天天天影视综合网| 亚洲女同女同女同女同女同69| www.欧美精品一二区| 中文字幕在线免费不卡| 色偷偷88欧美精品久久久| 亚洲一区中文日韩| 欧美色网一区二区| 丝瓜av网站精品一区二区| 欧美日本高清视频在线观看| 日韩有码一区二区三区| 欧美一区永久视频免费观看| 美女免费视频一区二区| 精品国产一二三| 国产精品一区二区无线| 国产精品久久久久影院亚瑟| 91麻豆高清视频| 亚洲va欧美va人人爽| 欧美电影影音先锋| 久久国产免费看| 国产日产欧美一区二区视频| 99视频精品免费视频| 亚洲精品国产视频| 国产天堂亚洲国产碰碰| 欧美激情一区在线| 91污片在线观看| 亚洲国产成人porn| 欧美成人r级一区二区三区| 国产成人小视频| 亚洲黄色性网站| 日韩一区二区三区四区五区六区| 国内精品视频一区二区三区八戒| 国产亚洲一区二区在线观看| 91麻豆福利精品推荐| 日韩经典中文字幕一区| 久久亚洲捆绑美女| 91同城在线观看| 青青草91视频| 久久久久久免费网| 色婷婷综合在线| 老司机一区二区| 中文字幕欧美一| 欧美日韩国产美女| 国产91丝袜在线播放九色| 有码一区二区三区| 精品久久久久久久人人人人传媒| 99这里都是精品| 日韩成人av影视| 国产精品久久久久影院| 欧美伦理影视网| 国产成人精品免费一区二区| 亚洲国产综合色| 久久久久国产精品麻豆| 欧美日韩视频专区在线播放| 从欧美一区二区三区| 午夜婷婷国产麻豆精品| 中文字幕不卡在线| 制服丝袜国产精品| 成人av手机在线观看| 免费在线一区观看| 国产精品免费网站在线观看| 日韩欧美中文一区| 色综合天天综合给合国产| 精品一区二区日韩| 夜色激情一区二区| 久久久久久久久久久99999| 欧美日韩电影在线| 白白色 亚洲乱淫| 久久精品国产久精国产爱| 亚洲欧美日韩综合aⅴ视频| 久久综合久色欧美综合狠狠| 精品视频1区2区3区| 成人av在线观| 精品中文字幕一区二区小辣椒| 一区二区三区欧美视频| 日本一二三四高清不卡| 日韩欧美一区中文| 色乱码一区二区三区88| 国产精品99久| 免费av成人在线| 亚洲精品一卡二卡| 国产精品网站导航| 亚洲精品在线三区| 欧美理论电影在线| 国产综合一区二区| 欧美系列日韩一区| 国产电影一区二区三区| 日本欧美一区二区三区乱码| 亚洲精品免费电影| 国产精品乱人伦| 欧美精品一区男女天堂| 91精选在线观看| 在线观看免费视频综合| 不卡一区二区三区四区| 国产在线精品不卡| 久久精品国产免费| 奇米四色…亚洲| 香港成人在线视频| 亚洲一本大道在线| 亚洲精品视频在线看| 最新热久久免费视频| 国产日产精品一区| 26uuu色噜噜精品一区| 日韩一区二区三区高清免费看看| 欧美私人免费视频| 欧洲精品中文字幕| 色欲综合视频天天天| 成人动漫中文字幕| 福利一区二区在线观看| 国产美女av一区二区三区| 另类专区欧美蜜桃臀第一页| 美国三级日本三级久久99 | 欧美变态凌虐bdsm| 欧美一区二区三区日韩| 7878成人国产在线观看| 欧美午夜电影在线播放| 在线精品视频一区二区三四| 欧美在线高清视频| 日本黄色一区二区| 色综合中文字幕国产 | 国产成都精品91一区二区三| 国产一区二区三区四区五区入口| 激情五月激情综合网| 视频一区视频二区中文| 亚洲v日本v欧美v久久精品| 午夜精品久久久久久久久久| 日本亚洲免费观看| 蜜臀av亚洲一区中文字幕| 毛片av一区二区三区| 精品中文av资源站在线观看| 精品午夜一区二区三区在线观看| 国内久久精品视频| 国产电影一区在线| 99国产麻豆精品| 在线免费一区三区| 欧美日韩在线综合| 欧美一卡二卡三卡| 欧美精品一区二区三区久久久| 久久免费的精品国产v∧| 国产亚洲精久久久久久| 国产精品美女久久久久久久久久久 | 精品粉嫩aⅴ一区二区三区四区| 精品国产一区二区三区久久久蜜月| 久久精品视频网| 综合久久国产九一剧情麻豆| 亚洲已满18点击进入久久| 五月婷婷综合网| 久久综合综合久久综合| 懂色av一区二区夜夜嗨| 99国产精品国产精品久久| 欧美色倩网站大全免费| 欧美一级高清大全免费观看| 久久精品一区二区| 亚洲欧美日韩系列| 午夜国产不卡在线观看视频| 九一久久久久久| 成人永久免费视频| 欧美在线啊v一区| 日韩欧美一区二区不卡| 欧美激情一区二区三区四区| 亚洲精品老司机| 久久99精品国产麻豆婷婷洗澡| 成人免费视频一区二区| 欧美性受xxxx黑人xyx性爽| 欧美videossexotv100| 亚洲四区在线观看| 日韩av电影免费观看高清完整版 | 成人综合婷婷国产精品久久蜜臀 | 成人sese在线| 69久久夜色精品国产69蝌蚪网| 久久久久久久久岛国免费| 洋洋成人永久网站入口| 国产在线不卡一卡二卡三卡四卡| 99re亚洲国产精品| 欧美一级电影网站| 国产精品美日韩| 人人狠狠综合久久亚洲| 成人免费黄色大片| 制服丝袜在线91| 最新不卡av在线| 韩国中文字幕2020精品| 波多野结衣精品在线| 欧美日韩一级黄| 中文字幕乱码日本亚洲一区二区 | 亚洲中国最大av网站| 韩国v欧美v日本v亚洲v| 欧洲色大大久久| 精品日产卡一卡二卡麻豆| 一区二区三区自拍| 精品一区二区三区免费|