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

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

?? ixp425gpio.c

?? ixp425 bsp for vxworks
?? 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一区二区三区免费野_久草精品视频
日韩一区二区三区在线| 视频一区在线视频| 日本亚洲视频在线| 91在线小视频| 久久久久国产精品麻豆ai换脸| 天堂成人国产精品一区| 成人精品高清在线| 亚洲精品一区二区三区在线观看 | 日本一不卡视频| 99re亚洲国产精品| 中文成人综合网| 精品一区二区成人精品| 69久久99精品久久久久婷婷| 亚洲日本青草视频在线怡红院| 国产一区二区三区黄视频 | 日本不卡一区二区三区高清视频| 99精品视频在线观看| 国产日韩欧美亚洲| 精品一区二区三区免费| 6080国产精品一区二区| 亚洲成人av一区二区三区| 色88888久久久久久影院野外| 日本一区二区久久| 国产成人夜色高潮福利影视| 亚洲精品在线观看视频| 狠狠狠色丁香婷婷综合久久五月| 日韩视频免费观看高清完整版在线观看| 亚洲制服欧美中文字幕中文字幕| 一本大道久久a久久综合| 亚洲图片另类小说| 91老司机福利 在线| 亚洲一区欧美一区| 欧美久久一区二区| 五月天一区二区三区| 69p69国产精品| 免费成人在线网站| 精品国产123| 国产麻豆一精品一av一免费| 国产偷国产偷精品高清尤物| 国产福利精品一区| 成人免费在线播放视频| 一本大道综合伊人精品热热 | 国产精品久久久久桃色tv| 懂色av一区二区三区蜜臀| 国产精品天干天干在线综合| a在线欧美一区| 亚洲一区成人在线| 精品日韩一区二区| 国产a区久久久| 亚洲精品成a人| 91精品国产综合久久香蕉麻豆| 美国精品在线观看| 国产精品高潮呻吟久久| 在线视频一区二区三| 另类小说色综合网站| 久久久久久久av麻豆果冻| 91蜜桃免费观看视频| 午夜欧美2019年伦理| 国产三级欧美三级日产三级99| 99久久精品久久久久久清纯| 日韩国产在线一| 中文字幕av一区 二区| 欧美天堂亚洲电影院在线播放| 日本伊人午夜精品| 国产精品不卡在线观看| 欧美日韩国产综合久久| 国产一区二区在线影院| 一片黄亚洲嫩模| 久久久不卡网国产精品一区| 在线精品视频免费观看| 国产一区啦啦啦在线观看| 亚洲午夜精品17c| 国产精品三级电影| 91精品国产色综合久久| 99精品1区2区| 国产精品综合一区二区| 亚洲18女电影在线观看| 国产精品毛片久久久久久| 欧美二区三区91| 91丨九色丨国产丨porny| 麻豆精品蜜桃视频网站| 亚洲国产日韩一级| 日本一区二区三区四区在线视频 | 91精品91久久久中77777| 狠狠色丁香婷婷综合久久片| 亚洲国产日韩精品| 中文字幕一区免费在线观看| 久久一区二区视频| 欧美精品三级日韩久久| 91丝袜美腿高跟国产极品老师| 国产在线视频不卡二| 日韩高清国产一区在线| 一区二区三区四区高清精品免费观看| 久久久久久电影| 精品美女被调教视频大全网站| 欧美老肥妇做.爰bbww| 在线亚洲一区二区| 99精品视频在线观看| 国内精品写真在线观看| 麻豆精品视频在线观看| 首页欧美精品中文字幕| 亚洲成国产人片在线观看| 一区二区三区四区不卡在线 | 色诱视频网站一区| 99精品偷自拍| av一区二区久久| 成+人+亚洲+综合天堂| 成人蜜臀av电影| 成人福利视频网站| 波多野洁衣一区| 成人av网站在线| 成人黄色片在线观看| 粉嫩一区二区三区在线看| 国产一区二区在线影院| 国产91丝袜在线播放0| 高清视频一区二区| 成人精品gif动图一区| a在线欧美一区| 色哟哟国产精品免费观看| 色诱亚洲精品久久久久久| 91久久精品一区二区三| 91九色02白丝porn| 91精品一区二区三区久久久久久| 制服.丝袜.亚洲.另类.中文| 日韩一区二区中文字幕| 日韩三级中文字幕| 欧美精品一区二区蜜臀亚洲| 久久五月婷婷丁香社区| 国产精品午夜在线| 亚洲综合色区另类av| 国产精品一区2区| 99re热这里只有精品免费视频| 色综合久久六月婷婷中文字幕| 欧美自拍丝袜亚洲| 日韩一区二区免费高清| 久久精品欧美日韩精品| 自拍偷拍欧美激情| 天天影视网天天综合色在线播放| 精品在线一区二区| 波多野结衣中文字幕一区| 欧美亚洲综合在线| 欧美xxxx老人做受| 中文字幕一区日韩精品欧美| 三级欧美在线一区| 国产v日产∨综合v精品视频| 欧美伊人久久大香线蕉综合69| 欧美成人官网二区| 国产精品免费丝袜| 日韩在线卡一卡二| 成人av先锋影音| 欧美成人精品福利| 亚洲女与黑人做爰| 国产在线播放一区三区四| 99re6这里只有精品视频在线观看| 在线不卡欧美精品一区二区三区| wwwwww.欧美系列| 亚洲成人在线观看视频| 国产999精品久久久久久绿帽| 欧美美女激情18p| 国产精品视频一二三区| 青草av.久久免费一区| 91亚洲精华国产精华精华液| 日韩美女在线视频| 亚洲女人的天堂| 国产成a人无v码亚洲福利| 欧美人妇做爰xxxⅹ性高电影| 亚洲国产精品av| 麻豆一区二区在线| 欧美揉bbbbb揉bbbbb| 欧美国产丝袜视频| 精品一区二区三区免费观看| 欧美人妖巨大在线| 一区二区三区蜜桃| 日韩精品在线看片z| 伊人一区二区三区| 国产精品99精品久久免费| 日韩美女一区二区三区| 香蕉久久夜色精品国产使用方法| 97久久精品人人做人人爽50路| 日韩欧美精品三级| 日日夜夜免费精品视频| 在线观看日韩精品| 最新热久久免费视频| 国产91丝袜在线18| 久久久www成人免费无遮挡大片| 男人操女人的视频在线观看欧美| 欧美三区在线视频| 樱花影视一区二区| 色老汉av一区二区三区| 国产精品视频第一区| 国产成人精品免费看| 精品国产精品一区二区夜夜嗨| 免费成人你懂的| 日韩欧美成人一区| 久久超级碰视频| 欧美精品一区二| 国产美女一区二区| 国产欧美日本一区视频| 风间由美中文字幕在线看视频国产欧美| 精品国精品自拍自在线|