?? uart.h
字號(hào):
/********************************************************************************/
/* UART.H v1.00 */
/* 版權(quán)(c) 2003- 北京合眾達(dá)電子技術(shù)有限責(zé)任公司 */
/* 設(shè)計(jì)者: 段立鋒 */
/********************************************************************************/
#ifndef _UART
#define _UART
#include "type.h"
/********************************************************************************/
/* 常量定義 */
/********************************************************************************/
// UART instance enumeration
typedef enum
{
UART_A = 0,
UART_B = 1
} UartId, *PUartId;
/*********************************************************************************
*外部設(shè)備寄存器及地址 *
*********************************************************************************
*1、外部UART的寄存器,及寄存器內(nèi)容
**TL16C752B寄存器地址說(shuō)明:
*UART的寄存器在IO空間的地址讀說(shuō)明*/
#define rhr 0x0000 /*接收保持寄存器的地址,只讀*/
#define thr 0x0000 /*發(fā)送保持寄存器的地址,只寫(xiě)*/
#define ier 0x0001 /*中斷使能寄存器的地址,讀寫(xiě)*/
#define iir 0x0002 /*中斷標(biāo)志寄存器的地址,只讀*/
#define fcr 0x0002 /*FIFO控制寄存器的地址,只寫(xiě)*/
#define lcr 0x0003 /*線(xiàn)路控制寄存器的地址,讀寫(xiě)*/
#define mcr 0x0004 /*MODEM控制寄存器的地址,讀寫(xiě)*/
#define lsr 0x0005 /*線(xiàn)路狀態(tài)寄存器的地址,只讀*/
#define msr 0x0006 /*MODEM狀態(tài)寄存器的地址,只讀*/
#define spr 0x0007 /*暫存寄存器的地址,讀寫(xiě)*/
/*復(fù)合尋址寄存器地址說(shuō)明*/
#define dll 0x0000 /*低位除數(shù)寄存器的地址,讀寫(xiě)*/
#define dlh 0x0001 /*高位除數(shù)寄存器的地址,讀寫(xiě)*/
#define efr 0x0002 /*增強(qiáng)功能寄存器的地址,讀寫(xiě)*/
#define xon1 0x0004
#define xon2 0x0005
#define xoff1 0x0006
#define xoff2 0x0007
#define tcr 0x0006 /*傳送寄存器*/
#define tlr 0x0007 /*觸發(fā)水平寄存器*/
#define frd 0x0007 /*FIFO準(zhǔn)備好寄存器*/
/*UART通路地址*/
#define chanel_a 0x0000 /*A通路*/
#define chanel_b 0x0001 /*B通路*/
/*UART參數(shù)的設(shè)置*/
/*波特率設(shè)置*/
#define buad_1k2 0x04E2
#define buad_2k4 0x0271
#define buad_4k8 0x0138
#define buad_9k6 0x009C
#define buad_19k2 0x004E
#define buad_38k4 0x0027
/*數(shù)據(jù)格式設(shè)置*/
#define data_w5 0x0000 /*數(shù)據(jù)長(zhǎng)度為5*/
#define data_w6 0x0001 /*數(shù)據(jù)長(zhǎng)度為6*/
#define data_w7 0x0002 /*數(shù)據(jù)長(zhǎng)度為7*/
#define data_w8 0x0003 /*數(shù)據(jù)長(zhǎng)度為8*/
#define data_s1 0x0000 /*數(shù)據(jù)停止位為1*/
#define data_s2 0x0004 /*數(shù)據(jù)停止位為1個(gè)半(數(shù)據(jù)長(zhǎng)度為5)或2個(gè)*/
#define data_p 0x0008 /*設(shè)置較驗(yàn)位*/
#define data_po 0x0000 /*設(shè)置奇較驗(yàn)*/
#define data_pe 0x0010 /*設(shè)置偶較驗(yàn)*/
#define data_parity 0x0020 /*設(shè)置較驗(yàn)位*/
#define data_break 0x0040 /*設(shè)置當(dāng)發(fā)送終止時(shí),輸出為低*/
#define uart_parity data_p + data_pe
/*FIFO設(shè)置*/
#define fifo_disable 0x0000 /*禁止fifo*/
#define fifo_enable 0x0001 /*使能fifo*/
#define fifo_rreset 0x0002 /*復(fù)位接收f(shuō)ifo*/
#define fifo_xreset 0x0004 /*復(fù)位發(fā)送fifo*/
#define fifo_dma 0x0008 /*設(shè)置DMA方式*/
#define fifo_txdip8 0x0000 /*fifo深度為8個(gè)*/
#define fifo_txdip16 0x0010 /*fifo深度為16個(gè)*/
#define fifo_txdip32 0x0020 /*fifo深度為32個(gè)*/
#define fifo_txdip56 0x0030 /*fifo深度為56個(gè)*/
#define fifo_rxdip8 0x0000 /*fifo深度為8個(gè)*/
#define fifo_rxdip16 0x0040 /*fifo深度為16個(gè)*/
#define fifo_rxdip32 0x0080 /*fifo深度為56個(gè)*/
#define fifo_rxdip56 0x00b0 /*fifo深度為60個(gè)*/
#define UartLoop 0x0010 /*設(shè)置自閉環(huán)方式*/
/*UART中斷設(shè)置*/
#define uartint_rhr 0x0001 /*設(shè)置接收中斷*/
#define uartint_thr 0x0002 /*設(shè)置發(fā)送中斷*/
#define uartint_rls 0x0004 /*設(shè)置接收狀態(tài)中斷*/
#define uartint_msr 0x0008 /*設(shè)置MODEM狀態(tài)中斷*/
#define uart_sleep 0x0010 /*設(shè)置接收中斷*/
#define uartint_xoff 0x0020 /*設(shè)置xoff中斷*/
#define uartint_rts 0x0040 /*設(shè)置rts中斷*/
#define uartint_cts 0x0080 /*設(shè)置cts中斷*/
#define uart_enable 0x0008 /*使能UART中斷*/
/********************************************************************************/
/* 函數(shù)聲明 */
/********************************************************************************/
/******************************************************************************/
/* uart_open() - 打開(kāi)相應(yīng)的異步串口,獲得有效的句柄 */
/* */
/* 參數(shù): */
/* uart:選擇要打開(kāi)的異步串口 */
/* */
/* 返回值: 對(duì)應(yīng)的有效句柄 */
/* 當(dāng)返回值為0xFFFF時(shí),為無(wú)效句柄 */
/* */
/******************************************************************************/
HANDLE uart_open(UartId uart);
/********************************************************************************/
/* */
/* 函數(shù)定義:uint _uart_write_reg(uint channel, uint reg,uint regdata) */
/* 功 能:串口初始化 */
/* */
/* 入口參數(shù):A ---- channel:串口A或是串口B */
/* (SP+n) ---- 寄存器reg,如果是.far_mode模式則n為2,否則n為1 */
/* ---- 要寫(xiě)入的數(shù)據(jù)regdata */
/* 出口參數(shù):A ---- 讀回寄存器數(shù)據(jù) */
/* 資源使用:AR0,B */
/* */
/********************************************************************************/
unsigned int uart_write_reg(HANDLE channel,unsigned int reg,unsigned int regdata);
/********************************************************************************/
/* */
/* 函數(shù)定義:uint _uart_read_reg(uint channel, uint reg) */
/* 功 能:串口初始化 */
/* */
/* 入口參數(shù):A ---- channel:串口A或是串口B */
/* (SP+n) ---- 寄存器reg,如果是.far_mode模式則n為2,否則n為1 */
/* 出口參數(shù):A ---- 讀回寄存器數(shù)據(jù) */
/* 資源使用:AR0 */
/* */
/********************************************************************************/
unsigned int uart_read_reg(HANDLE channel, unsigned int reg);
/******************************************************************************/
/* uart_recive() - 串口接收,并設(shè)置相應(yīng)的寄存器默認(rèn)值 */
/* */
/* 參數(shù): */
/* Channel: 有效的串口句柄 */
/* ReadLongth: 每次從緩沖區(qū)讀取的長(zhǎng)度 */
/* rec_data: 緩沖區(qū)的首址 */
/* */
/* 返回值 */
/* */
/******************************************************************************/
int uart_recive(HANDLE Channel, unsigned int *rec_data);
/******************************************************************************/
/* uart_send_sigle() - 串口發(fā)送一個(gè)數(shù)據(jù),并設(shè)置相應(yīng)的寄存器默認(rèn)值 */
/* */
/* 參數(shù): */
/* Channel:有效的串口句柄 */
/* send_data: 要發(fā)送的數(shù)據(jù) */
/* */
/* 返回值 */
/* */
/******************************************************************************/
unsigned int uart_send_sigle(HANDLE Channel,unsigned int send_data);
/******************************************************************************/
/* uart_send() - 串口發(fā)送,并設(shè)置相應(yīng)的寄存器默認(rèn)值 */
/* */
/* 參數(shù): */
/* Channel:有效的串口句柄 */
/* longth: 緩沖區(qū)的長(zhǎng)度 */
/* send_data: 緩沖區(qū)的首址 */
/* */
/* 返回值 */
/* */
/******************************************************************************/
unsigned int uart_send(HANDLE Channel,unsigned int longth,unsigned int *send_data);
/******************************************************************************/
/* uart_setup() - 設(shè)置串口通訊的狀態(tài)
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -