新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > S3C2410的WINCE BSP添加串口支持

        S3C2410的WINCE BSP添加串口支持

        作者: 時間:2016-10-08 來源:網絡 收藏

        pRegBase = (PUCHAR)pHWHead->s2410SerReg;

        本文引用地址:http://www.104case.com/article/201610/305888.htm

        #else

        pRegBase = (PUCHAR)UART2_BASE;

        pHWHead->s2410SerReg = (S2410_UART_REG *)pRegBase;

        #endif

        }

        else

        {

        把這其中的代碼修改為以下代碼

        }

        if(pHWHead1->dwIOBase == 0x50004000)

        {

        pHWHead->bINT = BIT_UART1;

        pHWHead->bTxINT = INTSUB_TXD1;

        pHWHead->bRxINT = INTSUB_RXD1;

        pHWHead->bErrINT = INTSUB_ERR1;

        #if USEVIRTUAL

        pHWHead->s2410SerReg = (S2410_UART_REG *)v_pUART1regs;

        pRegBase = (PUCHAR)pHWHead->s2410SerReg;

        #else

        pRegBase = (PUCHAR)UART1_BASE;

        pHWHead->s2410SerReg = (S2410_UART_REG *)pRegBase;

        #endif

        }

        else if(pHWHead1->dwIOBase == 0x50008000)

        {

        pHWHead->bINT = BIT_UART2;

        pHWHead->bTxINT = INTSUB_TXD2;

        pHWHead->bRxINT = INTSUB_RXD2;

        pHWHead->bErrINT = INTSUB_ERR2;

        #if USEVIRTUAL

        pHWHead->s2410SerReg = (S2410_UART_REG *)v_pUART2regs;

        pRegBase = (PUCHAR)pHWHead->s2410SerReg;

        #else

        pRegBase = (PUCHAR)UART2_BASE;

        pHWHead->s2410SerReg = (S2410_UART_REG *)pRegBase;

        #endif

        }

        else

        {

        pHWHead->bINT = BIT_UART0;

        pHWHead->bTxINT = INTSUB_TXD0;

        pHWHead->bRxINT = INTSUB_RXD0;

        pHWHead->bErrINT = INTSUB_ERR0;

        #if USEVIRTUAL

        pHWHead->s2410SerReg = (S2410_UART_REG *)v_pUART0regs;

        pRegBase = (PUCHAR)pHWHead->s2410SerReg;

        #else

        pRegBase = (PUCHAR)UART0_BASE;

        pHWHead->s2410SerReg = (S2410_UART_REG *)pRegBase;

        #endif

        }

        再搜索:

        if ( pHWHead->UseIrDA )

        {

        pHWHead->pUFTXH = (volatile unsigned char *)(v_pUART2regs->rUTXH);

        pHWHead->pUFRXH = (volatile unsigned char *)(v_pUART2regs->rURXH);

        }

        else

        {

        把這其中的代碼修改為以下代碼

        }

        if(pHWHead1->dwIOBase == 0x50004000)

        {

        pHWHead->pUFTXH = (volatile unsigned char *)(v_pUART1regs->rUTXH);

        pHWHead->pUFRXH = (volatile unsigned char *)(v_pUART1regs->rURXH);

        }

        else if(pHWHead1->dwIOBase == 0x50008000)

        {

        pHWHead->pUFTXH = (volatile unsigned char *)(v_pUART2regs->rUTXH);

        pHWHead->pUFRXH = (volatile unsigned char *)(v_pUART2regs->rURXH);

        }

        else

        {

        pHWHead->pUFTXH = (volatile unsigned char *)(v_pUART0regs->rUTXH);

        pHWHead->pUFRXH = (volatile unsigned char *)(v_pUART0regs->rURXH);

        }

        4、打開ser2410_ser.c文件。

        搜索:

        const HWOBJ IoObj = {

        THREAD_AT_INIT,

        SYSINTR_SERIAL,

        (PHW_VTBL) IoVTbl

        };

        在其后面添加:

        const HWOBJ Io1Obj = {

        THREAD_AT_INIT,

        SYSINTR_SERIAL1,

        (PHW_VTBL) IoVTbl

        };

        const HWOBJ Io2Obj = {

        THREAD_AT_INIT,

        SYSINTR_IR,

        (PHW_VTBL) IoVTbl

        };

        接著搜索:

        const PCHWOBJ HWObjects[] = {

        IoObj,

        IrObj

        };

        將其修改為:

        const PCHWOBJ HWObjects[] = {

        IoObj,

        Io1Obj,

        Io2Obj

        };

        再搜索:

        GetSerialObject(

        DWORD DeviceArrayIndex

        )

        將其函數改為:

        {

        PHWOBJ pSerObj;

        DEBUGMSG(DEBUGMODE,(TEXT(GetSerialObject : DeviceArrayIndex = %d ), DeviceArrayIndex));

        // Now return this structure to the MDD.

        if ( DeviceArrayIndex == 2 )

        {

        RETAILMSG(1,(TEXT(GetSerialObject Io2Obj )));

        pSerObj = (PHWOBJ)(Io2Obj);

        }

        else if(DeviceArrayIndex == 1)

        pSerObj = (PHWOBJ)(Io1Obj);

        else

        pSerObj = (PHWOBJ)(IoObj);

        return (pSerObj);

        }

        5、打開cfw.c文件,這就是中斷處理。

        搜索:

        BOOL

        OEMInterruptEnable(DWORD idInt, // @parm Interrupt ID to be enabled. See for a list of possble values.

        LPVOID pvData, // @parm ptr to data passed in in the call

        DWORD cbData) // @parm Size of data pointed to be

        找到這一句:case SYSINTR_SERIAL:

        在其后面添加:

        case SYSINTR_SERIAL1: // Serial port1.

        s2410INT->rSUBSRCPND = (INTSUB_RXD1 | INTSUB_TXD1 | INTSUB_ERR1);

        s2410INT->rINTSUBMSK = ~INTSUB_RXD1;

        s2410INT->rINTSUBMSK = ~INTSUB_TXD1;

        s2410INT->rINTSUBMSK = ~INTSUB_ERR1;

        s2410INT->rSRCPND = BIT_UART1;

        // S3C2410X Developer Notice (page 4) warns against writing a 1 to a 0 bit in the INTPND register.

        if (s2410INT->rINTPND BIT_UART1) s2410INT->rINTPND = BIT_UART1;



        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 屯门区| 顺义区| 增城市| 民和| 清镇市| 梨树县| 葵青区| 滁州市| 增城市| 治县。| 安乡县| 微山县| 讷河市| 信丰县| 法库县| 海晏县| 剑河县| 舞阳县| 深州市| 剑川县| 丹东市| 广安市| 锡林浩特市| 南召县| 九台市| 化州市| 北辰区| 克东县| 万宁市| 宕昌县| 阜宁县| 郴州市| 盐亭县| 墨竹工卡县| 星子县| 十堰市| 南召县| 德安县| 修水县| 正镶白旗| 青阳县|