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

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

?? m5200pscsio.c

?? mpc5200 for bsp,it is have passed built.
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* m5200PscSio.c - Motorola MPC5200 PSC UART driver *//* Copyright 1984-1996 Wind River Systems, Inc. *//*modification history--------------------01c,25Jun03,pkr	 adopted from 5204Sio01b,05may97,mem  changed baud rate calculation to round rather than		 truncate when dividing.  Reduces error at high baud rates.01a,10dec96,mem  written.*//*DESCRIPTIONThis is the driver for the UART contained in the MPC 5200 Microcontroller.Only asynchronous serial operation is supported by this driver.  Thedefault serial settings are 8 data bits, 1 stop bit, no parity, 9600buad, and software flow control.  These default settings can beoverridden by setting the M5200_PSC_CHAN options and baudRate fields tothe desired values before calling m5200PscSioDevInit.  See sioLib.h foroptions values.  The defaults for the module can be changed byredefining the macros M5200_DEFAULT_OPTIONS and M5200_DEFAULT_BAUD andrecompiling this driver.This driver uses the system clock as the input to the baud rategenerator.  The clkRate field must be set to the system clock rate inHZ for the baud rate calculations to work correctly.  The actual rangeof supported baud rates depends on the system clock speed.  For example,with a 25MHz system clock, the lowest baud rate is 24, and the highestis over 38400.  Because the baud rate values are calculated on request,there is no checking that the requested baud rate is standard, you canset the UART to operate at 4357 baud if you wish.USAGEA M5200_PSC_CHAN structure is used to describe the chip.The BSP's sysHwInit() routine typically calls sysSerialHwInit()which initializes all the H/W addresses in the M5200_PSC_CHAN structurebefore calling m5200PscSioDevInit().  This enables the chip to operate inpolled mode, but not interrupt mode.  Calling m5200PscSioDevInit2() fromthe sysSerialHwInit2() routine allows interrupts to be enabled andinterrupt mode operation to be used..CSi.e.#include "drv/sio/m5200PscSio.h"M5200_PSC_CHAN m5200Uart;			/@ my device structure @/#define INT_VEC_UART	(24+3)		/@ use single vector, #27 @/sysSerialHwInit()    {    /@ initialize the register pointers/data for uart @/    m5200Uart.clkRate	= MASTER_CLOCK;    m5200Uart.intVec	= INT_VEC_UART;    m5200Uart.portNum	= PORT_NUM_UART;    m5200Uart.mr	= PSC_UART_MR(SIM_BASE);    m5200Uart.sr	= PSC_UART_SR(SIM_BASE);    m5200Uart.csr	= PSC_UART_CSR(SIM_BASE);    m5200Uart.cr	= PSC_UART_CR(SIM_BASE);    m5200Uart.rb	= PSC_UART_RB(SIM_BASE);    m5200Uart.tb	= PSC_UART_TB(SIM_BASE);    m5200Uart.ipcr	= PSC_UART_IPCR(SIM_BASE);    m5200Uart.acr	= PSC_UART_ACR(SIM_BASE);    m5200Uart.isr	= PSC_UART_ISR(SIM_BASE);    m5200Uart.ivr	= PSC_UART_IVR(SIM_BASE);    m5200Uart.op1	= PSC_UART_OP1(SIM_BASE);    m5200Uart.sicr	= PSC_UART_SICR(SIM_BASE);    m5200Uart.dp	= PSC_UART_DP(SIM_BASE);    m5200Uart.dl	= PSC_UART_DP(SIM_BASE);    m5200Uart.rfalarm = PSC_UART_RFALARM(SIM_BASE);    m5200Uart.tfalarm = PSC_UART_TFALARM(SIM_BASE);     m5200PscSioDevInit (&m5200Uart);    }.CEThe BSP's sysHwInit2() routine typically calls sysSerialHwInit2() whichconnects the chips interrupts via intConnect() to the singleinterrupt handler m5200PscSioInt.  After the interrupt service routines are connected, the user then calls m5200PscSioDevInit2() to allow the driver to turn on interrupt enable bits..CSi.e.sysSerialHwInit2 ()    {    /@ connect single vector for 5200 @/    intConnect (INUM_TO_IVEC(MY_VEC), m5200PscSioInt, (int)&m5200Uart);    ...    /@ allow interrupts to be enabled @/    m5200PscSioDevInit2 (&m5200Uart);    }.CESPECIAL CONSIDERATIONS:The CLOCAL hardware option presumes that CTS outputs are wired asnecessary.  If not wired correctly, then the user must not select theCLOCAL option.  CLOCAL is not one of the default options for thisreason.As to the output port, this driver does not manipulate the output port,or it's configuration register in any way.  As stated above, if the userselects the CLOCAL option then the output port bit must be wired correctlyor the hardware flow control will not function as desired.INCLUDE FILES: drv/sio/m5200PscSio.h*/#include "vxWorks.h"#include "sioLib.h"#include "intLib.h"#include "errno.h"#include "arch/ppc/m5200.h"#include "drv/sio/m5200PscSio.h"#include "arch/ppc/vxPpcLib.h"/* forward static declarations */LOCAL STATUS m5200ModeSet (M5200_PSC_CHAN *, UINT);LOCAL STATUS m5200BaudSet (M5200_PSC_CHAN *, UINT);LOCAL STATUS m5200OptsSet (M5200_PSC_CHAN *, UINT);LOCAL int    m5200Ioctl (M5200_PSC_CHAN *, int, void *);LOCAL int    m5200TxStartup (M5200_PSC_CHAN *);LOCAL int    m5200CallbackInstall (M5200_PSC_CHAN *, int, STATUS (*)(), void *);LOCAL int    m5200PollInput (M5200_PSC_CHAN *, char *);LOCAL int    m5200PollOutput (M5200_PSC_CHAN*, char);LOCAL STATUS m5200DummyCallback (void);LOCAL void   m5200AcrSetClr (M5200_PSC_CHAN * pChan, UCHAR setBits, UCHAR clearBits);LOCAL void   m5200ImrSetClr (M5200_PSC_CHAN * pChan, USHORT setBits, USHORT clearBits);/* driver functions */LOCAL SIO_DRV_FUNCS m5200PscSioDrvFuncs =    {    (int (*)(SIO_CHAN *, int, void *))m5200Ioctl,    (int (*)(SIO_CHAN *))m5200TxStartup,    (int (*)())m5200CallbackInstall,    (int (*)(SIO_CHAN *, char*))m5200PollInput,    (int (*)(SIO_CHAN *, char))m5200PollOutput    };/* typedefs *//* defines */#ifndef M5200_DEFAULT_BAUD#   define M5200_DEFAULT_BAUD  115200#endif#ifndef M5200_DEFAULT_OPTIONS    /* no handshake, rcvr enabled, 8 data bits, 1 stop bit, no parity */#   define M5200_DEFAULT_OPTIONS (CREAD | CS8)#endif/* Hardware read/write routines.  Can be redefined to create drivers * for boards with special i/o access procedures. The reg pointer * arguments are the register pointers from the M5200_PSC_CHAN structure. */#ifndef M5200_READ#   define M5200_READ(x)	(*x)	/* argument is register pointer */#endif#ifndef M5200_WRITE#   define M5200_WRITE(x,y)	(*x = y) /* args are reg ptr and data */#endif#define MAX_OPTIONS	(0xff)/******************************************************************************** m5200PscSioDevInit - intialize a M5200_PSC_CHAN** The BSP must have already initialized all the device addresses, etc in* m5200_CHAN structure. This routine initializes some transmitter &* receiver status values to be used in the interrupt mask register and then* resets the chip to a quiescent state.** RETURNS: N/A*/void m5200PscSioDevInit    (    M5200_PSC_CHAN * pChan    )    {    int oldlevel;#if 0    ULONG gpio_wkup;#endif        pChan->pDrvFuncs	= &m5200PscSioDrvFuncs;    pChan->getTxChar	= m5200DummyCallback;    pChan->putRcvChar	= m5200DummyCallback;    pChan->mode		= 0; /* undefined */    pChan->intEnable	= FALSE;    pChan->acrCopy	= 0;    pChan->imrCopy	= 0;    if (pChan->options == 0 || pChan->options > MAX_OPTIONS)	pChan->options = M5200_DEFAULT_OPTIONS;    /* baud rate range is determined by calculation. */    if (pChan->baudRate)	{	UINT val;	val = ((pChan->clkRate / pChan->baudRate) + 16) / 32;	if ((val < 2) || (val > 0xffff))	    pChan->baudRate = M5200_DEFAULT_BAUD;	}    else	pChan->baudRate = M5200_DEFAULT_BAUD;    oldlevel =  intLock ();#if 0	gpio_wkup = GPIO_WKUP_BASE_ADRS;		if( MPC4200_GPIO_WKUP_USE)	{		M5200_WRITE (gpio_wkup + GPIO_WKUP_WE, 0x10000000);		M5200_WRITE (gpio_wkup + GPIO_WKUP_OD, 0x00000000);		M5200_WRITE (gpio_wkup + GPIO_WKUP_DD, 0x10000000);		M5200_WRITE (gpio_wkup + GPIO_WKUP_DO, 0x10000000);	}#endif    m5200ImrSetClr (pChan, 0, ~0);    m5200AcrSetClr (pChan, 0, PSC_UART_ACR_IEC);    M5200_WRITE (pChan->sicr, 0x00);		/* SIM2 = uart mode,dcd does not affect rx */    /* Use internal timer */    M5200_WRITE (pChan->csr,		 PSC_UART_CSR_TIMER_RX | PSC_UART_CSR_TIMER_TX);    /* Reset the transmitters  & receivers  */    M5200_WRITE (pChan->cr, PSC_UART_CR_RESET_RX);    M5200_WRITE (pChan->cr, PSC_UART_CR_RESET_TX);    M5200_WRITE (pChan->cr, PSC_UART_CR_RESET_ERR);    M5200_WRITE (pChan->cr, PSC_UART_CR_RESET_BRK);    M5200_WRITE (pChan->cr, PSC_UART_CR_RESET_MODE_PTR);	M5200_WRITE (pChan->op1, 1);    M5200_WRITE (pChan->imr, 0x0000);        /* Mask RxRDY and TxRDY from causing an interrupt */#if 0    M5200_WRITE (pChan->rfalarm, 0x01f0);    /* assert rx alarm when # full  >= 496 */    M5200_WRITE (pChan->tfalarm, 0x00f0);    /* assert tx alarm when # empty >= 240 */#else    M5200_WRITE (pChan->tfalarm, 0);   	     /* assert tx alarm when # empty >= 240 */#endif    /* TX is disabled */    m5200OptsSet (pChan, pChan->options);    m5200BaudSet (pChan, pChan->baudRate);	{	    ULONG aPortConfig;	    int aPortNum = pChan->portNum;	    volatile ULONG *pStdPortConfig;	   	    pStdPortConfig = (volatile ULONG *)(GPIO_STD_BASE_ADRS + GPIO_STD_PORT_CONFIG);		           	/* Enable the GPIO as UART w/o for PSC n*/		aPortConfig = M5200_READ(pStdPortConfig);       			if (aPortNum == PSC6_PORT)	/* special case for PSC6 */			{			aPortConfig &= ~GPIO_STD_PC_PSC6_MASK;			aPortConfig |= GPIO_STD_PC_PSC6_UART;			}		else			{			aPortConfig &= ~GPIO_STD_PC_PSC_MASK(aPortNum);			aPortConfig |= GPIO_STD_PC_PSC_UART(aPortNum);			}				M5200_WRITE(pStdPortConfig, aPortConfig);    }    intUnlock (oldlevel);    }/******************************************************************************** m5200PscSioDevInit2 - intialize a M5200_PSC_CHAN, part 2** This routine is called as part of sysSerialHwInit2() and tells* the driver that interrupt vectors are connected and that it is* safe to allow interrupts to be enabled.** RETURNS: N/A*/void m5200PscSioDevInit2    (    M5200_PSC_CHAN * pChan    )    {    /* Allow interrupt mode */    pChan->intEnable = TRUE;    m5200ModeSet (pChan, pChan->mode);    }/******************************************************************************** m5200ImrSetClr - set and clear bits in the UART's interrupt mask register** This routine sets and clears bits in the UART's IMR.** This routine sets and clears bits in a local copy of the IMR, then* writes that local copy to the UART.  This means that all changes to* the IMR must go through this routine.  Otherwise, any direct changes* to the IMR would be lost the next time this routine is called.** Set has priority over clear.  Thus you can use this routine to update* multiple bit fields by specifying the field mask as the clear bits.** RETURNS: N/A*/void m5200ImrSetClr    (    M5200_PSC_CHAN * pChan,    USHORT setBits,       /* which bits to set in the IMR   */    USHORT clearBits      /* which bits to clear in the IMR */    )    {    pChan->imrCopy = ((pChan->imrCopy & ~clearBits) | setBits);    M5200_WRITE (pChan->imr, pChan->imrCopy);    }/******************************************************************************** m5200Imr - return current interrupt mask register contents** This routine returns the interrupt mask register contents.  The imr* is not directly readable, a copy of the last value written is kept* in the UART data structure.** RETURNS: Returns interrupt mask register contents.*/USHORT m5200Imr    (    M5200_PSC_CHAN * pChan    )    {    return pChan->imrCopy;    }/******************************************************************************** m5200AcrSetClr - set and clear bits in the UART's aux control register** This routine sets and clears bits in the UART's ACR.** This routine sets and clears bits in a local copy of the ACR, then* writes that local copy to the UART.  This means that all changes to* the ACR must go through this routine.  Otherwise, any direct changes* to the ACR would be lost the next time this routine is called.** Set has priority over clear.  Thus you can use this routine to update* multiple bit fields by specifying the field mask as the clear bits.** RETURNS: N/A*/void m5200AcrSetClr    (    M5200_PSC_CHAN * pChan,    UCHAR setBits,       /* which bits to set in the ACR   */    UCHAR clearBits      /* which bits to clear in the ACR */    )    {    pChan->acrCopy = ((pChan->acrCopy &  ~clearBits) | setBits);    M5200_WRITE (pChan->acr, pChan->acrCopy);    }/******************************************************************************** m5200Acr - return aux control register contents** This routine returns the auxilliary control register contents.  The acr* is not directly readable, a copy of the last value written is kept* in the UART data structure.** RETURNS: Returns auxilliary control register (acr) contents.*/UCHAR m5200Acr    (    M5200_PSC_CHAN * pChan    )    {    return pChan->acrCopy;    }/******************************************************************************** m5200DummyCallback - dummy callback routine.** RETURNS:* Always returns ERROR*/LOCAL STATUS m5200DummyCallback (void)    {    return (ERROR);    }/******************************************************************************** m5200TxStartup - start the interrupt transmitter.** This routine enables the transmitters for the specified UART channel so that* the UART channel will interrupt the CPU when TxRDY bit in the status* register is set.** Just enable the transmitter, don't output.  The driver may have just* switched from POLL mode and may still be outputting a character.** RETURNS:* Returns OK on success, or EIO on hardware error.*/LOCAL int m5200TxStartup    (    M5200_PSC_CHAN * pChan    )    {#if 0    UCHAR outChar;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本精品一区二区三区高清 | 男女男精品视频| 欧美色男人天堂| 偷窥少妇高潮呻吟av久久免费| 色婷婷综合久久久中文一区二区| 亚洲一区二区三区影院| 欧美日韩一卡二卡| 麻豆成人久久精品二区三区小说| 精品国产免费一区二区三区四区| 国产成人自拍网| 亚洲欧美电影院| 欧美人与性动xxxx| 国产一区二区免费视频| 中文字幕高清不卡| 欧美亚洲综合色| 老司机精品视频在线| 久久色成人在线| 色激情天天射综合网| 人人爽香蕉精品| 亚洲天堂av老司机| 日韩欧美国产精品一区| thepron国产精品| 丝袜a∨在线一区二区三区不卡| 日韩欧美中文字幕精品| 成人精品鲁一区一区二区| 一区二区三区在线观看动漫| 日韩一区二区视频在线观看| 成人丝袜高跟foot| 天堂久久一区二区三区| 国产人久久人人人人爽| 欧美日韩精品欧美日韩精品一| 韩日av一区二区| 亚洲永久免费av| 久久久av毛片精品| 欧美日韩另类一区| 成人av影院在线| 久久99精品国产.久久久久| 亚洲免费观看视频| 久久色中文字幕| 欧美放荡的少妇| 91亚洲男人天堂| 韩国三级电影一区二区| 亚洲成人免费视频| 国产精品污网站| 日韩免费一区二区| 欧美中文字幕亚洲一区二区va在线 | 美国十次了思思久久精品导航| 国产精品精品国产色婷婷| 欧美一区二区三区影视| 色菇凉天天综合网| 懂色中文一区二区在线播放| 日本人妖一区二区| 亚洲国产你懂的| 亚洲三级免费电影| 国产精品免费免费| 久久影院视频免费| 日韩精品一区国产麻豆| 欧美体内she精高潮| 99精品欧美一区二区三区小说| 精品一区二区三区在线视频| 亚洲国产精品一区二区久久 | 国产欧美一区二区精品性色超碰| 91超碰这里只有精品国产| 色狠狠色噜噜噜综合网| 91在线视频播放| av欧美精品.com| www.亚洲精品| 成a人片亚洲日本久久| 国产精品综合视频| 国产一区 二区| 韩国一区二区三区| 久久精品国产亚洲a| 男男视频亚洲欧美| 毛片一区二区三区| 久久不见久久见免费视频1| 日本麻豆一区二区三区视频| 天天爽夜夜爽夜夜爽精品视频| 亚洲高清不卡在线观看| 亚洲高清不卡在线| 日本在线不卡视频| 狠狠色狠狠色合久久伊人| 国产乱码精品一区二区三区忘忧草 | 日韩精品一卡二卡三卡四卡无卡| 亚洲影院久久精品| 日韩中文字幕不卡| 久久不见久久见免费视频7| 国产一区二区在线免费观看| 国产一区91精品张津瑜| 成人av资源在线| 91在线观看免费视频| 91久久一区二区| 91精品国产色综合久久ai换脸 | 蜜臀av性久久久久蜜臀aⅴ四虎| 奇米综合一区二区三区精品视频| 日本成人中文字幕在线视频| 紧缚奴在线一区二区三区| 国产成人精品影院| 91看片淫黄大片一级在线观看| 欧美在线观看一区二区| 91精品国产综合久久久久 | 国产视频一区在线播放| 亚洲婷婷综合色高清在线| 亚洲成人av一区二区三区| 免费在线一区观看| 波多野结衣亚洲| 精品视频在线视频| 精品国产不卡一区二区三区| 国产精品国产三级国产有无不卡| 亚洲影院理伦片| 国产在线不卡一区| 91成人免费网站| 精品对白一区国产伦| 亚洲欧美日韩一区二区三区在线观看| 香蕉成人啪国产精品视频综合网| 久久99国产精品久久99果冻传媒| 丁香啪啪综合成人亚洲小说 | 成人精品小蝌蚪| 3d动漫精品啪啪一区二区竹菊| 久久久久久久av麻豆果冻| 亚洲一区二区av在线| 国产在线精品一区二区不卡了| 成人性生交大合| 欧美日韩免费一区二区三区 | 国精产品一区一区三区mba桃花| av中文字幕亚洲| 日韩精品中文字幕在线不卡尤物| 国产精品久久久久久久岛一牛影视| 日韩精品成人一区二区在线| 成人免费毛片a| 精品国产免费久久| 亚洲主播在线播放| 成人综合在线观看| 欧美成人官网二区| 亚洲二区在线观看| 99久久国产综合精品女不卡| 日韩欧美卡一卡二| 午夜视频一区在线观看| aa级大片欧美| 国产亚洲综合av| 久久精品噜噜噜成人88aⅴ| 色综合久久中文综合久久牛| 久久综合九色综合欧美亚洲| 香蕉久久一区二区不卡无毒影院| 91欧美一区二区| 国产精品情趣视频| 国产精一品亚洲二区在线视频| 欧美一区二区三区成人| 亚洲一区二区三区四区在线| aaa国产一区| 国产精品不卡视频| 国产成人精品免费| 久久久久国产一区二区三区四区 | 欧美精品一二三| 亚洲精品乱码久久久久久| 岛国精品一区二区| 中文字幕欧美激情| 国产成人亚洲综合a∨婷婷图片| 欧美成人一区二区三区在线观看 | 国产精品一级片在线观看| 欧美一区三区二区| 男女性色大片免费观看一区二区| 欧美精品视频www在线观看| 亚洲一区二区三区国产| 欧美性猛交xxxx黑人交| 亚洲精品高清在线| 在线欧美日韩精品| 亚洲国产成人porn| 欧美精品日韩精品| 喷白浆一区二区| 日韩久久精品一区| 国产精品伊人色| 中文字幕巨乱亚洲| av网站免费线看精品| 亚洲精品免费电影| 欧美日韩亚洲国产综合| 亚洲成人久久影院| 欧美成人aa大片| 国产不卡在线视频| 国产精品入口麻豆原神| 99re这里只有精品首页| 一区二区三区在线视频观看| 欧美麻豆精品久久久久久| 日本中文字幕一区二区视频| 欧美xxxx老人做受| 成人黄色在线看| 一区二区三区四区精品在线视频 | 精品成人a区在线观看| 国产福利不卡视频| 亚洲色图第一区| 欧美日韩高清影院| 国产真实乱偷精品视频免| 国产精品美女久久久久aⅴ国产馆| 99精品久久只有精品| 日韩在线一区二区三区| 久久久精品tv| 91丝袜高跟美女视频| 天堂va蜜桃一区二区三区| 2021中文字幕一区亚洲| 99精品视频在线播放观看| 日本不卡一区二区三区高清视频|