📄 uartutil.c
字号:
/************************************************************************************
* Includes the UART Utils.
*
* (c) Copyright 2008, Freescale Semiconductor, Inc. All rights reserved.
*
* No part of this document must be reproduced in any form - including copied,
* transcribed, printed or by any electronic means - without specific written
* permission from Freescale.
*
* Last Inspected:
* Last Tested:
*
************************************************************************************/
#include "../../PLM/Interface/EmbeddedTypes.h"
#include "../../PLM/LibInterface/Interrupt.h"
#include "../../SMAC/Interface/GlobalDefs.h"
#include "UartUtil.h"
/******************************************************************************/
/******************************************************************************/
/************************************************************************************
*************************************************************************************
* Private macros
*************************************************************************************
************************************************************************************/
/************************************************************************************
*************************************************************************************
* Private prototypes
*************************************************************************************/
void UartEventRead1(UartReadCallbackArgs_t* args);
void UartEventWrite2(UartWriteCallbackArgs_t* args);
void UartEventRead2(UartReadCallbackArgs_t* args);
void UartEventWrite1(UartWriteCallbackArgs_t* args);
void GpioUart1Init(void);
void GpioUart2Init(void);
/************************************************************************************
*************************************************************************************
* Private type definitions
*************************************************************************************
************************************************************************************/
/************************************************************************************
*************************************************************************************
* Public memory declarations
*************************************************************************************
************************************************************************************/
/************************************************************************************
*************************************************************************************
* Private memory declarations
*************************************************************************************
************************************************************************************/
UartReadStatus_t gu8SCIStatus = gUartReadStatusComplete_c;
uint8_t gu8SCIDataFlag = FALSE;
uint16_t gu16SCINumOfBytes = 0;
/************************************************************************************
*************************************************************************************
* Public functions
*************************************************************************************
************************************************************************************/
/************************************************************************************
* Uart_Init
*
* Initializate the Uart module.
*************************************************************************************/
void Uart_Init(void)
{
UartConfig_t pConfig;
UartCallbackFunctions_t pCallback;
#if gUart_PortDefault_d == UART_1
//initialize GPIOs for UART1 and UART2
GpioUart1Init();
//configure the uart parameters
pConfig.UartParity = gUartParityNone_c;
pConfig.UartStopBits = gUartStopBits1_c;
pConfig.UartBaudrate = gUartDefaultBaud_c;
pConfig.UartFlowControlEnabled = gUart1_EnableHWFlowControl_d;
pConfig.UartRTSActiveHigh = FALSE;
//mount the interrupts corresponding to UART driver
IntAssignHandler(gUart1Int_c, (IntHandlerFunc_t)UartIsr1);
ITC_SetPriority(gUart1Int_c, gItcNormalPriority_c);
//enable the interrupts corresponding to UART driver
ITC_EnableInterrupt(gUart1Int_c);
//initialize the uart
UartOpen(UART_1,gPlatformClock_c);
UartSetConfig(UART_1, &pConfig);
#if gUart1_EnableHWFlowControl_d == TRUE
UartSetCTSThreshold(UART_1, gUart_RxFlowControlSkew_d);
#endif
//configure the Uart Rx and Tx Threshold
UartSetTransmitterThreshold(UART_1, 5);
UartSetReceiverThreshold(UART_1, 5);
//set pCallback functions
pCallback.pfUartWriteCallback = UartEventWrite1;
pCallback.pfUartReadCallback = UartEventRead1;
UartSetCallbackFunctions(UART_1, &pCallback);
#endif
#if gUart_PortDefault_d == UART_2
//initialize GPIOs for UART1 and UART2
GpioUart2Init();
//configure the uart parameters
pConfig.UartParity = gUartParityNone_c;
pConfig.UartStopBits = gUartStopBits1_c;
pConfig.UartBaudrate = gUartDefaultBaud_c;
pConfig.UartFlowControlEnabled = gUart2_EnableHWFlowControl_d;
//mount the interrupts corresponding to UART driver
IntAssignHandler(gUart2Int_c, (IntHandlerFunc_t)UartIsr2);
ITC_SetPriority(gUart2Int_c, gItcNormalPriority_c);
//enable the interrupts corresponding to UART driver
ITC_EnableInterrupt(gUart2Int_c);
//initialize the uart
UartOpen(UART_2,PLATFORM_CLOCK);
UartSetConfig(UART_2,&pConfig);
#if gUart2_EnableHWFlowControl_d == TRUE
UartSetCTSThreshold(UART_2, gUart_RxFlowControlSkew_d);
#endif
//configure the Uart Rx and Tx Threshold
UartSetTransmitterThreshold(UART_2,5);
UartSetReceiverThreshold(UART_2,5);
//set pCallback functions
pCallback.pfUartWriteCallback = UartEventWrite2;
pCallback.pfUartReadCallback = UartEventRead2;
UartSetCallbackFunctions(UART_2,&pCallback);
#endif /* gUart2_Enabled_d */
// global enable interrupts in AITC driver
IntEnableIRQ();
}
/************************************************************************************
* GpioUart1Init
*
* This function initializate the gpio磗 for the Uart1 module
*************************************************************************************/
void GpioUart1Init(void)
{
register uint32_t tmpReg;
GPIO.PuSelLo |= (GPIO_UART1_RTS_bit | GPIO_UART1_RX_bit); // Pull-up select: UP type
GPIO.PuEnLo |= (GPIO_UART1_RTS_bit | GPIO_UART1_RX_bit); // Pull-up enable
GPIO.InputDataSelLo &= ~(GPIO_UART1_RTS_bit | GPIO_UART1_RX_bit); // read from pads
GPIO.DirResetLo = (GPIO_UART1_RTS_bit | GPIO_UART1_RX_bit); // inputs
GPIO.DirSetLo = (GPIO_UART1_CTS_bit | GPIO_UART1_TX_bit); // outputs
tmpReg = GPIO.FuncSel0 & ~((FN_MASK << GPIO_UART1_RX_fnpos) | (FN_MASK << GPIO_UART1_TX_fnpos));
GPIO.FuncSel0 = tmpReg | ((FN_ALT << GPIO_UART1_RX_fnpos) | (FN_ALT << GPIO_UART1_TX_fnpos));
tmpReg = GPIO.FuncSel1 & ~((FN_MASK << GPIO_UART1_CTS_fnpos) | (FN_MASK << GPIO_UART1_RTS_fnpos));
GPIO.FuncSel1 = tmpReg | ((FN_ALT << GPIO_UART1_CTS_fnpos) | (FN_ALT << GPIO_UART1_RTS_fnpos));
}
/************************************************************************************
* GpioUart2Init
*
* This function initializate the gpio磗 for the Uart2 module
*************************************************************************************/
void GpioUart2Init(void)
{
register uint32_t tmpReg;
GPIO.PuSelLo |= (GPIO_UART2_RTS_bit | GPIO_UART2_RX_bit); // Pull-up select: UP type
GPIO.PuEnLo |= (GPIO_UART2_RTS_bit | GPIO_UART2_RX_bit); // Pull-up enable
GPIO.InputDataSelLo &= ~(GPIO_UART2_RTS_bit | GPIO_UART2_RX_bit); // read from pads
GPIO.DirResetLo = (GPIO_UART2_RTS_bit | GPIO_UART2_RX_bit); // inputs
GPIO.DirSetLo = (GPIO_UART2_CTS_bit | GPIO_UART2_TX_bit); // outputs
tmpReg = GPIO.FuncSel1 & ~((FN_MASK << GPIO_UART2_CTS_fnpos) | (FN_MASK << GPIO_UART2_RTS_fnpos)\
| (FN_MASK << GPIO_UART2_RX_fnpos) | (FN_MASK << GPIO_UART2_TX_fnpos));
GPIO.FuncSel1 = tmpReg | ((FN_ALT << GPIO_UART2_CTS_fnpos) | (FN_ALT << GPIO_UART2_RTS_fnpos)\
| (FN_ALT << GPIO_UART2_RX_fnpos) | (FN_ALT << GPIO_UART2_TX_fnpos));
}
/*******************************************************************************
* UartEventRead1
*
* Callabck function for the reception process in the Uart1
*******************************************************************************/
void UartEventRead1(UartReadCallbackArgs_t* args)
{
gu8SCIDataFlag = TRUE;
gu16SCINumOfBytes = args->UartNumberBytesReceived;
gu8SCIStatus = args->UartStatus;
}
/*******************************************************************************
* UartEventWrite1
*
* Callback function for the transmission interruption in the Uart1.
*******************************************************************************/
void UartEventWrite1(UartWriteCallbackArgs_t* args)
{
}
/*******************************************************************************
* UartEventRead12
*
* Callabck function for the reception process in the Uart2
*******************************************************************************/
void UartEventRead2(UartReadCallbackArgs_t* args)
{
gu8SCIDataFlag = TRUE;
}
/*******************************************************************************
* UartEventWrite2
*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -