⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.h

📁 ARM7的UART驱动程序 可以自由配置缓存大小 驱动函数集 以及接口简单 很适合初学者提高自己的驱动开发能力的参考程序 产品级别的代码 注释很详尽 但需要自己提供IRQ部分的初始化部分程序 本作者不
💻 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 + -