基於FPGA的 powerPC 串口擴展

本人與硬件合作完成ppc405ep 串口擴展,主要負責vxWorks串口驅動的工作。

工具 :tornado 2.2(vxWorks內核的編譯), UltraEdit(編寫代碼), BDI3000(bootrom的燒寫)


步驟 :

1,   建立開發環境,如下圖所示



2,  搞清vxWorks下串口驅動的架構,如下圖示


3, 對於串口的工作原理,已經很清楚這裏就不在詳細說明了。對vxWorks的驅動架構有了認識後,下來就開始進行驅動。vxWorks中對串口的初始化流程如下所示:


sysHwInit()函數會安裝一些外圍硬件的驅動。具體的串口中,就是調用sysSerialHwInit()函數來初始化具體串口,我們可將擴展串口的驅動加入此函數中


void ExtendUartHwInit
    (
    void
    )
    {

    UINT   clkDivisor;

    /*
     * Disable and clear serial interrupts in the UIC for both UARTs
     */
     intDisable(INT_LVL_EXT_IRQ_0);   //IRQ

    /*
     * intialize ST16C654 device A descriptors (S0)
     */
    ST16C654ChanA.int_vec = dev54AParas.vector;
    ST16C654ChanA.channelMode = 0;
    ST16C654ChanA.lcr =  UARTA_REG(UART_LCR);
    ST16C654ChanA.data =  UARTA_REG(UART_RDR);
    ST16C654ChanA.brdl = UARTA_REG(UART_BRDL);
    ST16C654ChanA.brdh = UARTA_REG(UART_BRDH);
    ST16C654ChanA.ier =  UARTA_REG(UART_IER);
    ST16C654ChanA.iid =  UARTA_REG(UART_IID);
    ST16C654ChanA.mdc =  UARTA_REG(UART_MDC);
    ST16C654ChanA.lst =  UARTA_REG(UART_LST);
    ST16C654ChanA.msr =  UARTA_REG(UART_MSR);

    ST16C654ChanA.outByte = sysOutByte;
    ST16C654ChanA.inByte  = sysInByte;



    clkDivisor = 12;

     ST16C654ChanA.clkFreq = systemInfo.freqPLLOUTA / clkDivisor;


    /*
     * Reset both devices
     */
    evbNs16550HrdInit(&ST16C654ChanA);

    }




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章