现在的位置: 首页 > 综合 > 正文

基于FPGA的 powerPC 串口扩展

2013年10月04日 ⁄ 综合 ⁄ 共 1207字 ⁄ 字号 评论关闭

本人与硬件合作完成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);

    }

抱歉!评论已关闭.