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

📄 uart.h

📁 基于32位ColdFire构建嵌入式系统书本原程序.rar
💻 H
字号:
//-------------------------------------------------------------------------*
//Uart.h串行通信头文件                                                     *
//-------------------------------------------------------------------------*

#ifndef UART_H
#define UART_H

//1.对外引用
#include "type.h"         //类型定义头文件
extern uint8 __IPSBAR[];  //引用外部标号

//2.外用UART通信函数声明
//-------------------------------------------------------------------------*
//函数名: UartInit                                                         *
//功  能: 初始化UARTx模块。x代表0,1,2                                    *
//参  数: uint8 uartNo: 第uartNo个UART模块。其中uartNo取值为0,1,2        *
//                      如果uatch大于2,则认为是2                          *
//        int32 sysclk: 系统总线时钟,以MHz为单位                          *
//        int32 baud:   波特率,如 4800,9600,19200,38400,57600,115200 *
//                      其他的波特率在MCF52233的评估板上没有测试过,若要使 *
//                      用该函数,请自行测试,一般来说,速度慢一点,通信会 *
//                      更稳定                                             *
//        uint8 intStatusInit: 初始化中断的状态 1表示开中断 其他表示不开   *
//返  回: 无                                                               *
//说  明: uartNo=0表示使用UART0模块,依此类推。                            *
//-------------------------------------------------------------------------*
void UartInit(uint8 uartNo, int32 sysclk, int32 baud, uint8 intStatusInit);

//-------------------------------------------------------------------------*
//函数名: UartSend1                                                        *
//功  能: 串行发送1个字节                                                  *
//参  数: uint8 uartNo: 第uartNo个UART模块,其中uartNo取值为0,1,2        *
//        uint8 ch:     要发送的字节                                       *
//返  回: 无                                                               *
//说  明: uartNo=0表示使用UART0模块,依此类推                              *
//-------------------------------------------------------------------------*
void UartSend1(uint8 uartNo, uint8 ch);

//-------------------------------------------------------------------------*
//函数名: UartSendN                                                        *
//功  能: 串行发送N个字节                                                  *
//参  数: uint8 uartNo: 第uartNo个UART模块。其中uartNo取值为0,1,2        *
//        uint8 n:      发送的字节数                                       *
//        uint8 ch[]:   待发送的数据                                       *
//返  回: 无                                                               *
//说  明: uartNo=0表示使用UART0模块,依此类推。                            *
//        调用了UartSend1函数                                              *
//-------------------------------------------------------------------------*
void UartSendN(uint8 uartNo, uint8 n, uint8 ch[]);

//-------------------------------------------------------------------------*
//函数名: UartRe1                                                          *
//功  能: 从串口接收1个字节的数据                                          *
//参  数: uint8 uartNo: 第uartNo个UART模块。其中uartNo取值为0,1,2        *
//返  回: 接收到的数据(若接收失败,返回0xff)                             *
//        uint8 *p:     接收成功标志的指针(0表示成功,1表示不成功)       *
//说  明: 参数*p带回接收标志,*p = 0,收到数据;*p = 1,未收到数据         *
//        uartNo=0表示使用UART0模块,依此类推。                            *
//-------------------------------------------------------------------------*
uint8 UartRe1 (uint8 uartNo, uint8 *p);

//-------------------------------------------------------------------------*
//函数名: UartReN                                                          *
//功  能: 从串口接收N个字节的数据                                          *
//参  数: uint8 uartNo: 第uartNo个UART模块。其中uartNo取值为0,1,2        *
//        uint8 n:      要接收的字节数                                     *
//        uint8 ch[]:   存放接收数据的数组                                 *
//返  回: 接收标志= 0 接收成功,= 1 接收失败                               *
//说  明: uartNo=0表示使用UART0模块,依此类推。                            *
//        调用了UartRe1函数                                                *
//-------------------------------------------------------------------------*
uint8 UartReN(uint8 uartNo, uint8 n, uint8 ch[]);

//-------------------------------------------------------------------------*
//函数名: UartSendString                                                   *
//功  能: 串口传输字符串                                                   *
//参  数: uint8 uartNo: 第uartNo个UART模块; p: 要传输的字符串的指针        *
//返  回: 无                                                               *
//说  明: 字符串以'\0'结束                                                 *
//        调用了UartSend1函数                                              *
//-------------------------------------------------------------------------*
void UartSendString(uint8 uartNo,char *p);

//3,模块相关的宏定义

//示例波特率的宏定义
#define UART_BAUD             115200   //115200
//标志位掩码的定义
#define MCF_UART_RXD_MASK     (0x04)   //UART接收引脚定义掩码
#define MCF_UART_TXD_MASK     (0x01)   //UART发送引脚定义掩码
#define MCF_UART_RX_TEST      (0x01)   //UART接收缓冲区满标志位掩码
#define MCF_UART_TX_TEST      (0x04)   //UART发送缓冲区空标志位掩码
#define MCF_UART_RESET_TX     (0x30)   //UART控制寄存器复位发送器掩码
#define MCF_UART_RESET_RX     (0x20)   //UART控制寄存器复位接收器掩码
#define MCF_UART_RESET_MR     (0x10)   //UART复位模式寄存器掩码
#define MCF_UART_NONE_PARITY  (0x10)   //UART模式寄存器无奇偶校验掩码
#define MCF_UART_BIT_8        (0x03)   //UART模式寄存器8位传输掩码
#define MCF_UART_CM_NORMAL    (0x00)   //UART模式寄存器正常通道模式掩码
#define MCF_UART_STOP_BITS_1  (0x07)   //UART模式寄存器1位停止位掩码
#define MCF_UART_RCS_SYSCLK   (0xD0)   //UART时钟选择寄存器接收时钟选择掩码
#define MCF_UART_TCS_SYSCLK   (0x0D)   //UART时钟选择寄存器接收时钟选择掩码
#define MCF_UART_RX_ENABLED   (0x01)   //UART控制寄存器使能接收器掩码
#define MCF_UART_TX_ENABLED   (0x04)   //UART控制寄存器使能发送器掩码

//ColdFire的UART模块相关寄存器的定义
//x=0表示UART0模块 x=1表示UART1模块 x=2表示UART2模块
//UART的IO端口功能分配寄存器定义,其中x=0表示UART0端口,依此类推
#define MCF_GPIO_PUPAR(x)  (*(vuint8 *)(&__IPSBAR[0x100071+ (x)]))
//UART模式寄存器
#define MCF_UART_UMR(x)    (*(vuint8 *)(&__IPSBAR[0x000200+((x)*0x040)]))
//UART状态寄存器
#define MCF_UART_USR(x)    (*(vuint8 *)(&__IPSBAR[0x000204+((x)*0x040)]))
//UART时钟选择寄存器
#define MCF_UART_UCSR(x)   (*(vuint8 *)(&__IPSBAR[0x000204+((x)*0x040)]))
//UART命令寄存器
#define MCF_UART_UCR(x)    (*(vuint8 *)(&__IPSBAR[0x000208+((x)*0x040)]))
//UART接收数据寄存器
#define MCF_UART_URB(x)    (*(vuint8 *)(&__IPSBAR[0x00020C+((x)*0x040)]))
//UART发送数据寄存器,接收和发送数据寄存器使用同一个地址
#define MCF_UART_UTB(x)    (*(vuint8 *)(&__IPSBAR[0x00020C+((x)*0x040)]))
//UART中断状态/掩码寄存器
#define MCF_UART_UIMR(x)   (*(vuint8 *)(&__IPSBAR[0x000214+((x)*0x040)]))
//UART波特率寄存器1(高位)
#define MCF_UART_UBG1(x)   (*(vuint8 *)(&__IPSBAR[0x000218+((x)*0x040)]))
//UART波特率寄存器2(低位) Baud=fsys/(32*divider)
#define MCF_UART_UBG2(x)   (*(vuint8 *)(&__IPSBAR[0x00021C+((x)*0x040)]))

//定义UART中断相关的寄存器
 //UART的中断控制器寄存器
#define MCF_UART_ICR_LEVEL(x) (*(vuint8 *)(&__IPSBAR[0x000C4D+(x)]))
//中断掩码控制器
#define MCF_UART_IMRL         (*(vuint32*)(&__IPSBAR[0x000C0C]))
//中断掩码控制器中UART掩码设置(13,14,15位)
#define MCF_UART_IMRL_MASK(x) (0x00002000<<x)

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -