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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ixp425gpio.c

?? INTEL IXP425的VXWORKS BSP
?? C
字號:
/* ixp425Gpio.c - Intel IXP425 GPIO source file *//* Copyright 2002 Wind River Systems, Inc. *//*modification history--------------------01a,05jun02,jb  initial version...*//*DESCRIPTIONThis is the driver for the Intel IXP425 GPIO controller. This device has a total of16 pins; each of which can be programmed as either an input or output.When programmed as an input a pin can be used as an interrupt source. Each pin can detect interrupts as active high, active low, rising edge, falling edge, or transitional. In addition, two of the pins can be programmed to provide a user programmable frequency source. Available clock frequencies are a fraction of the 66MHz peripheral bus clock,and range from 33MHz to 4.4Mhz.Each pin is also capable of driving external LEDs.USAGETo check and clear an interrupt signalled through the GPIO:	if (ixp425GpioIntStatusGet(line, &status) == OK) 	{		if (status == TRUE)	Interrupt pending	        {		Call your ISR here 	        }		ixp425GPIOIntStatusClear(line);  Clear interrupt	}To configure the GPIO as a clock source:	if (ixp425GPIOLineConfig(IXP425_GPIO_CLK0_PIN, IXP425_GPIO_OUT) == OK)	{		if (ixp425GpioClockSet(IXP425_GPIO_CLK_0, IXP425_GPIO_33_MHZ) == OK) 		{			ixp425GPIOClockEnable(IXP425_GPIO_CLK_0, TRUE);		}	}INCLUDE FILES: ixp425Gpio.hSEE ALSO:.I "Ixp425 Data Sheet,"*//* includes */#include "vxWorks.h"#include "intLib.h"#include "errnoLib.h"#include "errno.h"#include "stdio.h"#include "ixp425Gpio.h"/* defines */#define IXP425_GPIO_INTSTYLE_MASK 0x7C  /* Bits [6:2] define interrupt style */#define IXP425_GPIO_REG_WRITE(regPtr,val) \	(*((volatile UINT32 *)(regPtr)) = (val))#define IXP425_GPIO_REG_READ(regPtr,res) \	((res) = *(volatile UINT32 *)(regPtr))/* Interrupt styles, these refer to actual values used in reg */#define IXP425_GPIO_STYLE_ACTIVE_HIGH	(0x0)#define IXP425_GPIO_STYLE_ACTIVE_LOW	(0x1)#define IXP425_GPIO_STYLE_RISING_EDGE	(0x2)#define IXP425_GPIO_STYLE_FALLING_EDGE	(0x3)#define IXP425_GPIO_STYLE_TRANSITIONAL	(0x4)/* Mask used to clear interrupt styles */#define IXP425_GPIO_STYLE_CLEAR	(0x7)#define IXP425_GPIO_STYLE_SIZE	(3)#define IXP425_GPIO_CLK0_ENABLE (0x100)#define IXP425_GPIO_CLK1_ENABLE (0x1000000)/* Left shift values to set clock terminal count (TC) and duty cycle (DC)*/#define IXP425_GPIO_CLK0TC_LSH (4)#define IXP425_GPIO_CLK1TC_LSH (20)#define IXP425_GPIO_CLK0DC_LSH (0)#define IXP425_GPIO_CLK1DC_LSH (16)/******************************************************************************** ixp425GPIOLineConfig - configure a GPIO pin** This routine configures a GPIO pin/line for use as either an input or output.** RETURNS: OK when line is successfully configured; ERROR if the line number*	   passed is out of range, or an unknown style is requested for an*	   interrupt. */STATUS ixp425GPIOLineConfig (UINT8 lineNo, UINT32 style)    {    volatile UINT32 enableReg;    volatile UINT32 styleReg;    volatile UINT32 intReg;    UINT32 intStyle;    IXP425_GPIO_KEYDECLARE;    if (lineNo > IXP425_GPIO_PIN_MAX)        return (ERROR);    IXP425_GPIO_REG_READ(IXP425_GPIO_GPOER, enableReg);    if (style & IXP425_GPIO_OUT)        {	enableReg &= ~(0x1 << lineNo);	}    else if (style & IXP425_GPIO_IN)	{	    	switch (style & IXP425_GPIO_INTSTYLE_MASK)	    {	    case (IXP425_GPIO_ACTIVE_HIGH):	        intStyle = IXP425_GPIO_STYLE_ACTIVE_HIGH; break;	       	    case (IXP425_GPIO_ACTIVE_LOW):		intStyle = IXP425_GPIO_STYLE_ACTIVE_LOW; break;	    case (IXP425_GPIO_RISING_EDGE):		intStyle = IXP425_GPIO_STYLE_RISING_EDGE; break;	    case (IXP425_GPIO_FALLING_EDGE):		intStyle = IXP425_GPIO_STYLE_FALLING_EDGE; break;	    case (IXP425_GPIO_TRANSITIONAL):		intStyle = IXP425_GPIO_STYLE_TRANSITIONAL; break; 	    default:		intStyle = IXP425_GPIO_STYLE_ACTIVE_HIGH; break;	    }	enableReg |= (0x1 << lineNo);        IXP425_GPIO_INTLOCK (intKey);	if(lineNo >= 8)	/* pins 8-15 */	    {	    lineNo -= 8;	    intReg = IXP425_GPIO_GPIT2R;	    }	else		/* pins 0-7 */	    {	    intReg = IXP425_GPIO_GPIT1R;	    }        /* Clear the style for the appropriate pin */	IXP425_GPIO_REG_READ(intReg, styleReg);	styleReg &= ~(IXP425_GPIO_STYLE_CLEAR << (lineNo*IXP425_GPIO_STYLE_SIZE));	IXP425_GPIO_REG_WRITE(intReg, styleReg);	/* Set the new style */	IXP425_GPIO_REG_READ(intReg, styleReg);	styleReg |= (intStyle << (lineNo*IXP425_GPIO_STYLE_SIZE));	IXP425_GPIO_REG_WRITE(intReg, styleReg);	IXP425_GPIO_INTUNLOCK (intKey);		}    else	/* Unknown style options */	{	return (ERROR);	}    IXP425_GPIO_REG_WRITE(IXP425_GPIO_GPOER, enableReg);    return (OK);    }/******************************************************************************** ixp425GPIOLineGet - get the value of a GPIO pin** RETURNS: OK when pin value is successfully retrieved; ERROR if the pin number*	   passed is out of range.*/STATUS ixp425GPIOLineGet (UINT8 lineNo, IXP425_GPIO_SIG *value)    {    if (lineNo > IXP425_GPIO_PIN_MAX)        return (ERROR);    if (value == NULL)	return (ERROR);    *value = IXP425_GPIO_LINE_GET(lineNo);    return (OK);    }/******************************************************************************** ixp425GPIOLineSet - set the value of a GPIO pin configured for output** RETURNS: OK when pin is successfully set; ERROR if the pin number*	   passed is out of range.*/STATUS ixp425GPIOLineSet (UINT8 lineNo, IXP425_GPIO_SIG value)    {    if (lineNo > IXP425_GPIO_PIN_MAX)	return (ERROR);    if (value == IXP425_GPIO_HIGH)       {       IXP425_GPIO_LINE_SET(lineNo);       }    else if (value == IXP425_GPIO_LOW)       {       IXP425_GPIO_LINE_CLEAR(lineNo);       }    return (OK);    }/******************************************************************************** ixp425GPIOIntStatusGet - get the status of a GPIO pin interpreted as an *			   interrupt.** RETURNS: OK when status is successfully retrieved; ERROR if the pin number*	   passed is out of range.*/STATUS ixp425GPIOIntStatusGet (UINT8 lineNo, BOOL *status)    {    volatile UINT32 intStatusReg;    if (lineNo > IXP425_GPIO_PIN_MAX)	return (ERROR);    if (status == NULL)	return (ERROR);    IXP425_GPIO_REG_READ(IXP425_GPIO_GPISR, intStatusReg);    *status = ((intStatusReg & (0x1 << lineNo)) != 0);    return (OK);    }/******************************************************************************** ixp425GPIOIntStatusClear - clear the status of a GPIO pin interpreted as an *			     interrupt.** RETURNS: OK if status cleared; ERROR if the pin number passed is out of range.*/STATUS ixp425GPIOIntStatusClear (UINT8 lineNo)    {    UINT32 intStatusClr;    if (lineNo > IXP425_GPIO_PIN_MAX)	return (ERROR);    intStatusClr = (0x1 << lineNo);    /* Write 1 to clear */    IXP425_GPIO_REG_WRITE(IXP425_GPIO_GPISR, intStatusClr);    return (OK);    }/******************************************************************************** ixp425GPIOClockSet - Set the frequency for one of the GPIO clocks** RETURNS: OK if clock frequency successfully set; ERROR if frequency is out*          of range, or invalid clock selected.*/STATUS ixp425GPIOClockSet (IXP425_GPIO_CLK_NO clock, IXP425_GPIO_CLK_FREQ freq)    {    volatile UINT32 clkReg;    UINT32 dutyCycle;    if (freq < IXP425_GPIO_33_MHZ || freq > IXP425_GPIO_4_4_MHZ)	return ERROR;    IXP425_GPIO_REG_READ(IXP425_GPIO_GPCLKR, clkReg);        switch (clock)        {	case (IXP425_GPIO_CLK_0):             {	     clkReg |= (freq << IXP425_GPIO_CLK0TC_LSH);	     dutyCycle = (unsigned int)(freq/2);	     clkReg |= (dutyCycle << IXP425_GPIO_CLK0DC_LSH);	     break;	     }	case (IXP425_GPIO_CLK_1):             {	     clkReg |= (freq << IXP425_GPIO_CLK1TC_LSH);	     dutyCycle = (unsigned int)(freq/2);	     clkReg |= (dutyCycle << IXP425_GPIO_CLK1DC_LSH);	     break;	     }	 default:	/* Unknown clock selected */	    return (ERROR);	 }	    IXP425_GPIO_REG_WRITE(IXP425_GPIO_GPCLKR, clkReg);    return (OK);    }/******************************************************************************** ixp425GPIOClockEnable - Enable/disable a GPIO clock** RETURNS: OK if clock successfully enabled; ERROR if unknown clock type.*/STATUS ixp425GPIOClockEnable(IXP425_GPIO_CLK_NO clock, BOOL state)    {    volatile UINT32 clkReg;    IXP425_GPIO_REG_READ(IXP425_GPIO_GPCLKR, clkReg);    switch (clock)        {	case (IXP425_GPIO_CLK_0):	    {	    if(state)	        clkReg |= IXP425_GPIO_CLK0_ENABLE;	    else	        clkReg &= ~IXP425_GPIO_CLK0_ENABLE;	    break;	    }	case (IXP425_GPIO_CLK_1):	    {	    if(state)	        clkReg |= IXP425_GPIO_CLK1_ENABLE;	    else	        clkReg &= ~IXP425_GPIO_CLK1_ENABLE;	    	    break;	    }	default:	/* Unknown clock */	    return (ERROR);	}    IXP425_GPIO_REG_WRITE(IXP425_GPIO_GPCLKR, clkReg);    return (OK);    }/******************************************************************************** ixp425GPIOReset - reset the GPIO controller** This routine resets the pins of the GPIO controller to known default settings.* The settings (defined in ixp425Gpio.h) modify how the pins are programmed* and what value they are set at. It is intended that this function be called* on a warm reset of the IXP425 device. ** RETURNS: N/A*/void ixp425GPIOReset()    {    IXP425_GPIO_KEYDECLARE;	    IXP425_GPIO_INTLOCK (intKey);    IXP425_GPIO_REG_WRITE(IXP425_GPIO_GPOER, IXP425_GPIO_GPOER_DEF);    IXP425_GPIO_REG_WRITE(IXP425_GPIO_GPOUTR, IXP425_GPIO_GPOUTR_DEF);    IXP425_GPIO_REG_WRITE(IXP425_GPIO_GPIT1R, IXP425_GPIO_GPIT1R_DEF);    IXP425_GPIO_REG_WRITE(IXP425_GPIO_GPIT2R, IXP425_GPIO_GPIT2R_DEF);    IXP425_GPIO_REG_WRITE(IXP425_GPIO_GPCLKR, IXP425_GPIO_GPCLKR_DEF);    IXP425_GPIO_INTUNLOCK (intKey);    }/******************************************************************************** ixp425GPIOShow - display current GPIO configuration** RETURNS: N/A*/void ixp425GPIOShow()    {    UINT32 pinNo;    volatile UINT32 confReg;    volatile UINT32 clkReg;	    IXP425_GPIO_REG_READ(IXP425_GPIO_GPOER, confReg);    IXP425_GPIO_REG_READ(IXP425_GPIO_GPCLKR, clkReg);	    printf("\nPin no\tType\tValue");    for (pinNo=0; pinNo<=IXP425_GPIO_PIN_MAX; pinNo++)	{	printf("\n%2u\t",pinNo);	if((confReg & (0x1<<pinNo)) != 0)	    printf("input");	else if( ((pinNo == 14) && (clkReg & IXP425_GPIO_CLK0_ENABLE)) ||	         ((pinNo == 15) && (clkReg & IXP425_GPIO_CLK1_ENABLE)) )	    printf("clock");	else			    printf("output");	printf("\t%d",IXP425_GPIO_LINE_GET(pinNo));	}    printf("\n");    }#ifdef IXP425_GPIO_NPEDEBUG/******************************************************************************** ixp425GPIONPEDebugEnable - enable debugging of NPEs using the GPIO** Debug signals are received from any of the three NPEs and sent through* the GPIO for monitoring on a logic analyzer.** RETURNS: OK if NPE debugging successfully enabled; ERROR otherwise*/STATUS ixp425GPIONPEDebugEnable (UINT32 npe, BOOL state)    {    volatile UINT32 npeReg;    IXP425_GPIO_REG_READ(IXP425_GPIO_GPDBSELR, npeReg);    npeReg &= (~0x3);        switch (npe)	{	case IXP425_GPIO_DEBUG_NPEA:	    npeReg |= IXP425_GPIO_DEBUG_NPEA; 	    break;	case IXP425_GPIO_DEBUG_NPEB:	    npeReg |= IXP425_GPIO_DEBUG_NPEB;	    break;	case IXP425_GPIO_DEBUG_NPEC:	    npeReg |= IXP425_GPIO_DEBUG_NPEC;			    break;	default:	    return (ERROR);	}    if (state == TRUE)		/* Enable */	{	npeReg |= (0x1 << 2);	}    else if (state == FALSE)	/* Disable */	{	npeReg &= (~(0x1 << 2));	}    IXP425_GPIO_REG_WRITE(IXP425_GPIO_GPDBSELR, npeReg);    return (OK);    }#endif /* IXP425_GPIO_NPEDEBUG */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线播放一区三区四| 国产精品一级黄| 在线观看区一区二| 亚洲欧美国产三级| 色哟哟精品一区| 亚洲国产一区二区视频| 欧美久久久久中文字幕| 免费的成人av| 国产婷婷色一区二区三区四区 | 日韩欧美精品在线视频| 国产精品一区一区| 一区二区三区日本| 色综合久久久久| 亚洲乱码一区二区三区在线观看| 91成人在线精品| 爽爽淫人综合网网站| 91精品国产手机| 国产精品99久| 一区二区三区欧美日| 91精品一区二区三区在线观看| 日韩不卡在线观看日韩不卡视频| 久久午夜电影网| 色成人在线视频| 久久精品国产亚洲高清剧情介绍| 国产日韩精品一区二区浪潮av| 99精品热视频| 日韩国产成人精品| 久久色在线观看| 色哟哟欧美精品| 激情综合网激情| 亚洲视频免费观看| 亚洲成人福利片| 男女男精品视频| 色婷婷av一区二区三区gif| 国产欧美日韩视频一区二区| 色妞www精品视频| 麻豆国产精品官网| 国产精品伦理在线| 在线成人午夜影院| av中文字幕亚洲| 麻豆国产91在线播放| 亚洲黄色在线视频| 久久久www成人免费毛片麻豆| 91麻豆国产在线观看| 狠狠色丁香久久婷婷综合丁香| 亚洲欧美日韩综合aⅴ视频| 6080日韩午夜伦伦午夜伦| 成人免费视频视频在线观看免费 | 国产自产高清不卡| 亚洲线精品一区二区三区| 久久精品亚洲精品国产欧美| 欧美日韩免费在线视频| 美女www一区二区| a亚洲天堂av| 依依成人综合视频| 欧美国产综合一区二区| 7777精品伊人久久久大香线蕉最新版| 不卡的av在线| 激情另类小说区图片区视频区| 一区二区三区国产| 国产精品电影院| 国产婷婷色一区二区三区在线| 欧美人xxxx| 欧美影院一区二区三区| 99精品视频在线免费观看| 国产成人丝袜美腿| 国产精品亚洲а∨天堂免在线| 免费成人av在线播放| 亚洲成人资源在线| 一区二区三区在线观看视频 | 欧美久久久久久久久久| 一本久久精品一区二区| 99精品久久免费看蜜臀剧情介绍 | 99麻豆久久久国产精品免费优播| 蜜臀av一区二区在线免费观看 | 91浏览器在线视频| 91在线播放网址| 成人免费看视频| 成人深夜视频在线观看| 国产成人午夜99999| 国产一区二区在线电影| 久久精品久久99精品久久| 久久超碰97中文字幕| 蜜桃久久精品一区二区| 麻豆成人免费电影| 激情综合网天天干| 国产精品99久久久| 波多野结衣在线一区| 成人99免费视频| 91色视频在线| 欧美高清视频在线高清观看mv色露露十八 | 欧美大片顶级少妇| 久久视频一区二区| 国产精品久久免费看| 亚洲欧美在线aaa| 亚洲精品少妇30p| 精品免费99久久| 欧美男生操女生| 欧美一区二区二区| 顶级嫩模精品视频在线看| 精品一区二区三区免费毛片爱| 国产一区二区不卡| 99精品久久99久久久久| 在线视频中文字幕一区二区| 欧美三级蜜桃2在线观看| 欧美一区二区播放| 久久亚洲捆绑美女| 亚洲精品第1页| 日韩高清在线电影| 国产黄色精品视频| 欧美综合一区二区| 日韩精品在线网站| 中文字幕一区二区三区不卡| 一区二区三区美女视频| 美国一区二区三区在线播放| 国产大陆亚洲精品国产| 欧美性高清videossexo| 欧美成人一区二区三区片免费 | 精品久久久久久久久久久久久久久| 欧美本精品男人aⅴ天堂| 国产精品美女久久久久av爽李琼| 亚洲制服丝袜一区| 国产精品99久久久久久宅男| 欧美视频在线观看一区| 久久综合狠狠综合| 亚洲一二三区在线观看| 韩国女主播一区| 亚洲欧洲精品成人久久奇米网| 狠狠色丁香久久婷婷综合丁香| 色综合中文综合网| 欧美精三区欧美精三区| 91精品国产欧美一区二区18| 国产日韩欧美精品综合| 午夜一区二区三区在线观看| 国产大片一区二区| 欧美日本一道本在线视频| 亚洲美女屁股眼交| 国产美女在线精品| 欧美日韩在线免费视频| 国产精品热久久久久夜色精品三区 | 国产欧美一区二区精品性色超碰| 经典一区二区三区| 欧美一区二区三区人| 久久精品在线免费观看| 亚洲一区二区五区| 日韩理论片在线| 狠狠色丁香九九婷婷综合五月| 91激情在线视频| 国产精品区一区二区三| 毛片基地黄久久久久久天堂| 91福利社在线观看| 国产精品的网站| 国产很黄免费观看久久| 精品欧美一区二区久久| 三级成人在线视频| 欧美日韩免费在线视频| 亚洲激情图片一区| aaa国产一区| 国产日本一区二区| 国内精品写真在线观看| 91精品国产欧美一区二区| 亚洲精品视频在线观看网站| 9色porny自拍视频一区二区| 国产性天天综合网| 国产精品一区免费在线观看| 欧美一区日本一区韩国一区| 午夜a成v人精品| 欧美精品自拍偷拍动漫精品| 在线播放一区二区三区| 欧美这里有精品| 福利91精品一区二区三区| 欧美激情中文不卡| 成人国产精品免费观看| 青青草国产精品亚洲专区无| 欧美v国产在线一区二区三区| 视频一区二区三区在线| 在线观看亚洲精品视频| 国产精品的网站| 色综合色综合色综合| 日韩美女啊v在线免费观看| heyzo一本久久综合| 亚洲欧洲av在线| 91色视频在线| 亚洲成av人片在www色猫咪| 欧美性欧美巨大黑白大战| 亚洲风情在线资源站| 欧美日本一区二区| 久久99日本精品| 国产午夜精品一区二区| 粉嫩在线一区二区三区视频| 1024亚洲合集| 欧美日韩一区中文字幕| 免费成人在线网站| 国产日韩一级二级三级| 94色蜜桃网一区二区三区| 一区二区在线观看av| 婷婷激情综合网| 欧美系列一区二区| 日本欧美一区二区三区| 欧美精品一区二区三|