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

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

?? sysduart.c

?? cpc-1631的BSP包for VxWorks操作系統
?? C
字號:
/* sysDuart.c -  MPC 8245/8241 Duart device initialization */

/* Copyright 1984-2002 Wind River Systems, Inc. */

/*
modification history
--------------------
01a,08jan02,jnz  created for sp824x BSP, MPC8241/8245.
*/

/*
DESCRIPTION
This file contains board-specific routines for Motorola MPC8245/8241
Duart device initialization. 
*/

#include "vxWorks.h"
#include "config.h"
#include "intLib.h"
#include "iv.h"
#include "sysLib.h"
#include "config.h"

#include "sysDuart.h"		        /* MPC8241/8245 duart driver */
#include "ns16552Sio.h"		/* ns16552Sio driver */

#include "i8250Sio.h"

/* external variables */


/* device description structs */

typedef struct
    {
    USHORT vector;			/* Interrupt vector */
    ULONG  baseAdrs;			/* Register base address */
    USHORT regSpace;			/* Address Interval */
    USHORT intLevel;			/* Interrupt level */
    } NS16552_CHAN_PARAS;


/* external variable */

IMPORT int epicIntTrace;                /* trace epic internal interrupts */

/* global variable */

NS16550_CHAN  ns16550Chan[N_DUART_CHANNELS];

char  *eumbbar_base;                    /* eumbbar base address */

/* static variables */

LOCAL NS16552_CHAN_PARAS devDuartParas[] = 
    {
    {EPIC_DUART1_INT_VECT, COM3_ADR, DUART_REG_ADDR_INTERVAL,EPIC_DUART1_INT_VECT},
    {EPIC_DUART2_INT_VECT, COM4_ADR, DUART_REG_ADDR_INTERVAL, EPIC_DUART2_INT_VECT}
    };

/*
 * Array of pointers to all serial channels configured in PPMC 8245 module.
 * See sysDuartChanGet(). It is this array that maps channel pointers
 * to standard device names.  The first entry will become "/tyCo/2",
 * the second "/tyCo/3".
 */

SIO_CHAN * sysDuartSioChans [N_SIO_CHANNELS] =
    {
    (SIO_CHAN *)&ns16550Chan[0].pDrvFuncs,	/* /tyCo/2 */
    (SIO_CHAN *)&ns16550Chan[1].pDrvFuncs,	/* /tyCo/3 */
    };


/* definitions */

#define DUART_REG(reg, chan) \
        *(volatile UINT8 *)(devDuartParas[chan].baseAdrs + reg * devDuartParas[chan].regSpace)

#define	SERIAL_BASE(_x)		0xfc004500 

#define UART_REG(reg,chan) 		(SERIAL_BASE(chan) + reg)

/******************************************************************************
 *
 * Utility routines
 */

UCHAR sysSerialInByte(int addr)
{
    return *(UCHAR *) addr;
}

void sysSerialOutByte(int addr, UCHAR c)
{
    *(UCHAR *) addr = c;
}

/******************************************************************************
 *
 * Serial debugging print routines
 *
 * The following routines are for debugging, especially useful in early
 * boot ROM and ISR code.
 *
 * sysSerialPutc
 * sysSerialGetc
 * sysSerialPrintString
 * sysSerialPrintHex
 *
 * The sysSerialPrintString and sysSerialPrintHex routines should
 * basically ALWAYS work.  They re-initialize the UART and turn off
 * interrupts every time.
 */

#define SS_CHAN		0

void sysSerialDelay(void)
{
    volatile int i;
    for (i = 0; i < 0x10000; i++)
	;
}

void sysSerialPutc(int c)
{
    int i = 10000;
    while (!(sysSerialInByte(UART_REG(UART_LST, SS_CHAN)) & 0x40) && i--)
        ;
    sysSerialOutByte(UART_REG(UART_THR, SS_CHAN), c);
}

int sysSerialGetc(void)
{
    while (!(sysSerialInByte(UART_REG(UART_LST, SS_CHAN)) & 0x01))
        ;
    return sysSerialInByte(UART_REG(UART_RDR, SS_CHAN));
}

void sysSerialPrintString(char *s)
{
    int c, il;
    il = intLock();
    /*QDIMCZH debug start
    sysSerialOutByte(UART_REG(UART_LCR, SS_CHAN), 0x83);
    sysSerialOutByte(UART_REG(UART_BRDL, SS_CHAN), 0x78);
    sysSerialOutByte(UART_REG(UART_BRDH, SS_CHAN), 0x00);
    sysSerialOutByte(UART_REG(UART_LCR, SS_CHAN), 0x03);
    sysSerialOutByte(UART_REG(UART_MDC, SS_CHAN), 0xb);
    QDIMCZH debug end */
    /*QDIMCZH debug start */
    sysSerialOutByte(UART_REG(UART_UDCR, SS_CHAN), 0x00);
    sysSerialOutByte(UART_REG(UART_LCR, SS_CHAN), 0x80);
    sysSerialOutByte(UART_REG(UART_UAFR, SS_CHAN), 0x00);
    sysSerialOutByte(UART_REG(UART_BRDL, SS_CHAN), 0x8b);
    sysSerialOutByte(UART_REG(UART_BRDH, SS_CHAN), 0x02);
    sysSerialOutByte(UART_REG(UART_LCR, SS_CHAN), 0x03);
    sysSerialOutByte(UART_REG(UART_IER, SS_CHAN), 0x00);
    /*QDIMCZH debug end */
    while ((c = *s++) != 0) {
        if (c == '\n')
            sysSerialPutc('\r');
        sysSerialPutc(c);
    }
    sysSerialDelay();	/* Allow last char to flush */
    intUnlock(il);
}

/******************************************************************************
*
* sysDuartHwInit - initialize 8245 duart devices to a quiescent state
*
* This routine initializes the MPC 8245 Duart device descriptors and puts
* the devices in a quiescent state.  It is called from sysHwInit() with
* interrupts locked.   Polled mode serial operations are possible, but
* not interrupt mode operations which are enabled by sysDuartHwInit2().
*
* RETURNS: N/A
*
* SEE ALSO: sysHwInit()
*/ 

void sysDuartHwInit (void)
    {
    int i;

    eumbbar_base = (char *)EUMBBAR_VAL;

    for (i = 0; i < N_DUART_CHANNELS; i++)
        {
	ns16550Chan[i].regs        = (UINT8 *)devDuartParas[i].baseAdrs;
	ns16550Chan[i].level	   = devDuartParas[i].intLevel;

	ns16550Chan[i].ier	   = DUART_REG(IER,i);
	ns16550Chan[i].lcr	   = DUART_REG(LCR,i);
	ns16550Chan[i].mcr	   = DUART_REG(MCR,i);
	/*ns16550Chan[i].channelMode = SIO_MODE_POLL;*/

	ns16550Chan[i].channelMode = SIO_MODE_INT;
	ns16550Chan[i].regDelta    = devDuartParas[i].regSpace;
	ns16550Chan[i].baudRate	   = DUART_BAUD;
	ns16550Chan[i].xtal	   = XTAL;

	ns16550DevInit (&ns16550Chan[i]);
        }

    if (ns16550Chan[0].channelMode == SIO_MODE_INT)
	{
        eumbbar_base[UDCR1] = 0x01;  /* set duart mode */
        eumbbar_base[ULCR1] = 0x80;  /* open DLAB */
        eumbbar_base[UAFR1] = 0x00;
        eumbbar_base[UDMB1] = 0x02;  /* for mpc8245 MSB, 9600bps @100Mhz */
	eumbbar_base[UDLB1] = 0x8b;  /* LSB */
	eumbbar_base[ULCR1] = 0x03;  /* clear DLAB, no-parity, 1stop bit, 8bit data */
	eumbbar_base[UMCR1] = 0x02;  /* diable loopback mode */
	eumbbar_base[UIER1] = 0x03;  /* Tx empty, Rx interrupt enable */
	}

    if (ns16550Chan[1].channelMode == SIO_MODE_INT)
	{
        eumbbar_base[UDCR2] = 0x01;  /* set duart mode */
        eumbbar_base[ULCR2] = 0x80;  /* open DLAB */
        eumbbar_base[UAFR2] = 0x00;
        eumbbar_base[UDMB2] = 0x02;  /* for mpc8245 MSB, 9600bps @100Mhz */
	eumbbar_base[UDLB2] = 0x8b;  /* LSB */
	eumbbar_base[ULCR2] = 0x03;  /* clear DLAB, no-parity, 1stop bit, 8bit data */
	eumbbar_base[UMCR2] = 0x02;  /* diable loopback mode */
	eumbbar_base[UIER2] = 0x03;  /* Tx empty, Rx interrupt enable */
	}

    } /* sysDuartHwInit () */


/******************************************************************************
*
* sysDuartHwInit2 - connect MPC8241/8245 duart device interrupts
*
* This routine connects the MPC8241/8245 duart device interrupts. It is called
* from sysHwInit2().  
*
* Serial device interrupts cannot be connected in sysDuartHwInit() because
* the kernel memory allocator is not initialized at that point and
* intConnect() calls malloc().
*
* RETURNS: N/A
*
* SEE ALSO: sysHwInit2()
*/ 

void sysDuartHwInit2 (void)
    {
    int i;

    /* connect serial interrupts */
    for (i = 0; i < N_DUART_CHANNELS; i++)
        {
        (void) intConnect ((VOIDFUNCPTR *)((int)devDuartParas[i].vector),
                           ns16550Int, (int)&ns16550Chan[i] );

        intEnable (devDuartParas[i].vector); 
        }

    } /* sysDuartHwInit2 () */


/******************************************************************************
*
* sysDuartChanGet - get the SIO_CHAN device associated with MPC8245 duart channel
*
* This routine returns a pointer to the SIO_CHAN device associated
* with a specified serial channel on MPC8245.  It is called by usrRoot() to
* obtain pointers when creating the system serial devices, `/tyCo/x'.  It
* is also used by the WDB agent to locate its serial channel.
*
* RETURNS: A pointer to the SIO_CHAN structure for the channel, or ERROR
* if the channel is invalid.
*/

SIO_CHAN * sysDuartChanGet
    (
    int channel         /* serial channel */
    )
    {
    if ( (channel < 0) ||
         (channel >= NELEMENTS(sysDuartSioChans)) )
	return (SIO_CHAN *) ERROR;

    return sysDuartSioChans[channel];
    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品亚洲а∨天堂免在线| 国产一区二区三区四区在线观看| 日韩欧美亚洲另类制服综合在线| 成人av资源网站| 日韩在线a电影| 亚洲人成精品久久久久久| 日韩你懂的在线播放| 在线观看成人免费视频| 国产乱子伦视频一区二区三区| 亚洲午夜久久久久久久久电影院| 国产拍揄自揄精品视频麻豆| 欧美精品久久久久久久多人混战| av毛片久久久久**hd| 国产一区二区三区香蕉| 日本欧美在线看| 亚洲成人综合网站| 中文字幕亚洲在| 欧美精彩视频一区二区三区| 日韩一区二区在线看| 欧美三日本三级三级在线播放| 成人永久aaa| 国产一区二区在线看| 琪琪久久久久日韩精品| 午夜影院久久久| 一区二区三区中文免费| 最新国产精品久久精品| 国产日韩欧美在线一区| 日韩精品最新网址| 日韩一区二区精品在线观看| 中文字幕视频一区| 中文字幕欧美日韩一区| 久久人人超碰精品| 久久欧美中文字幕| 日韩美女一区二区三区| 91精品国产入口| 91精品国产色综合久久不卡电影| 欧美日韩国产中文| 欧美日韩国产成人在线免费| 欧美日韩一区 二区 三区 久久精品 | 日韩欧美的一区二区| 51精品久久久久久久蜜臀| 欧美三级电影精品| 欧美日韩国产小视频| 欧美日韩高清一区| 51精品视频一区二区三区| 日韩欧美资源站| 337p日本欧洲亚洲大胆精品| 精品国产免费视频| 久久综合久久综合亚洲| 久久精品夜色噜噜亚洲aⅴ| 久久婷婷国产综合国色天香| 中文在线一区二区 | 亚洲欧美日韩国产中文在线| 国产精品久久久久久久久免费桃花| 中文字幕欧美区| 成人免费视频在线观看| 亚洲图片欧美色图| 日本在线播放一区二区三区| 久久国产免费看| 国产大陆精品国产| 97精品国产露脸对白| 色94色欧美sute亚洲线路二| 欧美日韩在线播放一区| 日韩三区在线观看| 麻豆精品在线视频| 国产精品18久久久久久vr| 9色porny自拍视频一区二区| 欧美性受xxxx| 欧美电影免费观看高清完整版在| 国产女主播在线一区二区| 亚洲欧美日韩一区二区三区在线观看 | 日韩视频免费观看高清完整版 | 久久免费看少妇高潮| 国产精品久久看| 亚洲线精品一区二区三区| 玖玖九九国产精品| caoporn国产精品| 欧美老年两性高潮| 国产精品天干天干在线综合| 亚洲美女视频在线观看| 精品一区二区三区视频在线观看| 成人av在线一区二区| 欧美女孩性生活视频| 精品国产免费一区二区三区香蕉| 国产拍欧美日韩视频二区| 一区二区三区不卡视频| 国产一区二区三区四区在线观看| 97精品视频在线观看自产线路二| 制服丝袜亚洲播放| 综合久久久久综合| 亚洲成人一区二区在线观看| 成人激情文学综合网| 欧美日韩国产中文| 亚洲视频一区在线| 国产精品99久久久久| 欧美另类z0zxhd电影| 国产精品萝li| 国产综合成人久久大片91| 欧美视频在线观看一区二区| 国内外成人在线| 欧美色视频一区| 中文字幕中文乱码欧美一区二区| 麻豆精品一区二区三区| 欧美性极品少妇| 中文字幕精品综合| 激情综合一区二区三区| 欧美日韩不卡一区| 日韩理论片一区二区| 国产成人午夜视频| 欧美一级欧美三级在线观看| 亚洲综合一区二区精品导航| 岛国一区二区三区| 久久久精品免费网站| 久久精品噜噜噜成人av农村| 欧美日韩亚洲综合在线| 亚洲人成亚洲人成在线观看图片 | 欧美成人精品二区三区99精品| 亚洲狠狠丁香婷婷综合久久久| 国产成人自拍网| 精品国产精品网麻豆系列| 日韩高清国产一区在线| 欧美影院精品一区| 亚洲日本一区二区三区| 99国产精品久久久久久久久久久 | 欧美精品视频www在线观看| 亚洲码国产岛国毛片在线| a在线欧美一区| 亚洲欧洲成人自拍| 国产91在线看| 国产女同性恋一区二区| 国产成人无遮挡在线视频| 久久综合中文字幕| 国产成人综合亚洲91猫咪| 国产午夜精品一区二区 | av成人免费在线| 亚洲欧洲av另类| 91视视频在线直接观看在线看网页在线看| 久久日韩粉嫩一区二区三区| 国产在线日韩欧美| 国产婷婷精品av在线| 成人晚上爱看视频| 日韩毛片视频在线看| 在线视频国产一区| 性做久久久久久久久| 91精品国产色综合久久不卡电影| 免费亚洲电影在线| 欧美va在线播放| 国产精品一品二品| 亚洲色图清纯唯美| 欧美综合一区二区| 免费成人在线观看| 国产三级一区二区三区| 成a人片亚洲日本久久| 一区二区在线观看免费视频播放| 欧美性猛片xxxx免费看久爱| 午夜精品久久久久久久蜜桃app| 欧美一区二区三区视频在线| 国产自产2019最新不卡| 中文字幕在线一区| 在线视频你懂得一区二区三区| 午夜精品爽啪视频| 久久综合色鬼综合色| www.99精品| 日本伊人色综合网| 欧美激情一区二区三区不卡| 色综合天天综合网国产成人综合天 | 视频在线观看一区二区三区| 精品欧美乱码久久久久久 | 青青草97国产精品免费观看 | 亚洲午夜精品17c| 日韩欧美激情在线| 不卡一区二区三区四区| 亚洲一区二区黄色| 久久这里只有精品首页| 91浏览器在线视频| 老鸭窝一区二区久久精品| 中文字幕一区二区三区蜜月| 欧美日韩高清在线| 国产+成+人+亚洲欧洲自线| 亚洲影视在线观看| 久久久美女艺术照精彩视频福利播放| av电影天堂一区二区在线| 日日夜夜免费精品| 国产精品视频线看| 91精品国产综合久久久久| 成人av网站免费| 日本亚洲三级在线| 亚洲人xxxx| 26uuu久久综合| 欧美日韩色一区| 成人免费视频播放| 蜜桃在线一区二区三区| 亚洲女同ⅹxx女同tv| www成人在线观看| 欧美日本在线观看| 97se亚洲国产综合在线| 精品一区二区免费视频| 亚洲一区二区三区中文字幕在线| 久久综合色婷婷| 欧美一卡二卡在线|