?? uart_ini.h
字號:
#include "com_cfg.h"
#include "config.h"
#include "UART_IRQ.h"
#define UARTBAUD 4800 // 未考慮小數分頻器,所預期得到的波特率
#define UART0BAUD 38400 // 未考慮小數分頻器,所預期得到的波特率
#define FDR 0 // 若該宏為0則不會啟用小數分頻器
/*********************************************************************************************************
** 函數名稱 :ClrRcvFIFO
** 函數功能 :讀空接收FIFO
** 入口參數 :無
** 出口參數 :無
*********************************************************************************************************/
void ClrU0RcvFIFO(void)
{
volatile uint32 i, temp = 0;
for (i = 0; i < 8; i++)
{
if ((U0LSR & 0x01) == 0x01)
{
temp = U0RBR; // 讀空接收FIFO
}
else
{
break;
}
}
}
void ClrU1RcvFIFO(void)
{
volatile uint32 i, temp = 0;
for (i = 0; i < 8; i++)
{
if ((U1LSR & 0x01) == 0x01)
{
temp = U1RBR; // 讀空接收FIFO
}
else
{
break;
}
}
}
void ClrU2RcvFIFO(void)
{
volatile uint32 i, temp = 0;
for (i = 0; i < 8; i++)
{
if ((U2LSR & 0x01) == 0x01)
{
temp = U2RBR; // 讀空接收FIFO
}
else
{
break;
}
}
}
void ClrU3RcvFIFO(void)
{
volatile uint32 i, temp = 0;
for (i = 0; i < 8; i++)
{
if ((U3LSR & 0x01) == 0x01)
{
temp = U3RBR; // 讀空接收FIFO
}
else
{
break;
}
}
}
/*********************************************************************************************************
** 函數名稱:BaudGet
** 函數功能:計算當前的實際波特率
** 入口參數:無
** 出口參數:RealBaud 當前的實際波特率
**********************************************************************************************************/
/*
uint32 BaudGet(void)
{
uint16 dll, dlm;
uint32 Realbaud, div, mul;
// 讀取除數鎖存器和小數波特率發生器的值
U0LCR = 0x83; // DLAB=1
dlm = U0DLM;
dll = U0DLL;
div = U0FDR & 0x0F;
mul = (U0FDR >> 4) & 0x0F;
U0LCR = 0x03;
// 考慮進小數分頻寄存器,計算實際波特率
Realbaud = mul * Fpclk / ( 16 * (256 * dlm + dll) * (mul + div) );
return (Realbaud);
}
*/
/*********************************************************************************************************
** 函數名稱:UART0_Ini
** 函數功能:按默認值初始化串口0的引腳和通訊參數。設置為8位數據位,1位停止位,無奇偶校驗,波特率。
** 入口參數:無
** 出口參數:無
**********************************************************************************************************/
void UART0_Ini(void)
{
uint32 Fdiv = 0;
// uint32 bak = 0;
/* 在PCONP里啟用UART0 */
PCONP |= 1 << 3; // 使能UART0
/* 初始化引腳 */
PINSEL0 |= (0x01 << 4) | (0x01 << 6); // 設置P0.2和P0.3連接到UART0
/* 初始化串口通訊參數 */
U0LCR = 0x83; // 設置為8位數據位,1位停止位,無奇偶校驗,DLAB=1, 允許設置波特率
Fdiv = (Fpclk / 16) / UART0BAUD; // 設置波特率
U0DLM = Fdiv / 256;
U0DLL = Fdiv % 256;
U0LCR = 0x03; // 令DLAB位為0
/* 設置FIFO */
U0FCR = 0x05; // 使能FIFO,并設置FIFO觸發深度大小為1個字節
/* 清除接收FIFO內的數據 */
ClrU0RcvFIFO();
/* 初始化UART0 VIC 中斷接口 */
VICIntEnClr |= 1 << UART0_INT;
VICVectPri6 = 0x05;
VICVectAddr6 = (uint32)IRQ_UART0Recv;
// VICVectAddr6 = (uint32)IRQ_UART0Send;
VICIntEnable |= 1 << UART0_INT;
IRQEnable();
/* 以下語句設置小數分頻系數為0.5 */
#if FDR
U0FDR = (1 << 0) | // DIVADDVAL=1
(1 << 4); // MULVAL=1
#endif
}
/*********************************************************************************************************
** 函數名稱:UART1_IniDft
** 函數功能:按默認值初始化串口1的引腳和通訊參數。設置為8位數據位,1位停止位,無奇偶校驗,波特率。
** 入口參數:無
** 出口參數:無
**********************************************************************************************************/
void UART1_Ini(void)
{
uint32 Fdiv = 0;
PCONP |= (1 << 4); // 打開UART1
/* 初始化相關的I/O口 */
// PINSEL4 = (0x02 << 0) | (0x02 << 2); // 設置P2.0和P2.1管腳連接到UART1
PINSEL0 |= 0x01 << 30; // 設置P0.15和P0.16管腳連接到UART1
PINSEL1 |= 0x01 << 0;
/* 初始化串口通訊參數 */
U1LCR = 0x83; // 設置為8位數據位,1位停止位,無奇偶校驗,DLAB=1,允許設置波特率
Fdiv = (Fpclk / 16) / UARTBAUD; // 設置波特率
U1DLM = Fdiv / 256;
U1DLL = Fdiv % 256;
U1LCR = 0x03; // 令DLAB位為0
/* 設置FIFO */
U1FCR = 0x05; // 使能FIFO,并設置FIFO觸發深度大小為1個字節
// U1FCR = 0x85; // 使能FIFO,并設置FIFO觸發深度大小為8個字節
// U1FCR = 0x04; // 禁能FIFO,
/* 清除接收FIFO內的數據 */
ClrU1RcvFIFO();
/* 初始化UART1 VIC 中斷接口 */
VICIntEnClr |= 1 << UART1_INT;
VICVectPri7 = 0x06;
VICVectAddr7 = (uint32)IRQ_UART1Recv;
// VICVectAddr7 = (uint32)IRQ_UART1Send;
VICIntEnable |= 1 << UART1_INT;
IRQEnable();
// U1FCR &= ~0x07; // 禁用FIFO
// U1IER &= ~0x07; // 禁止UART產生中斷
/* 以下語句設置小數分頻系數為0.5 */
#if FDR
U1FDR = (1 << 0) | // DIVADDVAL=1
(1 << 4); // MULVAL=1
#endif
}
/*********************************************************************************************************
** 函數名稱:UART2_IniDft
** 函數功能:按默認值初始化串口2的引腳和通訊參數。設置為8位數據位,1位停止位,無奇偶校驗,波特率
** 入口參數:無
** 出口參數:無
**********************************************************************************************************/
void UART2_Ini(void)
{
uint32 Fdiv = 0;
PCONP |= (1 << 24); // 打開UART2
/* 初始化相關的I/O口 */
// PINSEL0 |= (0x01 << 20) | (0x01 << 22); // 設置P0.10和P0.11管腳連接到UART2
PINSEL0 = (PINSEL0 & 0xFF0FFFFF) | (0x05 << 20);
/* 初始化串口通訊參數 */
U2LCR = 0x83; // 設置為8位數據位,1位停止位,無奇偶校驗,DLAB=1,允許設置波特率
Fdiv = (Fpclk / 16) / UARTBAUD; // 設置波特率
U2DLM = Fdiv / 256;
U2DLL = Fdiv % 256;
U2LCR = 0x03; // 令DLAB位為0
/* 設置FIFO */
// U2FCR = 0x05; // 使能FIFO,并設置FIFO觸發深度大小為1個字節
U2FCR = 0x04; // 使能FIFO,并設置FIFO觸發深度大小為1個字節
/* 清除接收FIFO內的數據 */
ClrU2RcvFIFO();
/* 初始化UART1 VIC 中斷接口 */
VICIntEnClr |= 1 << UART2_INT;
VICVectPri28 = 0x06;
VICVectAddr28 = (uint32)IRQ_UART2Recv;
// VICVectAddr28 = (uint32)IRQ_UART2Send;
VICIntEnable |= 1 << UART2_INT;
IRQEnable();
// U1FCR &= ~0x07; // 禁用FIFO
// U1IER &= ~0x07; // 禁止UART產生中斷
/* 以下語句設置小數分頻系數為0.5 */
#if FDR
U2FDR = (1 << 0) | // DIVADDVAL=1
(1 << 4); // MULVAL=1
#endif
}
/*
void UART2_IniDft(void)
{
uint32 Fdiv = 0;
PCONP |= 1 << 24; // 打開UART2
// 初始化相關的I/O口
PINSEL0 = (0x01 << 20) | (0x01 << 22); // 設置P0.10和P0.11管腳連接到UART2
// 初始化串口通訊參數
U2LCR = 0x83; // 設置為8位數據位,1位停止位,無奇偶校驗,DLAB=1,允許設置波特率
Fdiv = (Fpclk / 16) / UARTBAUD; // 設置波特率
U2DLM = Fdiv / 256;
U2DLL = Fdiv % 256;
U2LCR = 0x03; // 令DLAB位為0
U2FCR &= ~0x07; // 禁用FIFO
U2IER &= ~0x07; // 禁止UART產生中斷
// 以下語句設置小數分頻系數為0.5
#if FDR
U2FDR = (1 << 0) | // DIVADDVAL=1
(1 << 4); // MULVAL=1
#endif
}
*/
/*********************************************************************************************************
** 函數名稱:UART3_IniDft
** 函數功能:按默認值初始化串口3的引腳和通訊參數。設置為8位數據位,1位停止位,無奇偶校驗,波特率
** 入口參數:無
** 出口參數:無
**********************************************************************************************************/
void UART3_Ini(void)
{
uint32 Fdiv = 0;
PCONP |= 1 << 25; // 打開UART3
/* 初始化相關的I/O口 */
// PINSEL0 = (0x02 << 0) | (0x02 << 2); // 設置P0.0和P0.1連接到UART3
PINSEL0 = (PINSEL0 & 0xFFFFFFF0) | (0x0A << 0);
/* 初始化串口通訊參數 */
U3LCR = 0x83; // 設置為8位數據位,1位停止位,無奇偶校驗,DLAB=1,允許設置波特率
Fdiv = (Fpclk / 16) / UARTBAUD; // 設置波特率
U3DLM = Fdiv / 256;
U3DLL = Fdiv % 256;
U3LCR = 0x03; // 令DLAB位為0
/* 設置FIFO */
// U3FCR = 0x05; // 使能FIFO,并設置FIFO觸發深度大小為1個字節
U3FCR = 0x04; // 使能FIFO,并設置FIFO觸發深度大小為1個字節
/* 清除接收FIFO內的數據 */
ClrU3RcvFIFO();
/* 初始化UART1 VIC 中斷接口 */
VICIntEnClr |= 1 << UART3_INT;
VICVectPri29 = 0x06;
VICVectAddr29 = (uint32)IRQ_UART3Recv;
// VICVectAddr29 = (uint32)IRQ_UART3Send;
VICIntEnable |= 1 << UART3_INT;
IRQEnable();
// U1FCR &= ~0x07; // 禁用FIFO
// U1IER &= ~0x07; // 禁止UART產生中斷
/* 以下語句設置小數分頻系數為0.5 */
#if FDR
U3FDR = (1 << 0) | // DIVADDVAL=1
(1 << 4); // MULVAL=1
#endif
}
/*
void UART3_IniDft(void)
{
uint32 Fdiv = 0;
PCONP |= 1 << 25; // 打開UART3
// 初始化相關的IO
//PINSEL9 = (0x03 << 24) | (0x03 << 26); // 設置P4.28和P4.29連接到UART3
PINSEL0 = (0x02 << 0) | (0x02 << 2); // 設置P0.0和P0.1連接到UART3
// 初始化串口通訊參數
U3LCR = 0x83; // 設置為8位數據位,1位停止位,無奇偶校驗,DLAB=1,允許設置波特率
Fdiv = (Fpclk / 16) / UARTBAUD; // 設置波特率
U3DLM = Fdiv / 256;
U3DLL = Fdiv % 256;
U3LCR = 0x03; // 令DLAB位為0
U3FCR &= ~0x07; // 禁用FIFO
U3IER &= ~0x07; // 禁止UART產生中斷
// 以下語句設置小數分頻系數為0.5
#if FDR
U3FDR = (1 << 0) | // DIVADDVAL=1
(1 << 4); // MULVAL=1
#endif
}
*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -