📄 bspserial.c
字号:
switch (HWAddr) {
case CSP_BASE_REG_PA_UART1:
break;
case CSP_BASE_REG_PA_UART2:
DDKIomuxSetPinMux(DDK_IOMUX_PIN_TXD2, DDK_IOMUX_OUT_FUNC, DDK_IOMUX_IN_FUNC);
DDKIomuxSetPinMux(DDK_IOMUX_PIN_RXD2, DDK_IOMUX_OUT_FUNC, DDK_IOMUX_IN_FUNC);
DDKIomuxSetPinMux(DDK_IOMUX_PIN_CTS2, DDK_IOMUX_OUT_FUNC, DDK_IOMUX_IN_FUNC);
DDKIomuxSetPinMux(DDK_IOMUX_PIN_RTS2, DDK_IOMUX_OUT_FUNC, DDK_IOMUX_IN_FUNC);
break;
case CSP_BASE_REG_PA_UART3:
break;
case CSP_BASE_REG_PA_UART4:
break;
case CSP_BASE_REG_PA_UART5:
DDKIomuxSetPinMux(DDK_IOMUX_PIN_PC_VS2, DDK_IOMUX_OUT_ALT2, DDK_IOMUX_IN_ALT2);
DDKIomuxSetPinMux(DDK_IOMUX_PIN_PC_BVD1, DDK_IOMUX_OUT_ALT2, DDK_IOMUX_IN_ALT2);
DDKIomuxSetPinMux(DDK_IOMUX_PIN_PC_BVD2, DDK_IOMUX_OUT_ALT2, DDK_IOMUX_IN_ALT2);
DDKIomuxSetPinMux(DDK_IOMUX_PIN_PC_RST, DDK_IOMUX_OUT_ALT2, DDK_IOMUX_IN_ALT2);
//PWR_EN_IRDA pin
DDKIomuxSetPinMux(DDK_IOMUX_PIN_CSI_D4, DDK_IOMUX_OUT_GPIO, DDK_IOMUX_IN_GPIO);
DDKIomuxSetPadConfig(DDK_IOMUX_PAD_CSI_D4, DDK_IOMUX_PAD_SLEW_SLOW,
DDK_IOMUX_PAD_DRIVE_NORMAL, DDK_IOMUX_PAD_MODE_CMOS,
DDK_IOMUX_PAD_TRIG_SCHMITT,DDK_IOMUX_PAD_PULL_UP_100K);
DDKGpioWriteDataPin(DDK_GPIO_PORT3, BSP_GPIO_PWR_EN_IRDA, 1);
DDKGpioSetConfig(DDK_GPIO_PORT3, BSP_GPIO_PWR_EN_IRDA, DDK_GPIO_DIR_OUT, DDK_GPIO_INTR_NONE);
//PWR_EN_GPS pin
DDKIomuxSetPinMux(DDK_IOMUX_PIN_CSI_D5, DDK_IOMUX_OUT_GPIO, DDK_IOMUX_IN_GPIO);
DDKIomuxSetPadConfig(DDK_IOMUX_PAD_CSI_D5, DDK_IOMUX_PAD_SLEW_SLOW,
DDK_IOMUX_PAD_DRIVE_NORMAL, DDK_IOMUX_PAD_MODE_CMOS,
DDK_IOMUX_PAD_TRIG_SCHMITT,DDK_IOMUX_PAD_PULL_UP_100K);
DDKGpioWriteDataPin(DDK_GPIO_PORT3, BSP_GPIO_PWR_EN_GPS, 1);
DDKGpioSetConfig(DDK_GPIO_PORT3, BSP_GPIO_PWR_EN_GPS, DDK_GPIO_DIR_OUT, DDK_GPIO_INTR_NONE);
//IrDA_Mode_Set pin
DDKIomuxSetPinMux(DDK_IOMUX_PIN_DSR_DTE1, DDK_IOMUX_OUT_GPIO, DDK_IOMUX_IN_GPIO);
DDKIomuxSetPadConfig(DDK_IOMUX_PAD_DSR_DTE1, DDK_IOMUX_PAD_SLEW_SLOW,
DDK_IOMUX_PAD_DRIVE_NORMAL, DDK_IOMUX_PAD_MODE_CMOS,
DDK_IOMUX_PAD_TRIG_SCHMITT,DDK_IOMUX_PAD_PULL_UP_100K);
DDKGpioWriteDataPin(DDK_GPIO_PORT2, BSP_GPIO_IRDA_MODE_SET, 1);
DDKGpioSetConfig(DDK_GPIO_PORT2, BSP_GPIO_IRDA_MODE_SET, DDK_GPIO_DIR_OUT, DDK_GPIO_INTR_NONE);
//IRDA_RS232 pin
DDKIomuxSetPinMux(DDK_IOMUX_PIN_SCLK0, DDK_IOMUX_OUT_GPIO, DDK_IOMUX_IN_GPIO);
DDKIomuxSetPadConfig(DDK_IOMUX_PAD_SCLK0, DDK_IOMUX_PAD_SLEW_SLOW,
DDK_IOMUX_PAD_DRIVE_NORMAL, DDK_IOMUX_PAD_MODE_CMOS,
DDK_IOMUX_PAD_TRIG_SCHMITT,DDK_IOMUX_PAD_PULL_UP_100K);
DDKGpioWriteDataPin(DDK_GPIO_PORT3, BSP_GPIO_IRDA_RS232, 1);
DDKGpioSetConfig(DDK_GPIO_PORT3, BSP_GPIO_IRDA_RS232, DDK_GPIO_DIR_OUT, DDK_GPIO_INTR_NONE);
//GPS_RS232 pin
DDKIomuxSetPinMux(DDK_IOMUX_PIN_SRST0, DDK_IOMUX_OUT_GPIO, DDK_IOMUX_IN_GPIO);
DDKIomuxSetPadConfig(DDK_IOMUX_PAD_SRST0, DDK_IOMUX_PAD_SLEW_SLOW,
DDK_IOMUX_PAD_DRIVE_NORMAL, DDK_IOMUX_PAD_MODE_CMOS,
DDK_IOMUX_PAD_TRIG_SCHMITT,DDK_IOMUX_PAD_PULL_UP_100K);
DDKGpioWriteDataPin(DDK_GPIO_PORT3, BSP_GPIO_GPS_RS232, 1);
DDKGpioSetConfig(DDK_GPIO_PORT3, BSP_GPIO_GPS_RS232, DDK_GPIO_DIR_OUT, DDK_GPIO_INTR_NONE);
break;
default:
return result;
}
return TRUE;
}
//-----------------------------------------------------------------------------
//
// Function: BSPSerGetChannelPriority
//
// This function is a wrapper for Uart to find out the SDMA channel priority.
//
// Parameters:
//
// Returns:
// SDMA channel priority for Serial.
//
//-----------------------------------------------------------------------------
UINT8 BSPSerGetChannelPriority()
{
return BSP_SDMA_CHNPRI_SERIAL;
}
//-----------------------------------------------------------------------------
//
// Function: BSPSerGetDMAIsEnabled
//
// This function is a wrapper for Uart to find out if SDMA is to be used or not.
// The UARTs are identified based on the based address.
//
// Parameters:
// HWAddr
// [in] Physical IO address.
// Returns:
// TRUE if SDMA is to be used for this UART.
//
//-----------------------------------------------------------------------------
BOOL BSPSerGetDMAIsEnabled(ULONG HWAddr)
{
BOOL useDMA = FALSE;
switch (HWAddr) {
case CSP_BASE_REG_PA_UART1:
#if BSP_SDMA_SUPPORT_UART1
useDMA = TRUE;
#endif
break;
case CSP_BASE_REG_PA_UART2:
#if BSP_SDMA_SUPPORT_UART2
useDMA = TRUE;
#endif
break;
case CSP_BASE_REG_PA_UART3:
#if BSP_SDMA_SUPPORT_UART3
useDMA = TRUE;
#endif
break;
case CSP_BASE_REG_PA_UART4:
#if BSP_SDMA_SUPPORT_UART4
useDMA = TRUE;
#endif
break;
case CSP_BASE_REG_PA_UART5:
#if BSP_SDMA_SUPPORT_UART5
useDMA = TRUE;
#endif
break;
default:
break;
}
return useDMA;
}
//-----------------------------------------------------------------------------
//
// Function: BSPSerGetDMARequest
//
// This function is a wrapper for Uart to find out the TX/RX SDMA request line.
// The UARTs are identified based on the based address.
//
// Parameters:
// HWAddr
// [in] Physical IO address.
// reqRx
// [out] the RX SDMA request line to be used for this UART.
// reqTx
// [out] the TX SDMA request line to be used for this UART.
// Returns:
// TRUE if SDMA is to be used for this UART.
//
//-----------------------------------------------------------------------------
BOOL BSPSerGetDMARequest(ULONG HWAddr, int* reqRx, int* reqTx)
{
switch (HWAddr) {
case CSP_BASE_REG_PA_UART1:
*reqRx = DDK_DMA_REQ_UART1_RX;
*reqTx = DDK_DMA_REQ_UART1_TX;
break;
case CSP_BASE_REG_PA_UART2:
*reqRx = DDK_DMA_REQ_UART2_RX;
*reqTx = DDK_DMA_REQ_UART2_TX;
break;
case CSP_BASE_REG_PA_UART3:
*reqRx = DDK_DMA_REQ_UART3_RX;
*reqTx = DDK_DMA_REQ_UART3_TX;
break;
case CSP_BASE_REG_PA_UART4:
*reqRx = DDK_DMA_REQ_UART4_RX;
*reqTx = DDK_DMA_REQ_UART4_TX;
break;
case CSP_BASE_REG_PA_UART5:
*reqRx = DDK_DMA_REQ_UART5_RX;
*reqTx = DDK_DMA_REQ_UART5_TX;
break;
default:
return FALSE;
}
return TRUE;
}
//-----------------------------------------------------------------------------
//
// Function: BSPSerSetDMAReqGpr
//
// This function is a wrapper for Uart to acquire a muxed SDMA request line.
// The UARTs are identified based on the based address.
//
// Parameters:
// HWAddr
// [in] Physical IO address.
// Returns:
// TRUE if success.
//
//-----------------------------------------------------------------------------
BOOL BSPSerAcquireDMAReqGpr(ULONG HWAddr)
{
BOOL bRet = FALSE;
switch (HWAddr) {
case CSP_BASE_REG_PA_UART2:
bRet = DDKIomuxSetGprBit(DDK_IOMUX_GPR_FIRI_UART2, 0);
break;
case CSP_BASE_REG_PA_UART3:
bRet = DDKIomuxSetGprBit(DDK_IOMUX_GPR_CSPI1_UART3, 1);
break;
case CSP_BASE_REG_PA_UART5:
bRet = DDKIomuxSetGprBit(DDK_IOMUX_GPR_CSPI3_UART5, 1);
break;
default:
break;
}
return bRet;
}
//-----------------------------------------------------------------------------
//
// Function: BSPSerRestoreDMAReqGpr
//
// This function is a wrapper for Uart to restore a muxed SDMA request line.
// The UARTs are identified based on the based address.
//
// Parameters:
// HWAddr
// [in] Physical IO address.
// Returns:
// TRUE if success.
//
//-----------------------------------------------------------------------------
BOOL BSPSerRestoreDMAReqGpr(ULONG HWAddr)
{
BOOL bRet = TRUE;
switch (HWAddr) {
case CSP_BASE_REG_PA_UART2:
bRet = DDKIomuxSetGprBit(DDK_IOMUX_GPR_FIRI_UART2, 1);
break;
case CSP_BASE_REG_PA_UART3:
bRet = DDKIomuxSetGprBit(DDK_IOMUX_GPR_CSPI1_UART3, 0);
break;
case CSP_BASE_REG_PA_UART5:
bRet = DDKIomuxSetGprBit(DDK_IOMUX_GPR_CSPI3_UART5, 0);
break;
default:
break;
}
return bRet;
}
//-----------------------------------------------------------------------------
//
// Function: BSPGetDMABuffSize
//
// This function is a wrapper for Uart to find out the TX/RX SDMA.
// The UARTs are identified based on the based address.
//
// Parameters:
// buffRx
// [out] the RX SDMA buffer size.
//
// buffTx
// [out] the RX SDMA buffer size
// Returns:
//
//
//-----------------------------------------------------------------------------
VOID BSPGetDMABuffSize(UINT16* buffRx, UINT16 * buffTx)
{
*buffRx = SERIAL_SDMA_RX_BUFFER_SIZE;
*buffTx = SERIAL_SDMA_TX_BUFFER_SIZE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -