WinCE Bootloader学习笔记之OEMDebugInit()

WinCE Bootloader学习笔记

       OEMDebugInit()

  该函数主要是初始化串口,在该函数完成之后我们才可以调用OEMWriteDebugString()函数,输出调试消息。直接上代码:

BOOL OEMDebugInit(void)

{

 

    // Set up function callbacks used by blcommon.

// g_pOEMVerifyMemory, g_pOEMMultiBINNotify两个变量是全局的函数指针,

    //作为回调函数,具体有什么用途,还不太明确。

    g_pOEMVerifyMemory   = OEMVerifyMemory;      // Verify RAM.

    g_pOEMMultiBINNotify = OEMMultiBINNotify;

 

    // Call serial initialization routine (shared with the OAL).

    //该函数初始化串口

    OEMInitDebugSerial();

 

    return(TRUE);

}

 

VOID OEMInitDebugSerial()

{

#if FEILING_DEBUG

 

    S3C2440A_IOPORT_REG *pIOPortReg;

    UINT32 logMask;

       UINT32 count;

 

    // At this moment we must suppress logging.

    //全局变量,具体定义在那个函数中还需查询。

    logMask = g_oalLogMask;

    g_oalLogMask = 0;

#ifdef DEBUG_SERIAL_UART0

 

// OALPAtoVA()函数:物理地址转换为虚拟地址。

pIOPortReg = (S3C2440A_IOPORT_REG*)OALPAtoVA(S3C2440A_BASE_REG_PA_IOPORT, FALSE);

 

    // GPH2 and GHP3 are UART0 Tx and Rx, respectively.

    //配置UART0 TxRx

    CLRREG32(&pIOPortReg->GPHCON, (3 << 0)|(3 << 2));

    CLRREG32(&pIOPortReg->GPHCON, (3 << 4)|(3 << 6));

    SETREG32(&pIOPortReg->GPHCON, (2 << 4)|(2 << 6));

              SETREG32(&pIOPortReg->GPHCON, (2 << 0)|(2 << 2));

    // Disable pull-up on TXD0 and RXD0.

    //关闭上拉

    SETREG32(&pIOPortReg->GPHUP, (1 << 0)|(1 << 1));

 

    g_pUARTReg = (S3C2440A_UART_REG *)OALPAtoVA(S3C2440A_BASE_REG_PA_UART0, FALSE);

#else

    // GPH4 and GHP5 are UART1 Tx and Rx, respectively.

    //配置UART0 TxRx

    CLRREG32(&pIOPortReg->GPHCON, (3 << 8)|(3 << 10));

    SETREG32(&pIOPortReg->GPHCON, (2 << 8)|(2 << 10));

 

    // Disable pull-up on TXD1 and RXD1.

    //关闭上拉

    SETREG32(&pIOPortReg->GPHUP, (1 << 4)|(1 << 5));

 

    // UART1 (TXD1 & RXD1) used for debug serial.

    //配置UART1 作为调试串口

    g_pUARTReg = (S3C2440A_UART_REG *)OALPAtoVA(S3C2440A_BASE_REG_PA_UART1, FALSE);

#endif

    // Configure the UART.

    //配置寄存器,关FIFOinactive nRTS等等,波特率设定,详细查看寄存器

    OUTREG32(&g_pUARTReg->UFCON,  BSP_UART1_UFCON);

    OUTREG32(&g_pUARTReg->UMCON,  BSP_UART1_UMCON);

    OUTREG32(&g_pUARTReg->ULCON,  BSP_UART1_ULCON);

    OUTREG32(&g_pUARTReg->UCON,   BSP_UART1_UCON);

    OUTREG32(&g_pUARTReg->UBRDIV, BSP_UART1_UBRDIV);

   

     //这句话有什么用?

for (count=0;count<0xffff;count++);

    // Restore the logging mask.

    //恢复g_oalLogMask

    g_oalLogMask = logMask;

#endif

}

 

总而言之,该函数就是初始化UART1为调试端口。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值