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

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

?? epic1.c

?? AT9260的BOOTLOADER,還有幾個版本的,需要的我再放
?? C
字號:
/************************************************** * * copyright @ motorola, 1999 * *************************************************/#include <mpc824x.h>#include <common.h>#include "epic.h"#define PRINT(format, args...) printf(format , ## args)typedef void (*VOIDFUNCPTR)  (void);  /* ptr to function returning void */struct SrcVecTable SrcVecTable[MAXVEC] = /* Addr/Vector cross-reference tbl */    {    { EPIC_EX_INT0_VEC_REG,  "External Direct/Serial Source 0"},    { EPIC_EX_INT1_VEC_REG,  "External Direct/Serial Source 1"},    { EPIC_EX_INT2_VEC_REG,  "External Direct/Serial Source 2"},    { EPIC_EX_INT3_VEC_REG,  "External Direct/Serial Source 3"},    { EPIC_EX_INT4_VEC_REG,  "External Direct/Serial Source 4"},    { EPIC_SR_INT5_VEC_REG,  "External Serial Source 5"},    { EPIC_SR_INT6_VEC_REG,  "External Serial Source 6"},    { EPIC_SR_INT7_VEC_REG,  "External Serial Source 7"},    { EPIC_SR_INT8_VEC_REG,  "External Serial Source 8"},    { EPIC_SR_INT9_VEC_REG,  "External Serial Source 9"},    { EPIC_SR_INT10_VEC_REG, "External Serial Source 10"},    { EPIC_SR_INT11_VEC_REG, "External Serial Source 11"},    { EPIC_SR_INT12_VEC_REG, "External Serial Source 12"},    { EPIC_SR_INT13_VEC_REG, "External Serial Source 13"},    { EPIC_SR_INT14_VEC_REG, "External Serial Source 14"},    { EPIC_SR_INT15_VEC_REG, "External Serial Source 15"},    { EPIC_I2C_INT_VEC_REG,  "Internal I2C Source"},    { EPIC_DMA0_INT_VEC_REG, "Internal DMA0 Source"},    { EPIC_DMA1_INT_VEC_REG, "Internal DMA1 Source"},    { EPIC_MSG_INT_VEC_REG,  "Internal Message Source"},    };VOIDFUNCPTR intVecTbl[MAXVEC];    /* Interrupt vector table *//*****************************************************************************  epicInit - Initialize the EPIC registers**  This routine resets the Global Configuration Register, thus it:*     -  Disables all interrupts*     -  Sets epic registers to reset values*     -  Sets the value of the Processor Current Task Priority to the*        highest priority (0xF).*  epicInit then sets the EPIC operation mode to Mixed Mode (vs. Pass*  Through or 8259 compatible mode).**  If IRQType (input) is Direct IRQs:*     - IRQType is written to the SIE bit of the EPIC Interrupt*       Configuration register (ICR).*     - clkRatio is ignored.*  If IRQType is Serial IRQs:*     - both IRQType and clkRatio will be written to the ICR register*/void epicInit    (    unsigned int IRQType,      /* Direct or Serial */    unsigned int clkRatio      /* Clk Ratio for Serial IRQs */    )    {    ULONG tmp;    tmp = sysEUMBBARRead(EPIC_GLOBAL_REG);    tmp |= 0xa0000000;                  /* Set the Global Conf. register */    sysEUMBBARWrite(EPIC_GLOBAL_REG, tmp);	/*	 * Wait for EPIC to reset - CLH	 */    while( (sysEUMBBARRead(EPIC_GLOBAL_REG) & 0x80000000) == 1);    sysEUMBBARWrite(EPIC_GLOBAL_REG, 0x20000000);    tmp = sysEUMBBARRead(EPIC_INT_CONF_REG);    /* Read interrupt conf. reg */    if (IRQType == EPIC_DIRECT_IRQ)             /* direct mode */	sysEUMBBARWrite(EPIC_INT_CONF_REG, tmp & 0xf7ffffff);    else                                        /* Serial mode */	{	tmp = (clkRatio << 28) | 0x08000000;    /* Set clock ratio */	sysEUMBBARWrite(EPIC_INT_CONF_REG, tmp);	}    while (epicIntAck() != 0xff)       /* Clear all pending interrupts */		epicEOI();}/**************************************************************************** *  epicIntEnable - Enable an interrupt source * *  This routine clears the mask bit of an external, an internal or *  a Timer register to enable the interrupt. * *  RETURNS:  None */void epicIntEnable(int intVec){    ULONG tmp;    ULONG srAddr;    srAddr = SrcVecTable[intVec].srcAddr;  /* Retrieve src Vec/Prio register */    tmp = sysEUMBBARRead(srAddr);    tmp &= ~EPIC_VEC_PRI_MASK;             /* Clear the mask bit */    tmp |= (EPIC_VEC_PRI_DFLT_PRI << 16);   /* Set priority to Default - CLH */    tmp |= intVec;				           /* Set Vector number */    sysEUMBBARWrite(srAddr, tmp);    return;    }/**************************************************************************** *  epicIntDisable - Disable an interrupt source * *  This routine sets the mask bit of an external, an internal or *  a Timer register to disable the interrupt. * *  RETURNS:  OK or ERROR * */void epicIntDisable    (    int intVec        /* Interrupt vector number */    )    {    ULONG tmp, srAddr;    srAddr = SrcVecTable[intVec].srcAddr;    tmp = sysEUMBBARRead(srAddr);    tmp |= 0x80000000;                      /* Set the mask bit */    sysEUMBBARWrite(srAddr, tmp);    return;    }/**************************************************************************** * epicIntSourceConfig - Set properties of an interrupt source * * This function sets interrupt properites (Polarity, Sense, Interrupt * Prority, and Interrupt Vector) of an Interrupt Source.  The properties * can be set when the current source is not in-request or in-service, * which is determined by the Activity bit.  This routine return ERROR * if the the Activity bit is 1 (in-request or in-service). * * This function assumes that the Source Vector/Priority register (input) * is a valid address. * * RETURNS:  OK or ERROR */int epicIntSourceConfig    (    int   Vect,                         /* interrupt source vector number */    int   Polarity,                     /* interrupt source polarity */    int   Sense,                        /* interrupt source Sense */    int   Prio                          /* interrupt source priority */    )    {    ULONG tmp, newVal;    ULONG actBit, srAddr;    srAddr = SrcVecTable[Vect].srcAddr;    tmp = sysEUMBBARRead(srAddr);    actBit = (tmp & 40000000) >> 30;    /* retrieve activity bit - bit 30 */    if (actBit == 1)	return ERROR;    tmp &= 0xff30ff00;     /* Erase previously set P,S,Prio,Vector bits */    newVal = (Polarity << 23) | (Sense << 22) | (Prio << 16) | Vect;    sysEUMBBARWrite(srAddr, tmp | newVal );    return (OK);    }/**************************************************************************** * epicIntAck - acknowledge an interrupt * * This function reads the Interrupt acknowldge register and return * the vector number of the highest pending interrupt. * * RETURNS: Interrupt Vector number. */unsigned int epicIntAck(void){    return(sysEUMBBARRead( EPIC_PROC_INT_ACK_REG ));}/**************************************************************************** * epicEOI - signal an end of interrupt * * This function writes 0x0 to the EOI register to signal end of interrupt. * It is usually called after an interrupt routine is served. * * RETURNS: None */void epicEOI(void)    {    sysEUMBBARWrite(EPIC_PROC_EOI_REG, 0x0);    }/**************************************************************************** *  epicCurTaskPrioSet - sets the priority of the Processor Current Task * *  This function should be called after epicInit() to lower the priority *  of the processor current task. * *  RETURNS:  OK or ERROR */int epicCurTaskPrioSet    (    int prioNum                 /* New priority value */    )    {    if ( (prioNum < 0) || (prioNum > 0xF))	return ERROR;    sysEUMBBARWrite(EPIC_PROC_CTASK_PRI_REG, prioNum);    return OK;    }/************************************************************************ * function: epicIntTaskGet * * description: Get value of processor current interrupt task priority register * * note: ***********************************************************************/unsigned char epicIntTaskGet(){  /* get the interrupt task priority register */    ULONG reg;    unsigned char rec;    reg = sysEUMBBARRead( EPIC_PROC_CTASK_PRI_REG );    rec = ( reg & 0x0F );    return rec;}/************************************************************** * function: epicISR * * description: EPIC service routine called by the core exception *              at 0x500 * * note: **************************************************************/unsigned int epicISR(void){   return 0;}/************************************************************ * function: epicModeGet * * description: query EPIC mode, return 0 if pass through mode *                               return 1 if mixed mode * * note: *************************************************************/unsigned int epicModeGet(void){    ULONG val;    val = sysEUMBBARRead( EPIC_GLOBAL_REG );    return (( val & 0x20000000 ) >> 29);}/********************************************* * function: epicConfigGet * * description: Get the EPIC interrupt Configuration *              return 0 if not error, otherwise return 1 * * note: ********************************************/void epicConfigGet( unsigned int *clkRatio, unsigned int *serEnable){    ULONG val;    val = sysEUMBBARRead( EPIC_INT_CONF_REG );    *clkRatio = ( val & 0x70000000 ) >> 28;    *serEnable = ( val & 0x8000000 ) >> 27;}/******************************************************************* *  sysEUMBBARRead - Read a 32-bit EUMBBAR register * *  This routine reads the content of a register in the Embedded *  Utilities Memory Block, and swaps to big endian before returning *  the value. * *  RETURNS:  The content of the specified EUMBBAR register. */ULONG sysEUMBBARRead    (    ULONG regNum    )    {    ULONG temp;    temp = *(ULONG *) (CFG_EUMB_ADDR + regNum);    return ( LONGSWAP(temp));    }/******************************************************************* *  sysEUMBBARWrite - Write a 32-bit EUMBBAR register * *  This routine swaps the value to little endian then writes it to *  a register in the Embedded Utilities Memory Block address space. * *  RETURNS: N/A */void sysEUMBBARWrite    (    ULONG regNum,               /* EUMBBAR register address */    ULONG regVal                /* Value to be written */    )    {    *(ULONG *) (CFG_EUMB_ADDR + regNum) = LONGSWAP(regVal);    return ;    }/******************************************************** * function: epicVendorId * * description: return the EPIC Vendor Identification *              register: * *              siliccon version, device id, and vendor id * * note: ********************************************************/void epicVendorId   (    unsigned int *step,    unsigned int *devId,    unsigned int *venId   )   {    ULONG val;    val = sysEUMBBARRead( EPIC_VENDOR_ID_REG );    *step  = ( val & 0x00FF0000 ) >> 16;    *devId = ( val & 0x0000FF00 ) >> 8;    *venId = ( val & 0x000000FF );    }/************************************************** * function: epicFeatures * * description: return the number of IRQ supported, *              number of CPU, and the version of the *              OpenEPIC * * note: *************************************************/void epicFeatures    (    unsigned int *noIRQs,    unsigned int *noCPUs,    unsigned int *verId    )    {    ULONG val;    val = sysEUMBBARRead( EPIC_FEATURES_REG );    *noIRQs  = ( val & 0x07FF0000 ) >> 16;    *noCPUs  = ( val & 0x00001F00 ) >> 8;    *verId   = ( val & 0x000000FF );}/********************************************************* * function: epciTmFrequncySet * * description: Set the timer frequency reporting register ********************************************************/void epicTmFrequencySet( unsigned int frq ){    sysEUMBBARWrite(EPIC_TM_FREQ_REG, frq);}/******************************************************* * function: epicTmFrequncyGet * * description: Get the current value of the Timer Frequency * Reporting register * ******************************************************/unsigned int epicTmFrequencyGet(void){    return( sysEUMBBARRead(EPIC_TM_FREQ_REG)) ;}/**************************************************** * function: epicTmBaseSet * * description: Set the #n global timer base count register *              return 0 if no error, otherwise return 1. * * note: ****************************************************/unsigned int epicTmBaseSet    (    ULONG srcAddr,         /* Address of the Timer Base register */    unsigned int cnt,    /* Base count */    unsigned int inhibit   /* 1 - count inhibit */    ){    unsigned int val = 0x80000000;    /* First inhibit counting the timer */    sysEUMBBARWrite(srcAddr, val) ;    /* set the new value */    val = (cnt & 0x7fffffff) | ((inhibit & 0x1) << 31);    sysEUMBBARWrite(srcAddr, val) ;    return 0;}/*********************************************************************** * function: epicTmBaseGet * * description: Get the current value of the global timer base count register *              return 0 if no error, otherwise return 1. * * note: ***********************************************************************/unsigned int epicTmBaseGet( ULONG srcAddr, unsigned int *val ){    *val = sysEUMBBARRead( srcAddr );    *val = *val & 0x7fffffff;    return 0;}/*********************************************************** * function: epicTmCountGet * * description: Get the value of a given global timer *              current count register *              return 0 if no error, otherwise return 1 * note: **********************************************************/unsigned int epicTmCountGet( ULONG srcAddr, unsigned int *val ){    *val = sysEUMBBARRead( srcAddr );    *val = *val & 0x7fffffff;    return 0;}/*********************************************************** * function: epicTmInhibit * * description: Stop counting of a given global timer *              return 0 if no error, otherwise return 1 * * note: ***********************************************************/unsigned int epicTmInhibit( unsigned int srcAddr ){    ULONG val;    val = sysEUMBBARRead( srcAddr );    val |= 0x80000000;    sysEUMBBARWrite( srcAddr, val );    return 0;}/****************************************************************** * function: epicTmEnable * * description: Enable counting of a given global timer *              return 0 if no error, otherwise return 1 * * note: *****************************************************************/unsigned int epicTmEnable( ULONG srcAddr ){    ULONG val;    val = sysEUMBBARRead( srcAddr );    val &= 0x7fffffff;    sysEUMBBARWrite( srcAddr, val );    return 0;}void epicSourcePrint(int Vect)    {    ULONG srcVal;    srcVal = sysEUMBBARRead(SrcVecTable[Vect].srcAddr);    PRINT("%s\n", SrcVecTable[Vect].srcName);    PRINT("Address   = 0x%lx\n", SrcVecTable[Vect].srcAddr);    PRINT("Vector    = %ld\n", (srcVal & 0x000000FF) );    PRINT("Mask      = %ld\n", srcVal >> 31);    PRINT("Activitiy = %ld\n", (srcVal & 40000000) >> 30);    PRINT("Polarity  = %ld\n", (srcVal & 0x00800000) >> 23);    PRINT("Sense     = %ld\n", (srcVal & 0x00400000) >> 22);    PRINT("Priority  = %ld\n", (srcVal & 0x000F0000) >> 16);    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成熟亚洲日本毛茸茸凸凹| 婷婷成人激情在线网| 日本久久一区二区| 青青青伊人色综合久久| 成人欧美一区二区三区在线播放| 一本到不卡精品视频在线观看| 久久国产夜色精品鲁鲁99| 亚洲一区二区三区中文字幕在线| 国产欧美精品区一区二区三区| 欧美xxxxx牲另类人与| 欧美绝品在线观看成人午夜影视| 激情五月激情综合网| 免费在线观看精品| 美女视频一区二区三区| 午夜欧美电影在线观看| 亚洲一区二区精品视频| 午夜激情一区二区| 天天影视涩香欲综合网| 日韩国产欧美三级| 久久97超碰国产精品超碰| 国产高清不卡二三区| 白白色 亚洲乱淫| 欧美日韩一级黄| 精品成人私密视频| 一区二区三区小说| 亚洲一级二级在线| 国内久久婷婷综合| 午夜国产精品一区| 日韩精品亚洲一区二区三区免费| 美日韩一区二区三区| 99久久99精品久久久久久| 宅男噜噜噜66一区二区66| 欧美高清激情brazzers| 18欧美乱大交hd1984| 国产高清精品久久久久| 欧美日韩五月天| 一区二区三区在线观看欧美| 成人综合激情网| 中日韩av电影| 国产成人亚洲综合色影视| 日韩欧美一区电影| 美国精品在线观看| 91精品国产综合久久香蕉的特点| 男女男精品视频| 精东粉嫩av免费一区二区三区| 日韩电影免费一区| 成人午夜激情在线| 日本高清成人免费播放| 在线电影一区二区三区| 欧美精品一区二区三区四区| 日韩一区二区在线观看| 中文字幕av一区二区三区| 亚洲桃色在线一区| 国产毛片一区二区| 日韩精品一区二区三区在线观看| 精品成人一区二区三区四区| 欧美激情自拍偷拍| 久久成人18免费观看| 91麻豆福利精品推荐| 这里只有精品99re| 亚洲一区二区三区精品在线| 国产福利不卡视频| 中文天堂在线一区| 99re亚洲国产精品| 国产欧美日韩在线视频| jlzzjlzz亚洲女人18| 日韩午夜电影在线观看| 国产91精品一区二区麻豆网站| 亚洲欧美经典视频| 91精品国产福利在线观看| 石原莉奈在线亚洲二区| 国产精品美女久久福利网站| 337p亚洲精品色噜噜狠狠| 国产一区二区91| 日本成人在线网站| 午夜视黄欧洲亚洲| 亚洲综合区在线| 亚洲人成网站在线| 国产三级精品在线| 欧美日韩一区高清| 欧美视频中文一区二区三区在线观看| 国产美女精品在线| 久久国内精品视频| 日韩精品乱码免费| 久久久不卡网国产精品一区| 欧美视频精品在线| 99国产精品久久久久久久久久久 | 日韩免费观看高清完整版| 91高清视频在线| 99久久精品免费看国产免费软件| 日韩电影在线免费观看| 国产精品久久毛片a| av激情亚洲男人天堂| 国产伦理精品不卡| 成人免费视频一区二区| 丝袜a∨在线一区二区三区不卡| 亚洲一区二区三区视频在线| 久久精品国产99| 久久久久久久久岛国免费| 久久精品国产一区二区三| 日韩欧美亚洲另类制服综合在线| 免费成人深夜小野草| 精品成a人在线观看| 国产精品18久久久久久久久久久久 | 一本色道亚洲精品aⅴ| 亚洲免费在线观看视频| 在线成人午夜影院| 国内精品国产三级国产a久久| 欧美精品aⅴ在线视频| 毛片不卡一区二区| 国产精品乱人伦一区二区| 在线播放视频一区| 欧美性生活一区| 成人午夜视频免费看| 无码av免费一区二区三区试看 | 91精品国产欧美一区二区成人| 国产精品亚洲人在线观看| 一区二区三区欧美久久| 亚洲日本丝袜连裤袜办公室| 国产蜜臀97一区二区三区| 日韩欧美一级二级三级| 色哟哟一区二区在线观看| 99久久国产免费看| 不卡视频免费播放| 99久久综合狠狠综合久久| 国产精品18久久久久久久久久久久 | 综合久久久久综合| 亚洲乱码国产乱码精品精可以看| 久久午夜色播影院免费高清| 日韩欧美国产1| 久久久www成人免费毛片麻豆| 久久精品男人天堂av| 国产日产欧美精品一区二区三区| 国产欧美一区二区精品婷婷 | 欧美裸体一区二区三区| 久久久久久免费| 亚洲激情中文1区| 免费成人av在线播放| 国产在线国偷精品免费看| 国产高清精品久久久久| 99国产精品久久| 欧美成人三级电影在线| 亚洲一区免费在线观看| 日韩欧美国产三级电影视频| 日韩限制级电影在线观看| 国产人伦精品一区二区| 午夜精彩视频在线观看不卡| 国产成人啪午夜精品网站男同| 91黄视频在线观看| 国产亚洲女人久久久久毛片| 五月婷婷综合在线| 国产91高潮流白浆在线麻豆| 555www色欧美视频| 1000精品久久久久久久久| 国产一区高清在线| 日韩视频在线你懂得| 一区二区三区在线免费视频| 国产成人在线色| 精品国产电影一区二区| 亚洲成人www| 欧美日本在线播放| 亚洲免费观看在线观看| 99精品黄色片免费大全| 一区二区成人在线| 99久久综合99久久综合网站| 欧美亚洲丝袜传媒另类| 天堂影院一区二区| 国产高清不卡一区二区| 欧美日韩精品一区二区三区四区| 欧美高清视频在线高清观看mv色露露十八 | 免费观看在线色综合| 欧美疯狂做受xxxx富婆| 日本不卡在线视频| 91精品国产麻豆国产自产在线| 亚洲欧美日韩一区| 欧美色爱综合网| 激情偷乱视频一区二区三区| 国产精品美女一区二区| 欧美色倩网站大全免费| 免费观看成人av| 亚洲一区中文日韩| 精品精品欲导航| jiyouzz国产精品久久| 一区二区三区视频在线观看| 欧美亚洲日本一区| 裸体在线国模精品偷拍| 日韩一区二区免费视频| 国产成人精品网址| 午夜精品福利久久久| 欧美激情一二三区| 欧美日韩免费电影| 色婷婷av一区二区三区之一色屋| 亚洲大片在线观看| 国产日产欧美一区二区三区| 91影视在线播放| 久久99国产精品免费| 亚洲一区在线观看免费| 国产精品欧美精品| 欧美r级电影在线观看| 欧美裸体bbwbbwbbw|