20231023_InSituLab_emb/InsituLabProject_QRS/Src/Usr/Bsp/McuBspUart.c
Rjh913828050 4e26d518da 类型:更细
内容:更新十四五程序
人员:任家豪
2024-07-31 08:56:07 +08:00

761 lines
34 KiB
C

#include "McuBspUart.h"
typedef struct {
uint8_t Enable;
uint8_t Mode;
uint32_t BandRate;
uint32_t DataBit;
uint32_t StopBit;
uint32_t CheckBit;
uint8_t Txbusy;
uint8_t Rxbusy;
} BSP_UART_OBJ;
static uint8_t gMcuBspUartRecvData0 = 0;
static uint8_t gMcuBspUartRecvData1 = 0;
static uint8_t gMcuBspUartRecvData2 = 0;
static uint8_t gMcuBspUartRecvData3 = 0;
static uint8_t gMcuBspUartRecvData4 = 0;
static uint8_t gMcuBspUartRecvData5 = 0;
static uint8_t gMcuBspUartRecvData6 = 0;
static uint8_t gMcuBspUartRecvData7 = 0;
static UART_RECV_CALLBACK gMcuBspUart0RecvCallback = NULL;
static UART_RECV_CALLBACK gMcuBspUart1RecvCallback = NULL;
static UART_RECV_CALLBACK gMcuBspUart2RecvCallback = NULL;
static UART_RECV_CALLBACK gMcuBspUart3RecvCallback = NULL;
static UART_RECV_CALLBACK gMcuBspUart4RecvCallback = NULL;
static UART_RECV_CALLBACK gMcuBspUart5RecvCallback = NULL;
static UART_RECV_CALLBACK gMcuBspUart6RecvCallback = NULL;
static UART_RECV_CALLBACK gMcuBspUart7RecvCallback = NULL;
static void McuBspUart0IntHandler(void);
static void McuBspUart1IntHandler(void);
static void McuBspUart2IntHandler(void);
static void McuBspUart3IntHandler(void);
static void McuBspUart4IntHandler(void);
static void McuBspUart5IntHandler(void);
static void McuBspUart6IntHandler(void);
static void McuBspUart7IntHandler(void);
static BSP_UART_OBJ gMcuBspUartObj[MCU_BSP_UART_ALL_NUM] = {{0, MCU_BSP_UART0_MODE, 0, 0, 0, 0, 0, 0},
{0, MCU_BSP_UART1_MODE, 0, 0, 0, 0, 0, 0},
{0, MCU_BSP_UART2_MODE, 0, 0, 0, 0, 0, 0},
{0, MCU_BSP_UART3_MODE, 0, 0, 0, 0, 0, 0},
{0, MCU_BSP_UART4_MODE, 0, 0, 0, 0, 0, 0},
{0, MCU_BSP_UART5_MODE, 0, 0, 0, 0, 0, 0},
{0, MCU_BSP_UART6_MODE, 0, 0, 0, 0, 0, 0},
{0, MCU_BSP_UART7_MODE, 0, 0, 0, 0, 0, 0}};
int McuBspUartInit(uint8_t UartId, uint32_t BandRate, uint32_t DataBit, uint32_t StopBit, uint32_t CheckBit)
{
uint32_t ui32Status;
if (UartId >= MCU_BSP_UART_ALL_NUM) {
return -1;
}
if ((BandRate != MCU_BSP_UART_BANDRATE_4800) && (BandRate != MCU_BSP_UART_BANDRATE_9600) && (BandRate != MCU_BSP_UART_BANDRATE_14400) &&
(BandRate != MCU_BSP_UART_BANDRATE_19200) && (BandRate != MCU_BSP_UART_BANDRATE_38400) && (BandRate != MCU_BSP_UART_BANDRATE_56000) &&
(BandRate != MCU_BSP_UART_BANDRATE_57600) && (BandRate != MCU_BSP_UART_BANDRATE_115200)) {
return -1;
} else {
gMcuBspUartObj[UartId].BandRate = BandRate;
}
switch (DataBit) {
case MCU_BSP_UART_DATABIT_5:
gMcuBspUartObj[UartId].DataBit = UART_CONFIG_WLEN_5;
break;
case MCU_BSP_UART_DATABIT_6:
gMcuBspUartObj[UartId].DataBit = UART_CONFIG_WLEN_6;
break;
case MCU_BSP_UART_DATABIT_7:
gMcuBspUartObj[UartId].DataBit = UART_CONFIG_WLEN_7;
break;
case MCU_BSP_UART_DATABIT_8:
gMcuBspUartObj[UartId].DataBit = UART_CONFIG_WLEN_8;
break;
default:
return -1;
}
switch (StopBit) {
case MCU_BSP_UART_STOPBIT_ONE:
gMcuBspUartObj[UartId].StopBit = UART_CONFIG_STOP_ONE;
break;
case MCU_BSP_UART_STOPBIT_TWO:
gMcuBspUartObj[UartId].StopBit = UART_CONFIG_STOP_TWO;
break;
default:
return -1;
}
switch (CheckBit) {
case MCU_BSP_UART_CHECKBIT_NONE:
gMcuBspUartObj[UartId].CheckBit = UART_CONFIG_PAR_NONE;
break;
case MCU_BSP_UART_CHECKBIT_EVEN:
gMcuBspUartObj[UartId].CheckBit = UART_CONFIG_PAR_EVEN;
break;
case MCU_BSP_UART_CHECKBIT_ODD:
gMcuBspUartObj[UartId].CheckBit = UART_CONFIG_PAR_ODD;
break;
default:
return -1;
}
while ((gMcuBspUartObj[UartId].Txbusy == MCU_BSP_UART_BUSY) ||
(gMcuBspUartObj[UartId].Rxbusy == MCU_BSP_UART_BUSY)) {
}
gMcuBspUartObj[UartId].Enable = MCU_BSP_UART_OFF;
if (UartId == MCU_BSP_UART0) {
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
SysCtlPeripheralEnable(MCU_BSP_UART0_RX_GPIO_CLK);
SysCtlPeripheralEnable(MCU_BSP_UART0_TX_GPIO_CLK);
GPIOPinConfigure(MCU_BSP_UART0_RX_GPIO_CONF);
GPIOPinConfigure(MCU_BSP_UART0_TX_GPIO_CONF);
GPIOPinTypeUART(MCU_BSP_UART0_RX_GPIO, MCU_BSP_UART0_RX_GPIO_PIN);
GPIOPinTypeUART(MCU_BSP_UART0_TX_GPIO, MCU_BSP_UART0_TX_GPIO_PIN);
UARTConfigSetExpClk(UART0_BASE, SysFreqGet(), gMcuBspUartObj[UartId].BandRate,
((gMcuBspUartObj[UartId].DataBit) | (gMcuBspUartObj[UartId].StopBit) |
(gMcuBspUartObj[UartId].CheckBit)));
if (gMcuBspUartObj[UartId].Mode == MCU_BSP_UART_RS485_TYPE) {
SysCtlPeripheralEnable(MCU_BSP_UART0_RS485_CTRL_GPIO_CLK);
GPIODirModeSet(MCU_BSP_UART0_RS485_CTRL_GPIO, MCU_BSP_UART0_RS485_CTRL_GPIO_PIN, GPIO_DIR_MODE_OUT);
GPIOPadConfigSet(MCU_BSP_UART0_RS485_CTRL_GPIO, MCU_BSP_UART0_RS485_CTRL_GPIO_PIN, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_WAKE_LOW);
GPIOPinWrite(MCU_BSP_UART0_RS485_CTRL_GPIO, MCU_BSP_UART0_RS485_CTRL_GPIO_PIN, ~MCU_BSP_UART0_RS485_CTRL_GPIO_PIN);
}
BSP_IntVectSet((CPU_INT08U)BSP_INT_ID_UART0, (CPU_FNCT_VOID)McuBspUart0IntHandler);
BSP_IntEn(BSP_INT_ID_UART0);
IntEnable(INT_UART0);
IntPrioritySet(INT_UART0, 3 << 5);
UARTIntEnable(UART0_BASE, UART_INT_RX | UART_INT_RT);
ui32Status = UARTIntStatus(UART0_BASE, true);
UARTIntClear(UART0_BASE, ui32Status);
while(0 <= UARTCharGetNonBlocking(UART0_BASE));
} else if (UartId == MCU_BSP_UART1) {
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1);
SysCtlPeripheralEnable(MCU_BSP_UART1_RX_GPIO_CLK);
SysCtlPeripheralEnable(MCU_BSP_UART1_TX_GPIO_CLK);
GPIOPinConfigure(MCU_BSP_UART1_RX_GPIO_CONF);
GPIOPinConfigure(MCU_BSP_UART1_TX_GPIO_CONF);
GPIOPinTypeUART(MCU_BSP_UART1_RX_GPIO, MCU_BSP_UART1_RX_GPIO_PIN);
GPIOPinTypeUART(MCU_BSP_UART1_TX_GPIO, MCU_BSP_UART1_TX_GPIO_PIN);
UARTConfigSetExpClk(UART1_BASE, SysFreqGet(), gMcuBspUartObj[UartId].BandRate,
((gMcuBspUartObj[UartId].DataBit) | (gMcuBspUartObj[UartId].StopBit) |
(gMcuBspUartObj[UartId].CheckBit)));
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOK);
GPIODirModeSet(GPIO_PORTK_BASE, GPIO_PIN_4, GPIO_DIR_MODE_OUT);
GPIOPadConfigSet(GPIO_PORTK_BASE, GPIO_PIN_4, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPD);
if (gMcuBspUartObj[UartId].Mode == MCU_BSP_UART_RS485_TYPE) {
SysCtlPeripheralEnable(MCU_BSP_UART1_RS485_CTRL_GPIO_CLK);
GPIOPinWrite(GPIO_PORTK_BASE, GPIO_PIN_4, ~GPIO_PIN_4);
GPIODirModeSet(MCU_BSP_UART1_RS485_CTRL_GPIO, MCU_BSP_UART1_RS485_CTRL_GPIO_PIN, GPIO_DIR_MODE_OUT);
GPIOPadConfigSet(MCU_BSP_UART1_RS485_CTRL_GPIO, MCU_BSP_UART1_RS485_CTRL_GPIO_PIN, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPD);
GPIOPinWrite(MCU_BSP_UART1_RS485_CTRL_GPIO, MCU_BSP_UART1_RS485_CTRL_GPIO_PIN, ~MCU_BSP_UART1_RS485_CTRL_GPIO_PIN);
} else {
GPIOPinWrite(GPIO_PORTK_BASE, GPIO_PIN_4, GPIO_PIN_4);
}
BSP_IntVectSet((CPU_INT08U)BSP_INT_ID_UART1, (CPU_FNCT_VOID)McuBspUart1IntHandler);
BSP_IntEn(BSP_INT_ID_UART1);
IntEnable(INT_UART1);
IntPrioritySet(INT_UART1, 3 << 5);
UARTIntEnable(UART1_BASE, UART_INT_RX | UART_INT_RT);
ui32Status = UARTIntStatus(UART1_BASE, true);
UARTIntClear(UART1_BASE, ui32Status);
while(0 <= UARTCharGetNonBlocking(UART1_BASE));
} else if (UartId == MCU_BSP_UART2) {
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART2);
SysCtlPeripheralEnable(MCU_BSP_UART2_RX_GPIO_CLK);
SysCtlPeripheralEnable(MCU_BSP_UART2_TX_GPIO_CLK);
GPIOPinConfigure(MCU_BSP_UART2_RX_GPIO_CONF);
GPIOPinConfigure(MCU_BSP_UART2_TX_GPIO_CONF);
GPIOPinTypeUART(MCU_BSP_UART2_RX_GPIO, MCU_BSP_UART2_RX_GPIO_PIN);
GPIOPinTypeUART(MCU_BSP_UART2_TX_GPIO, MCU_BSP_UART2_TX_GPIO_PIN);
UARTConfigSetExpClk(UART2_BASE, SysFreqGet(), gMcuBspUartObj[UartId].BandRate,
((gMcuBspUartObj[UartId].DataBit) | (gMcuBspUartObj[UartId].StopBit) |
(gMcuBspUartObj[UartId].CheckBit)));
if (gMcuBspUartObj[UartId].Mode == MCU_BSP_UART_RS485_TYPE) {
SysCtlPeripheralEnable(MCU_BSP_UART2_RS485_CTRL_GPIO_CLK);
GPIODirModeSet(MCU_BSP_UART2_RS485_CTRL_GPIO, MCU_BSP_UART2_RS485_CTRL_GPIO_PIN, GPIO_DIR_MODE_OUT);
GPIOPadConfigSet(MCU_BSP_UART2_RS485_CTRL_GPIO, MCU_BSP_UART2_RS485_CTRL_GPIO_PIN, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPD);
GPIOPinWrite(MCU_BSP_UART2_RS485_CTRL_GPIO, MCU_BSP_UART2_RS485_CTRL_GPIO_PIN, ~MCU_BSP_UART2_RS485_CTRL_GPIO_PIN);
}
BSP_IntVectSet((CPU_INT08U)BSP_INT_ID_UART2, (CPU_FNCT_VOID)McuBspUart2IntHandler);
BSP_IntEn(BSP_INT_ID_UART2);
IntEnable(INT_UART2);
IntPrioritySet(INT_UART2, 3 << 5);
UARTIntEnable(UART2_BASE, UART_INT_RX | UART_INT_RT);
ui32Status = UARTIntStatus(UART2_BASE, true);
UARTIntClear(UART2_BASE, ui32Status);
while(0 <= UARTCharGetNonBlocking(UART2_BASE));
} else if (UartId == MCU_BSP_UART3) {
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART3);
SysCtlPeripheralEnable(MCU_BSP_UART3_RX_GPIO_CLK);
SysCtlPeripheralEnable(MCU_BSP_UART3_TX_GPIO_CLK);
GPIOPinConfigure(MCU_BSP_UART3_RX_GPIO_CONF);
GPIOPinConfigure(MCU_BSP_UART3_TX_GPIO_CONF);
GPIOPinTypeUART(MCU_BSP_UART3_RX_GPIO, MCU_BSP_UART3_RX_GPIO_PIN);
GPIOPinTypeUART(MCU_BSP_UART3_TX_GPIO, MCU_BSP_UART3_TX_GPIO_PIN);
UARTConfigSetExpClk(UART3_BASE, SysFreqGet(), gMcuBspUartObj[UartId].BandRate,
((gMcuBspUartObj[UartId].DataBit) | (gMcuBspUartObj[UartId].StopBit) |
(gMcuBspUartObj[UartId].CheckBit)));
if (gMcuBspUartObj[UartId].Mode == MCU_BSP_UART_RS485_TYPE) {
SysCtlPeripheralEnable(MCU_BSP_UART3_RS485_CTRL_GPIO_CLK);
GPIODirModeSet(MCU_BSP_UART3_RS485_CTRL_GPIO, MCU_BSP_UART3_RS485_CTRL_GPIO_PIN, GPIO_DIR_MODE_OUT);
GPIOPadConfigSet(MCU_BSP_UART3_RS485_CTRL_GPIO, MCU_BSP_UART3_RS485_CTRL_GPIO_PIN, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_WAKE_LOW);
GPIOPinWrite(MCU_BSP_UART3_RS485_CTRL_GPIO, MCU_BSP_UART3_RS485_CTRL_GPIO_PIN, ~MCU_BSP_UART3_RS485_CTRL_GPIO_PIN);
}
BSP_IntVectSet((CPU_INT08U)BSP_INT_ID_UART3, (CPU_FNCT_VOID)McuBspUart3IntHandler);
BSP_IntEn(BSP_INT_ID_UART3);
IntEnable(INT_UART3);
IntPrioritySet(INT_UART3, 3 << 5);
UARTIntEnable(UART3_BASE, UART_INT_RX | UART_INT_RT);
ui32Status = UARTIntStatus(UART3_BASE, true);
UARTIntClear(UART3_BASE, ui32Status);
while(0 <= UARTCharGetNonBlocking(UART3_BASE));
} else if (UartId == MCU_BSP_UART4) {
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART4);
SysCtlPeripheralEnable(MCU_BSP_UART4_RX_GPIO_CLK);
SysCtlPeripheralEnable(MCU_BSP_UART4_TX_GPIO_CLK);
GPIOPinConfigure(MCU_BSP_UART4_RX_GPIO_CONF);
GPIOPinConfigure(MCU_BSP_UART4_TX_GPIO_CONF);
GPIOPinTypeUART(MCU_BSP_UART4_RX_GPIO, MCU_BSP_UART4_RX_GPIO_PIN);
GPIOPinTypeUART(MCU_BSP_UART4_TX_GPIO, MCU_BSP_UART4_TX_GPIO_PIN);
UARTConfigSetExpClk(UART4_BASE, SysFreqGet(), gMcuBspUartObj[UartId].BandRate,
((gMcuBspUartObj[UartId].DataBit) | (gMcuBspUartObj[UartId].StopBit) |
(gMcuBspUartObj[UartId].CheckBit)));
if (gMcuBspUartObj[UartId].Mode == MCU_BSP_UART_RS485_TYPE) {
SysCtlPeripheralEnable(MCU_BSP_UART4_RS485_CTRL_GPIO_CLK);
GPIODirModeSet(MCU_BSP_UART4_RS485_CTRL_GPIO, MCU_BSP_UART4_RS485_CTRL_GPIO_PIN, GPIO_DIR_MODE_OUT);
GPIOPadConfigSet(MCU_BSP_UART4_RS485_CTRL_GPIO, MCU_BSP_UART4_RS485_CTRL_GPIO_PIN, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_WAKE_LOW);
GPIOPinWrite(MCU_BSP_UART4_RS485_CTRL_GPIO, MCU_BSP_UART4_RS485_CTRL_GPIO_PIN, ~MCU_BSP_UART4_RS485_CTRL_GPIO_PIN);
}
BSP_IntVectSet((CPU_INT08U)BSP_INT_ID_UART4, (CPU_FNCT_VOID)McuBspUart4IntHandler);
BSP_IntEn(BSP_INT_ID_UART4);
IntEnable(INT_UART4);
IntPrioritySet(INT_UART4, 3 << 5);
UARTIntEnable(UART4_BASE, UART_INT_RX | UART_INT_RT);
ui32Status = UARTIntStatus(UART4_BASE, true);
UARTIntClear(UART4_BASE, ui32Status);
while(0 <= UARTCharGetNonBlocking(UART4_BASE));
} else if (UartId == MCU_BSP_UART5) {
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART5);
SysCtlPeripheralEnable(MCU_BSP_UART5_RX_GPIO_CLK);
SysCtlPeripheralEnable(MCU_BSP_UART5_TX_GPIO_CLK);
GPIOPinConfigure(MCU_BSP_UART5_RX_GPIO_CONF);
GPIOPinConfigure(MCU_BSP_UART5_TX_GPIO_CONF);
GPIOPinTypeUART(MCU_BSP_UART5_RX_GPIO, MCU_BSP_UART5_RX_GPIO_PIN);
GPIOPinTypeUART(MCU_BSP_UART5_TX_GPIO, MCU_BSP_UART5_TX_GPIO_PIN);
UARTConfigSetExpClk(UART5_BASE, SysFreqGet(), gMcuBspUartObj[UartId].BandRate,
((gMcuBspUartObj[UartId].DataBit) | (gMcuBspUartObj[UartId].StopBit) |
(gMcuBspUartObj[UartId].CheckBit)));
if (gMcuBspUartObj[UartId].Mode == MCU_BSP_UART_RS485_TYPE) {
SysCtlPeripheralEnable(MCU_BSP_UART5_RS485_CTRL_GPIO_CLK);
GPIODirModeSet(MCU_BSP_UART5_RS485_CTRL_GPIO, MCU_BSP_UART5_RS485_CTRL_GPIO_PIN, GPIO_DIR_MODE_OUT);
GPIOPadConfigSet(MCU_BSP_UART5_RS485_CTRL_GPIO, MCU_BSP_UART5_RS485_CTRL_GPIO_PIN, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_WAKE_LOW);
GPIOPinWrite(MCU_BSP_UART5_RS485_CTRL_GPIO, MCU_BSP_UART5_RS485_CTRL_GPIO_PIN, ~MCU_BSP_UART5_RS485_CTRL_GPIO_PIN);
}
BSP_IntVectSet((CPU_INT08U)BSP_INT_ID_UART5, (CPU_FNCT_VOID)McuBspUart5IntHandler);
BSP_IntEn(BSP_INT_ID_UART5);
IntEnable(INT_UART5);
IntPrioritySet(INT_UART5, 3 << 5);
UARTIntEnable(UART5_BASE, UART_INT_RX | UART_INT_RT);
ui32Status = UARTIntStatus(UART5_BASE, true);
UARTIntClear(UART5_BASE, ui32Status);
while(0 <= UARTCharGetNonBlocking(UART5_BASE));
} else if (UartId == MCU_BSP_UART6) {
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART6);
SysCtlPeripheralEnable(MCU_BSP_UART6_RX_GPIO_CLK);
SysCtlPeripheralEnable(MCU_BSP_UART6_TX_GPIO_CLK);
GPIOPinConfigure(MCU_BSP_UART6_RX_GPIO_CONF);
GPIOPinConfigure(MCU_BSP_UART6_TX_GPIO_CONF);
GPIOPinTypeUART(MCU_BSP_UART6_RX_GPIO, MCU_BSP_UART6_RX_GPIO_PIN);
GPIOPinTypeUART(MCU_BSP_UART6_TX_GPIO, MCU_BSP_UART6_TX_GPIO_PIN);
UARTConfigSetExpClk(UART6_BASE, SysFreqGet(), gMcuBspUartObj[UartId].BandRate,
((gMcuBspUartObj[UartId].DataBit) | (gMcuBspUartObj[UartId].StopBit) |
(gMcuBspUartObj[UartId].CheckBit)));
if (gMcuBspUartObj[UartId].Mode == MCU_BSP_UART_RS485_TYPE) {
SysCtlPeripheralEnable(MCU_BSP_UART6_RS485_CTRL_GPIO_CLK);
GPIODirModeSet(MCU_BSP_UART6_RS485_CTRL_GPIO, MCU_BSP_UART6_RS485_CTRL_GPIO_PIN, GPIO_DIR_MODE_OUT);
GPIOPadConfigSet(MCU_BSP_UART6_RS485_CTRL_GPIO, MCU_BSP_UART6_RS485_CTRL_GPIO_PIN, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_WAKE_LOW);
GPIOPinWrite(MCU_BSP_UART6_RS485_CTRL_GPIO, MCU_BSP_UART6_RS485_CTRL_GPIO_PIN, ~MCU_BSP_UART6_RS485_CTRL_GPIO_PIN);
}
BSP_IntVectSet((CPU_INT08U)BSP_INT_ID_UART6, (CPU_FNCT_VOID)McuBspUart6IntHandler);
BSP_IntEn(BSP_INT_ID_UART6);
IntEnable(INT_UART6);
IntPrioritySet(INT_UART6, 3 << 5);
UARTIntEnable(UART6_BASE, UART_INT_RX | UART_INT_RT);
ui32Status = UARTIntStatus(UART6_BASE, true);
UARTIntClear(UART6_BASE, ui32Status);
while(0 <= UARTCharGetNonBlocking(UART6_BASE));
} else if (UartId == MCU_BSP_UART7) {
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART7);
SysCtlPeripheralEnable(MCU_BSP_UART7_RX_GPIO_CLK);
SysCtlPeripheralEnable(MCU_BSP_UART7_TX_GPIO_CLK);
GPIOPinConfigure(MCU_BSP_UART7_RX_GPIO_CONF);
GPIOPinConfigure(MCU_BSP_UART7_TX_GPIO_CONF);
GPIOPinTypeUART(MCU_BSP_UART7_RX_GPIO, MCU_BSP_UART7_RX_GPIO_PIN);
GPIOPinTypeUART(MCU_BSP_UART7_TX_GPIO, MCU_BSP_UART7_TX_GPIO_PIN);
UARTConfigSetExpClk(UART7_BASE, SysFreqGet(), gMcuBspUartObj[UartId].BandRate,
((gMcuBspUartObj[UartId].DataBit) | (gMcuBspUartObj[UartId].StopBit) |
(gMcuBspUartObj[UartId].CheckBit)));
if (gMcuBspUartObj[UartId].Mode == MCU_BSP_UART_RS485_TYPE) {
SysCtlPeripheralEnable(MCU_BSP_UART7_RS485_CTRL_GPIO_CLK);
GPIODirModeSet(MCU_BSP_UART7_RS485_CTRL_GPIO, MCU_BSP_UART7_RS485_CTRL_GPIO_PIN, GPIO_DIR_MODE_OUT);
GPIOPadConfigSet(MCU_BSP_UART7_RS485_CTRL_GPIO, MCU_BSP_UART7_RS485_CTRL_GPIO_PIN, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_WAKE_LOW);
GPIOPinWrite(MCU_BSP_UART7_RS485_CTRL_GPIO, MCU_BSP_UART7_RS485_CTRL_GPIO_PIN, ~MCU_BSP_UART7_RS485_CTRL_GPIO_PIN);
}
BSP_IntVectSet((CPU_INT08U)BSP_INT_ID_UART7, (CPU_FNCT_VOID)McuBspUart7IntHandler);
BSP_IntEn(BSP_INT_ID_UART7);
IntEnable(INT_UART7);
IntPrioritySet(INT_UART7, 3 << 5);
UARTIntEnable(UART7_BASE, UART_INT_RX | UART_INT_RT);
ui32Status = UARTIntStatus(UART7_BASE, true);
UARTIntClear(UART7_BASE, ui32Status);
while(0 <= UARTCharGetNonBlocking(UART7_BASE));
}
gMcuBspUartObj[UartId].Enable = MCU_BSP_UART_ON;
return 0;
}
/* 串口发送函数 */
int McuBspUartSendData(uint8_t UartId, uint8_t *Data, uint32_t DataLen)
{
uint32_t i = 0;
CPU_SR_ALLOC();
if (UartId >= MCU_BSP_UART_ALL_NUM) {
return -1;
}
if (gMcuBspUartObj[UartId].Enable != MCU_BSP_UART_ON) {
return -1;
}
while (gMcuBspUartObj[UartId].Txbusy == MCU_BSP_UART_BUSY) {
}
gMcuBspUartObj[UartId].Txbusy = MCU_BSP_UART_BUSY;
OS_ENTER_CRITICAL();
if (UartId == MCU_BSP_UART0) {
if (gMcuBspUartObj[UartId].Mode == MCU_BSP_UART_RS485_TYPE) {
GPIOPinWrite(MCU_BSP_UART0_RS485_CTRL_GPIO, MCU_BSP_UART0_RS485_CTRL_GPIO_PIN, MCU_BSP_UART0_RS485_CTRL_GPIO_PIN);
}
for (; i < DataLen; i++) {
UARTCharPut(UART0_BASE, Data[i]);
}
while (UARTBusy(UART0_BASE)) {
}
if (gMcuBspUartObj[UartId].Mode == MCU_BSP_UART_RS485_TYPE) {
GPIOPinWrite(MCU_BSP_UART0_RS485_CTRL_GPIO, MCU_BSP_UART0_RS485_CTRL_GPIO_PIN, ~MCU_BSP_UART0_RS485_CTRL_GPIO_PIN);
}
} else if (UartId == MCU_BSP_UART1) {
if (gMcuBspUartObj[UartId].Mode == MCU_BSP_UART_RS485_TYPE) {
GPIOPinWrite(MCU_BSP_UART1_RS485_CTRL_GPIO, MCU_BSP_UART1_RS485_CTRL_GPIO_PIN, MCU_BSP_UART1_RS485_CTRL_GPIO_PIN);
}
for (; i < DataLen; i++) {
UARTCharPut(UART1_BASE, Data[i]);
}
while (UARTBusy(UART1_BASE)) {
}
if (gMcuBspUartObj[UartId].Mode == MCU_BSP_UART_RS485_TYPE) {
GPIOPinWrite(MCU_BSP_UART1_RS485_CTRL_GPIO, MCU_BSP_UART1_RS485_CTRL_GPIO_PIN, ~MCU_BSP_UART1_RS485_CTRL_GPIO_PIN);
}
} else if (UartId == MCU_BSP_UART2) {
if (gMcuBspUartObj[UartId].Mode == MCU_BSP_UART_RS485_TYPE) {
GPIOPinWrite(MCU_BSP_UART2_RS485_CTRL_GPIO, MCU_BSP_UART2_RS485_CTRL_GPIO_PIN, MCU_BSP_UART2_RS485_CTRL_GPIO_PIN);
}
for (; i < DataLen; i++) {
UARTCharPut(UART2_BASE, Data[i]);
}
while (UARTBusy(UART2_BASE)) {
}
if (gMcuBspUartObj[UartId].Mode == MCU_BSP_UART_RS485_TYPE) {
GPIOPinWrite(MCU_BSP_UART2_RS485_CTRL_GPIO, MCU_BSP_UART2_RS485_CTRL_GPIO_PIN, ~MCU_BSP_UART2_RS485_CTRL_GPIO_PIN);
}
} else if (UartId == MCU_BSP_UART3) {
if (gMcuBspUartObj[UartId].Mode == MCU_BSP_UART_RS485_TYPE) {
GPIOPinWrite(MCU_BSP_UART3_RS485_CTRL_GPIO, MCU_BSP_UART3_RS485_CTRL_GPIO_PIN, MCU_BSP_UART3_RS485_CTRL_GPIO_PIN);
}
for (; i < DataLen; i++) {
UARTCharPut(UART3_BASE, Data[i]);
}
while (UARTBusy(UART3_BASE)) {
}
if (gMcuBspUartObj[UartId].Mode == MCU_BSP_UART_RS485_TYPE) {
GPIOPinWrite(MCU_BSP_UART3_RS485_CTRL_GPIO, MCU_BSP_UART3_RS485_CTRL_GPIO_PIN, ~MCU_BSP_UART3_RS485_CTRL_GPIO_PIN);
}
} else if (UartId == MCU_BSP_UART4) {
if (gMcuBspUartObj[UartId].Mode == MCU_BSP_UART_RS485_TYPE) {
GPIOPinWrite(MCU_BSP_UART4_RS485_CTRL_GPIO, MCU_BSP_UART4_RS485_CTRL_GPIO_PIN, MCU_BSP_UART4_RS485_CTRL_GPIO_PIN);
}
for (; i < DataLen; i++) {
UARTCharPut(UART4_BASE, Data[i]);
}
while (UARTBusy(UART4_BASE)) {
}
if (gMcuBspUartObj[UartId].Mode == MCU_BSP_UART_RS485_TYPE) {
GPIOPinWrite(MCU_BSP_UART4_RS485_CTRL_GPIO, MCU_BSP_UART4_RS485_CTRL_GPIO_PIN, ~MCU_BSP_UART4_RS485_CTRL_GPIO_PIN);
}
} else if (UartId == MCU_BSP_UART5) {
if (gMcuBspUartObj[UartId].Mode == MCU_BSP_UART_RS485_TYPE) {
GPIOPinWrite(MCU_BSP_UART5_RS485_CTRL_GPIO, MCU_BSP_UART5_RS485_CTRL_GPIO_PIN, MCU_BSP_UART5_RS485_CTRL_GPIO_PIN);
}
for (; i < DataLen; i++) {
UARTCharPut(UART5_BASE, Data[i]);
}
while (UARTBusy(UART5_BASE)) {
}
if (gMcuBspUartObj[UartId].Mode == MCU_BSP_UART_RS485_TYPE) {
GPIOPinWrite(MCU_BSP_UART5_RS485_CTRL_GPIO, MCU_BSP_UART5_RS485_CTRL_GPIO_PIN, ~MCU_BSP_UART5_RS485_CTRL_GPIO_PIN);
}
} else if (UartId == MCU_BSP_UART6) {
if (gMcuBspUartObj[UartId].Mode == MCU_BSP_UART_RS485_TYPE) {
GPIOPinWrite(MCU_BSP_UART6_RS485_CTRL_GPIO, MCU_BSP_UART6_RS485_CTRL_GPIO_PIN, MCU_BSP_UART6_RS485_CTRL_GPIO_PIN);
}
for (; i < DataLen; i++) {
UARTCharPut(UART6_BASE, Data[i]);
}
while (UARTBusy(UART6_BASE)) {
}
if (gMcuBspUartObj[UartId].Mode == MCU_BSP_UART_RS485_TYPE) {
GPIOPinWrite(MCU_BSP_UART6_RS485_CTRL_GPIO, MCU_BSP_UART6_RS485_CTRL_GPIO_PIN, ~MCU_BSP_UART6_RS485_CTRL_GPIO_PIN);
}
} else if (UartId == MCU_BSP_UART7) {
if (gMcuBspUartObj[UartId].Mode == MCU_BSP_UART_RS485_TYPE) {
GPIOPinWrite(MCU_BSP_UART7_RS485_CTRL_GPIO, MCU_BSP_UART7_RS485_CTRL_GPIO_PIN, MCU_BSP_UART7_RS485_CTRL_GPIO_PIN);
}
for (; i < DataLen; i++) {
UARTCharPut(UART7_BASE, Data[i]);
}
while (UARTBusy(UART7_BASE)) {
}
if (gMcuBspUartObj[UartId].Mode == MCU_BSP_UART_RS485_TYPE) {
GPIOPinWrite(MCU_BSP_UART7_RS485_CTRL_GPIO, MCU_BSP_UART7_RS485_CTRL_GPIO_PIN, ~MCU_BSP_UART7_RS485_CTRL_GPIO_PIN);
}
}
OS_EXIT_CRITICAL();
gMcuBspUartObj[UartId].Txbusy = MCU_BSP_UART_NOBUSY;
return 0;
}
int McuBspUartStartRecv(uint8_t UartId, UART_RECV_CALLBACK RecvCallback)
{
if ((UartId >= MCU_BSP_UART_ALL_NUM) || (RecvCallback == NULL)) {
return -1;
}
if (gMcuBspUartObj[UartId].Enable != MCU_BSP_UART_ON) {
return -1;
}
while (gMcuBspUartObj[UartId].Rxbusy == MCU_BSP_UART_BUSY) {
}
gMcuBspUartObj[UartId].Rxbusy = MCU_BSP_UART_BUSY;
switch (UartId) {
case MCU_BSP_UART0:
gMcuBspUart0RecvCallback = RecvCallback;
break;
case MCU_BSP_UART1:
gMcuBspUart1RecvCallback = RecvCallback;
break;
case MCU_BSP_UART2:
gMcuBspUart2RecvCallback = RecvCallback;
break;
case MCU_BSP_UART3:
gMcuBspUart3RecvCallback = RecvCallback;
break;
case MCU_BSP_UART4:
gMcuBspUart4RecvCallback = RecvCallback;
break;
case MCU_BSP_UART5:
gMcuBspUart5RecvCallback = RecvCallback;
break;
case MCU_BSP_UART6:
gMcuBspUart6RecvCallback = RecvCallback;
break;
case MCU_BSP_UART7:
gMcuBspUart7RecvCallback = RecvCallback;
break;
default:
return -1;
}
return 0;
}
int McuBspUartEndRecv(uint8_t UartId)
{
if (UartId >= MCU_BSP_UART_ALL_NUM) {
return -1;
}
if (gMcuBspUartObj[UartId].Enable != MCU_BSP_UART_ON) {
return -1;
}
switch (UartId) {
case MCU_BSP_UART0:
gMcuBspUart0RecvCallback = NULL;
break;
case MCU_BSP_UART1:
gMcuBspUart1RecvCallback = NULL;
break;
case MCU_BSP_UART2:
gMcuBspUart2RecvCallback = NULL;
break;
case MCU_BSP_UART3:
gMcuBspUart3RecvCallback = NULL;
break;
case MCU_BSP_UART4:
gMcuBspUart4RecvCallback = NULL;
break;
case MCU_BSP_UART5:
gMcuBspUart5RecvCallback = NULL;
break;
case MCU_BSP_UART6:
gMcuBspUart6RecvCallback = NULL;
break;
case MCU_BSP_UART7:
gMcuBspUart7RecvCallback = NULL;
break;
default:
return -1;
}
gMcuBspUartObj[UartId].Rxbusy = MCU_BSP_UART_NOBUSY;
return 0;
}
/* 修改配置文件 */
int McuBspUartModifyConf(uint8_t UartId, uint32_t BandRate, uint32_t DataBit, uint32_t StopBit, uint32_t CheckBit)
{
if (UartId >= MCU_BSP_UART_ALL_NUM) {
return -1;
}
if ((BandRate != MCU_BSP_UART_BANDRATE_4800) && (BandRate != MCU_BSP_UART_BANDRATE_9600) && (BandRate != MCU_BSP_UART_BANDRATE_14400) &&
(BandRate != MCU_BSP_UART_BANDRATE_19200) && (BandRate != MCU_BSP_UART_BANDRATE_38400) && (BandRate != MCU_BSP_UART_BANDRATE_56000) &&
(BandRate != MCU_BSP_UART_BANDRATE_57600) && (BandRate != MCU_BSP_UART_BANDRATE_115200)) {
return -1;
} else {
gMcuBspUartObj[UartId].BandRate = BandRate;
}
switch (DataBit) {
case MCU_BSP_UART_DATABIT_5:
gMcuBspUartObj[UartId].DataBit = UART_CONFIG_WLEN_5;
break;
case MCU_BSP_UART_DATABIT_6:
gMcuBspUartObj[UartId].DataBit = UART_CONFIG_WLEN_6;
break;
case MCU_BSP_UART_DATABIT_7:
gMcuBspUartObj[UartId].DataBit = UART_CONFIG_WLEN_7;
break;
case MCU_BSP_UART_DATABIT_8:
gMcuBspUartObj[UartId].DataBit = UART_CONFIG_WLEN_8;
break;
default:
return -1;
}
switch (StopBit) {
case MCU_BSP_UART_STOPBIT_ONE:
gMcuBspUartObj[UartId].StopBit = UART_CONFIG_STOP_ONE;
break;
case MCU_BSP_UART_STOPBIT_TWO:
gMcuBspUartObj[UartId].StopBit = UART_CONFIG_STOP_ONE;
break;
default:
return -1;
}
switch (CheckBit) {
case MCU_BSP_UART_CHECKBIT_NONE:
gMcuBspUartObj[UartId].CheckBit = UART_CONFIG_PAR_NONE;
break;
case MCU_BSP_UART_CHECKBIT_EVEN:
gMcuBspUartObj[UartId].CheckBit = UART_CONFIG_PAR_EVEN;
break;
case MCU_BSP_UART_CHECKBIT_ODD:
gMcuBspUartObj[UartId].CheckBit = UART_CONFIG_PAR_ODD;
break;
default:
return -1;
}
while ((gMcuBspUartObj[UartId].Rxbusy == 1) || (gMcuBspUartObj[UartId].Txbusy == 1)) {
}
gMcuBspUartObj[UartId].Enable = MCU_BSP_UART_OFF;
if (UartId == MCU_BSP_UART0) {
UARTConfigSetExpClk(UART0_BASE, SysFreqGet(), gMcuBspUartObj[UartId].BandRate,
((gMcuBspUartObj[UartId].DataBit) | (gMcuBspUartObj[UartId].StopBit) |
(gMcuBspUartObj[UartId].CheckBit)));
} else if (UartId == MCU_BSP_UART1) {
UARTConfigSetExpClk(UART1_BASE, SysFreqGet(), gMcuBspUartObj[UartId].BandRate,
((gMcuBspUartObj[UartId].DataBit) | (gMcuBspUartObj[UartId].StopBit) |
(gMcuBspUartObj[UartId].CheckBit)));
} else if (UartId == MCU_BSP_UART2) {
UARTConfigSetExpClk(UART2_BASE, SysFreqGet(), gMcuBspUartObj[UartId].BandRate,
((gMcuBspUartObj[UartId].DataBit) | (gMcuBspUartObj[UartId].StopBit) |
(gMcuBspUartObj[UartId].CheckBit)));
} else if (UartId == MCU_BSP_UART3) {
UARTConfigSetExpClk(UART3_BASE, SysFreqGet(), gMcuBspUartObj[UartId].BandRate,
((gMcuBspUartObj[UartId].DataBit) | (gMcuBspUartObj[UartId].StopBit) |
(gMcuBspUartObj[UartId].CheckBit)));
} else if (UartId == MCU_BSP_UART4) {
UARTConfigSetExpClk(UART4_BASE, SysFreqGet(), gMcuBspUartObj[UartId].BandRate,
((gMcuBspUartObj[UartId].DataBit) | (gMcuBspUartObj[UartId].StopBit) |
(gMcuBspUartObj[UartId].CheckBit)));
} else if (UartId == MCU_BSP_UART5) {
UARTConfigSetExpClk(UART5_BASE, SysFreqGet(), gMcuBspUartObj[UartId].BandRate,
((gMcuBspUartObj[UartId].DataBit) | (gMcuBspUartObj[UartId].StopBit) |
(gMcuBspUartObj[UartId].CheckBit)));
} else if (UartId == MCU_BSP_UART6) {
UARTConfigSetExpClk(UART6_BASE, SysFreqGet(), gMcuBspUartObj[UartId].BandRate,
((gMcuBspUartObj[UartId].DataBit) | (gMcuBspUartObj[UartId].StopBit) |
(gMcuBspUartObj[UartId].CheckBit)));
} else if (UartId == MCU_BSP_UART7) {
UARTConfigSetExpClk(UART7_BASE, SysFreqGet(), gMcuBspUartObj[UartId].BandRate,
((gMcuBspUartObj[UartId].DataBit) | (gMcuBspUartObj[UartId].StopBit) |
(gMcuBspUartObj[UartId].CheckBit)));
}
gMcuBspUartObj[UartId].Enable = MCU_BSP_UART_ON;
return 0;
}
static void McuBspUart0IntHandler(void)
{
uint32_t ui32Status;
CPU_SR_ALLOC();
OSIntEnter(); //通知系统进入OS中断
OS_ENTER_CRITICAL();
ui32Status = UARTIntStatus(UART0_BASE, true);
UARTIntClear(UART0_BASE, ui32Status);
while (UARTCharsAvail(UART0_BASE)) {
gMcuBspUartRecvData0 = (uint8_t)UARTCharGetNonBlocking(UART0_BASE);
if ((gMcuBspUartObj[MCU_BSP_UART0].Rxbusy == 1) && (gMcuBspUart0RecvCallback != NULL)) {
gMcuBspUart0RecvCallback(gMcuBspUartRecvData0);
}
}
OS_EXIT_CRITICAL();
OSIntExit();
}
static void McuBspUart1IntHandler(void)
{
uint32_t ui32Status;
CPU_SR_ALLOC();
OSIntEnter(); //通知系统进入OS中断
OS_ENTER_CRITICAL();
ui32Status = UARTIntStatus(UART1_BASE, true);
UARTIntClear(UART1_BASE, ui32Status);
while (UARTCharsAvail(UART1_BASE)) {
gMcuBspUartRecvData1 = (uint8_t)UARTCharGetNonBlocking(UART1_BASE);
if ((gMcuBspUartObj[MCU_BSP_UART1].Rxbusy == 1) && (gMcuBspUart1RecvCallback != NULL)) {
gMcuBspUart1RecvCallback(gMcuBspUartRecvData1);
}
}
OS_EXIT_CRITICAL();
OSIntExit();
}
static void McuBspUart2IntHandler(void)
{
uint32_t ui32Status;
CPU_SR_ALLOC();
OSIntEnter(); //通知系统进入OS中断
OS_ENTER_CRITICAL();
ui32Status = UARTIntStatus(UART2_BASE, true);
UARTIntClear(UART2_BASE, ui32Status);
while (UARTCharsAvail(UART2_BASE)) {
gMcuBspUartRecvData2 = (uint8_t)UARTCharGetNonBlocking(UART2_BASE);
if ((gMcuBspUartObj[MCU_BSP_UART2].Rxbusy == 1) && (gMcuBspUart2RecvCallback != NULL)) {
gMcuBspUart2RecvCallback(gMcuBspUartRecvData2);
}
}
OS_EXIT_CRITICAL();
OSIntExit();
}
static void McuBspUart3IntHandler(void)
{
uint32_t ui32Status;
CPU_SR_ALLOC();
OSIntEnter(); //通知系统进入OS中断
OS_ENTER_CRITICAL();
ui32Status = UARTIntStatus(UART3_BASE, true);
UARTIntClear(UART3_BASE, ui32Status);
while (UARTCharsAvail(UART3_BASE)) {
gMcuBspUartRecvData3 = (uint8_t)UARTCharGetNonBlocking(UART3_BASE);
if ((gMcuBspUartObj[MCU_BSP_UART3].Rxbusy == 1) && (gMcuBspUart3RecvCallback != NULL)) {
gMcuBspUart3RecvCallback(gMcuBspUartRecvData3);
}
}
OS_EXIT_CRITICAL();
OSIntExit();
}
static void McuBspUart4IntHandler(void)
{
uint32_t ui32Status;
CPU_SR_ALLOC();
OSIntEnter(); //通知系统进入OS中断
OS_ENTER_CRITICAL();
ui32Status = UARTIntStatus(UART4_BASE, true);
UARTIntClear(UART4_BASE, ui32Status);
while (UARTCharsAvail(UART4_BASE)) {
gMcuBspUartRecvData4 = (uint8_t)UARTCharGetNonBlocking(UART4_BASE);
if ((gMcuBspUartObj[MCU_BSP_UART4].Rxbusy == 1) && (gMcuBspUart4RecvCallback != NULL)) {
gMcuBspUart4RecvCallback(gMcuBspUartRecvData4);
}
}
OS_EXIT_CRITICAL();
OSIntExit();
}
static void McuBspUart5IntHandler(void)
{
uint32_t ui32Status;
CPU_SR_ALLOC();
OSIntEnter(); //通知系统进入OS中断
OS_ENTER_CRITICAL();
ui32Status = UARTIntStatus(UART5_BASE, true);
UARTIntClear(UART5_BASE, ui32Status);
while (UARTCharsAvail(UART5_BASE)) {
gMcuBspUartRecvData5 = (uint8_t)UARTCharGetNonBlocking(UART5_BASE);
if ((gMcuBspUartObj[MCU_BSP_UART5].Rxbusy == 1) && (gMcuBspUart5RecvCallback != NULL)) {
gMcuBspUart5RecvCallback(gMcuBspUartRecvData5);
}
}
OS_EXIT_CRITICAL();
OSIntExit();
}
static void McuBspUart6IntHandler(void)
{
uint32_t ui32Status;
CPU_SR_ALLOC();
OSIntEnter(); //通知系统进入OS中断
OS_ENTER_CRITICAL();
ui32Status = UARTIntStatus(UART6_BASE, true);
UARTIntClear(UART6_BASE, ui32Status);
while (UARTCharsAvail(UART6_BASE)) {
gMcuBspUartRecvData6 = (uint8_t)UARTCharGetNonBlocking(UART6_BASE);
if ((gMcuBspUartObj[MCU_BSP_UART6].Rxbusy == 1) && (gMcuBspUart6RecvCallback != NULL)) {
gMcuBspUart6RecvCallback(gMcuBspUartRecvData6);
}
}
OS_EXIT_CRITICAL();
OSIntExit();
}
static void McuBspUart7IntHandler(void)
{
uint32_t ui32Status;
CPU_SR_ALLOC();
OSIntEnter(); //通知系统进入OS中断
OS_ENTER_CRITICAL();
ui32Status = UARTIntStatus(UART7_BASE, true);
UARTIntClear(UART7_BASE, ui32Status);
while (UARTCharsAvail(UART7_BASE)) {
gMcuBspUartRecvData7 = (uint8_t)UARTCharGetNonBlocking(UART7_BASE);
if ((gMcuBspUartObj[MCU_BSP_UART7].Rxbusy == 1) && (gMcuBspUart7RecvCallback != NULL)) {
gMcuBspUart7RecvCallback(gMcuBspUartRecvData7);
}
}
OS_EXIT_CRITICAL();
OSIntExit();
}