?? uart.h
字號:
/********************************************************************************************************
* 文 件 名 : Comm.H
* 程 序 員 : (CaiJie) hnclcj@gmail.com
* (c) Copyright 2007-2007, CaiJie
* All Rights Reserved
* 說 明 : 這里的串口函數都是建立在LPC ARM7的基礎上的 應用時根據硬件環境更改硬件相關函數 (硬件函數如下)
********************************************************************************************************/
#ifdef COMM_GLOBALS
#define COMM_EXT
#else
#define COMM_EXT extern
#endif
/********************************************************************************************************
* 全局常量
********************************************************************************************************/
#define COMM_MODULE_EN 1 // 串口模塊總使能 0禁止
#define COMM0_UNIT_EN 1 // 串口0模塊使能 0禁止
#define COMM1_UNIT_EN 0 // 串口1模塊使能 0禁止
#if COMM_MODULE_EN > 0
#if COMM0_UNIT_EN > 0 // ---------------- 串口0的常量定義 -------------------
#define COMM0_DATA_STREAM_EN 0 // ASCII方式通訊時可采樣XON/XOFF數據流模式來保證數據傳輸
#define COMM0_RXD_EN 1 // 串口0接收部分使能 0禁止
#define COMM0_RXD_NBITS 32 // 串口0緩存區大小數據類型 只能是8,16,32
#define COMM0_RXD_GETNMSGS_EN 1 // 串口0的數據計數檢測函數使能 0禁止
#define COMM0_RXD_GET_EN 1 // 串口0字節接受 0禁止
#define COMM0_RXD_GETS_EN 0 // 串口0接收多數據 0禁止
#define COMM0_RXD_SIZE 56*1024 // 串口0的接收緩存配置 必須>=1
#define COMM0_TXD_EN 1 // 串口0發送部分使能 0禁止
#define COMM0_TXD_NBITS 32 // 串口0緩存區大小數據類型 只能是8,16,32
#define COMM0_TXD_PUT_EN 1 // 串口0字節發送 0禁止
#define COMM0_TXD_PUTS_EN 1 // 串口0發送多數據 0禁止
#define COMM0_TXD_SIZE 16 // 串口0的發送緩存配置 必須>=1
#endif
#if COMM1_UNIT_EN > 0 // ---------------- 串口1的常量定義 -------------------
#define COMM1_DATA_STREAM_EN 0 // ASCII方式通訊時可采樣XON/XOFF數據流模式來保證數據傳輸
#define COMM1_RXD_EN 0 // 串口1接收部分使能 0禁止
#define COMM1_RXD_NBITS 32 // 串口1緩存區大小數據類型 只能是8,16,32
#define COMM1_RXD_GETNMSGS_EN 0 // 串口1的數據計數檢測函數使能 0禁止
#define COMM1_RXD_GET_EN 1 // 串口1字節接受 0禁止
#define COMM1_RXD_GETS_EN 0 // 串口1接收多數據 0禁止
#define COMM1_RXD_SIZE 32 // 串口1的接收緩存配置 必須>=1
#define COMM1_TXD_EN 1 // 串口1發送部分使能 0禁止
#define COMM1_TXD_NBITS 32 // 串口1緩存區大小數據類型 只能是8,16,32
#define COMM1_TXD_PUT_EN 0 // 串口1字節發送 0禁止
#define COMM1_TXD_PUTS_EN 0 // 串口1發送多數據 0禁止
#define COMM1_TXD_SIZE 32 // 串口1的發送緩存配置 必須>=1
#endif
// -- 當串口的接收需要任務協助處理時下面兩個定義有效 --
#define X0N 17 // 流控制字符 繼續發送 20%
#define XOFF 19 // 流控制字符 停止發送 70%
// 兩個處理CLK模塊臨界數據的兩個宏 這里使用OS的臨界宏
#define COMM_ENTER_CRITICAL() OS_ENTER_CRITICAL() // 進入臨界宏
#define COMM_EXIT_CRITICAL() OS_EXIT_CRITICAL() // 退出臨界宏
// ------------ 串口的各種返回信息 不能更改------------
#define COMM_ERR 0 // 串口配置有錯誤
#define COMM_NO_ERR 1 // 串口配置沒有錯誤
#define COMM_BAD_BAUD 2 // 波特率錯誤
#define COMM_BAD_MODE 3 // 串口工作為錯誤的工作方式 包含校驗 BIT數 停止位數
#define COMM_RXD_EMPTY 4 // 接收緩存沒有數據 為空
#define COMM_RXD_FALSE 5 // 接收數據失敗 只多字節接收時返回此信息
#define COMM_RXD_OK 6 // 接收數據正確
#define COMM_TXD_FALSE 7 // 發送失敗
#define COMM_TXD_OK 8 // 發送正確
#endif
/********************************************************************************************************
* 全局變量和數據類型
********************************************************************************************************/
#if COMM_MODULE_EN > 0
#if COMM0_UNIT_EN > 0 && COMM0_RXD_EN > 0 // 串口0接收變量
#if COMM0_RXD_NBITS == 8
typedef INT8U COMM0_RXD_TYPE;
#if COMM0_RXD_SIZE > 255
#error "串口0接收緩沖大小跟數據類型不匹配!只能<=0xff!"
#endif
#elif COMM0_RXD_NBITS == 16
typedef INT16U COMM0_RXD_TYPE;
#if COMM0_RXD_SIZE > 0xffff
#error "串口0接收緩沖大小跟數據類型不匹配!只能<=0xffff!"
#endif
#elif COMM0_RXD_NBITS == 32
typedef INT32U COMM0_RXD_TYPE;
#if COMM0_RXD_SIZE > 0xffffffff
#error "串口0接收緩沖大小跟數據類型不匹配!只能<=0xffffff!"
#endif
#else
#error "串口0接收錯誤的數據類型寬度! 只能為8,16,32!"
#endif
#endif
#if COMM0_UNIT_EN > 0 && COMM0_TXD_EN > 0 // 串口0發送變量
#if COMM0_TXD_NBITS == 8
typedef INT8U COMM0_TXD_TYPE;
#if COMM0_TXD_SIZE > 255
#error "串口0發送緩沖大小跟數據類型不匹配!只能<=0xff!"
#endif
#elif COMM0_TXD_NBITS == 16
typedef INT16U COMM0_TXD_TYPE;
#if COMM0_TXD_SIZE > 0xffff
#error "串口0發送緩沖大小跟數據類型不匹配!只能<=0xffff!"
#endif
#elif COMM0_TXD_NBITS == 32
typedef INT32U COMM0_TXD_TYPE;
#if COMM0_TXD_SIZE > 0xffffffff
#error "串口0發送緩沖大小跟數據類型不匹配!只能<=0xffffff!"
#endif
#else
#error "串口0發送錯誤的數據類型寬度! 只能為8,16,32!"
#endif
#endif
#if COMM1_UNIT_EN > 0 && COMM1_RXD_EN > 0 // 串口1接收變量
#if COMM1_RXD_NBITS == 8
typedef INT8U COMM1_RXD_TYPE;
#if COMM1_RXD_SIZE > 255
#error "串口1接收緩沖大小跟數據類型不匹配!只能<=0xff!"
#endif
#elif COMM1_RXD_NBITS == 16
typedef INT16U COMM1_RXD_TYPE;
#if COMM1_RXD_SIZE > 0xffff
#error "串口1接收緩沖大小跟數據類型不匹配!只能<=0xffff!"
#endif
#elif COMM1_RXD_NBITS == 32
typedef INT32U COMM1_RXD_TYPE;
#if COMM1_RXD_SIZE > 0xffffffff
#error "串口1接收緩沖大小跟數據類型不匹配!只能<=0xffffff!"
#endif
#else
#error "串口1接收錯誤的數據類型寬度! 只能為8,16,32!"
#endif
#endif
#if COMM1_UNIT_EN > 0 && COMM1_TXD_EN > 0 // 串口1發送變量
#if COMM1_TXD_NBITS == 8
typedef INT8U COMM1_TXD_TYPE;
#if COMM1_TXD_SIZE > 255
#error "串口1發送緩沖大小跟數據類型不匹配!只能<=0xff!"
#endif
#elif COMM1_TXD_NBITS == 16
typedef INT16U COMM1_TXD_TYPE;
#if COMM1_TXD_SIZE > 0xffff
#error "串口1發送緩沖大小跟數據類型不匹配!只能<=0xffff!"
#endif
#elif COMM1_TXD_NBITS == 32
typedef INT32U COMM1_TXD_TYPE;
#if COMM1_TXD_SIZE > 0xffffffff
#error "串口1發送緩沖大小跟數據類型不匹配!只能<=0xffffff!"
#endif
#else
#error "串口1發送錯誤的數據類型寬度! 只能為8,16,32!"
#endif
#endif
#endif
/********************************************************************************************************
* 函數
********************************************************************************************************/
#if COMM_MODULE_EN > 0
#if COMM0_UNIT_EN > 0
void Comm0Init (void);
INT8U Comm0CfgPort (INT32U baud, INT8U parity, INT8U bits, INT8U stops);
INT8U Comm0RxGetChar (INT8U *err);
INT16U Comm0RxGetNMsgs (void);
INT8U Comm0RxGetsChar (INT8U *s, COMM0_RXD_TYPE len);
INT8U Comm0TxPutChar (INT8U Data);
INT8U Comm0TxPutsChar (INT8U *s, COMM0_TXD_TYPE len);
#endif
#if COMM1_UNIT_EN > 0
void Comm1Init (void);
INT8U Comm1CfgPort (INT32U baud, INT8U parity, INT8U bits, INT8U stops);
INT8U Comm1RxGetChar (INT8U *err);
INT16U Comm1RxGetNMsgs (void);
INT8U Comm1RxGetsChar (INT8U *s, COMM1_RXD_TYPE len);
INT8U Comm1TxPutChar (INT8U Data);
INT8U Comm1TxPutsChar (INT8U *s, COMM1_TXD_TYPE len);
#endif
#endif
/********************************************************************************************************
* End Of File
********************************************************************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -