📄 iar-
字号:
/****************************************Copyright (c)****************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File Name: UART1.c
** Last modified Date: 2006.11.18
** Last Version: v1.0
** Description: 串口驱动源文件
**
**--------------------------------------------------------------------------------------------------------
** Created By: Zhou Shaogang
** Created date: 2006.11.18
** Version: v1.0
** Descriptions:
**
**--------------------------------------------------------------------------------------------------------
** Modified by: Ni Likao 倪力考
** Modified date: 2007.11.07
** Version: v1.1
** Description: 对接收中断做了些修改,放弃之前的数据队列.
**
*********************************************************************************************************/
#include "../config.h"
#define RS485_GPIO_PORT GPIO_PORTF_BASE
#define RS485_RE_DE GPIO_PIN_1
#ifndef UART_FR_BUSY
#define UART_FR_BUSY 0x00000008
#endif
#define UARTTraBUSY(ulBase) ( (HWREG(ulBase + UART_O_FR) & UART_FR_BUSY) ? true : false )
uint8 ucBuffer[200] = {0};
uint8 ucBit = 0;
uint8 ucNum = 0;
/*********************************************************************************************************
** Function name: RS485PortIni
** Descriptions: 该函数对RS485进行了初始化.
** input parameters: 无
** output parameters: 无
** Returned value: 无
** Created By: Zhou Shaogang
** Created date: 2006.11.18
**--------------------------------------------------------------------------------------------------------
** Modified by: Ni Likao 倪力考
** Modified date: 2007.11.07
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void RS485PortIni (void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); /* 使能GPIOF */
GPIODirModeSet(RS485_GPIO_PORT, RS485_RE_DE, GPIO_DIR_MODE_OUT);
GPIOPadConfigSet(RS485_GPIO_PORT, RS485_RE_DE, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);
GPIOPinWrite(RS485_GPIO_PORT, RS485_RE_DE, 0); /* RS485 接收数据 */
}
/*********************************************************************************************************
** Function name: RS485SendEnable
** Descriptions: 该函数使能RS485发送.
** input parameters: 无
** output parameters: 无
** Returned value: 无
** Created By: Zhou Shaogang
** Created date: 2006.11.18
**--------------------------------------------------------------------------------------------------------
** Modified by: Ni Likao 倪力考
** Modified date: 2007.11.07
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void RS485SendEnable (void)
{
GPIOPinWrite(RS485_GPIO_PORT, RS485_RE_DE, RS485_RE_DE);
}
/*********************************************************************************************************
** Function name: RS485SendDisable
** Descriptions: 该函数禁能RS485发送.
** input parameters: 无
** output parameters: 无
** Returned value: 无
** Created By: Zhou Shaogang
** Created date: 2006.11.18
**--------------------------------------------------------------------------------------------------------
** Modified by: Ni Likao 倪力考
** Modified date: 2007.11.07
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void RS485SendDisable (void)
{
while ( UARTTraBUSY(UART1_BASE) ) {
;
}
GPIOPinWrite(RS485_GPIO_PORT, RS485_RE_DE, 0);
}
/*********************************************************************************************************
** Function name: UART1Init
** Descriptions: 该函数对UART1进行了初始化配置.
** input parameters: ulBaudRate,ucPrio
** output parameters: 无
** Returned value: TRUE/FALSE
** Created By: Zhou Shaogang
** Created date: 2006.11.18
**--------------------------------------------------------------------------------------------------------
** Modified by: Ni Likao 倪力考
** Modified date: 2007.11.07
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
uint8 UART1Init (uint32 ulBaudRate, uint8 ucPrio)
{
if (ulBaudRate > 115200) { /* 波特率太高,错误返回 */
return(FALSE);
}
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1); /* 使能串口1外围设备 */
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); /* 使能GPIOD */
GPIOPinTypeUART(GPIO_PORTD_BASE, GPIO_PIN_2 | GPIO_PIN_3); /* 设置PD2,PD3为RXD1,TXD1 */
RS485PortIni();
UARTConfigSet(UART1_BASE, ulBaudRate, (UART_CONFIG_WLEN_8 | /* 配置串口1,8位数据,1位起始 */
/* 位,1位停止位,用户波特率 */
UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE) & 0xFFFFFFEF);
UARTFifoLevelSet(UART1_BASE, 4, 0);
IntEnable(INT_UART1); /* 使能串口1系统中断 */
UARTIntEnable(UART1_BASE, UART_INT_RX | UART_INT_RT); /* 使能串口1接收中断
和接收超时中断 */
IntPrioritySet(INT_UART1, ucPrio); /* 设置中断优先级 */
UARTEnable(UART1_BASE);
return(TRUE);
}
/*********************************************************************************************************
** Function name: UART1Send
** Descriptions: 该函数为RS485发送函数.
** input parameters: *pucBuffer,ucByte
** output parameters: 无
** Returned value: 无
** Created By: Zhou Shaogang
** Created date: 2006.11.18
**--------------------------------------------------------------------------------------------------------
** Modified by: Ni Likao 倪力考
** Modified date: 2007.11.07
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void UART1Send (uint8 *pucBuffer, uint16 ucByte)
{
RS485SendEnable();
while (ucByte) {
if ( UARTSpaceAvail(UART1_BASE) ) {
UARTCharNonBlockingPut(UART1_BASE, *pucBuffer++);
ucByte--;
}
}
while ( !UARTTraFifoEmp(UART1_BASE) ) {
;
}
RS485SendDisable();
}
/*********************************************************************************************************
** Function name: UART1ISR
** Descriptions: 该函数禁能RS485接收中断服务程序.
** input parameters: 无
** output parameters: 无
** Returned value: 无
** Created By: Zhou Shaogang
** Created date: 2006.11.18
**--------------------------------------------------------------------------------------------------------
** Modified by: Ni Likao 倪力考
** Modified date: 2007.11.07
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void UART1ISR (void)
{
unsigned long ulStatus;
ulStatus = UARTIntStatus(UART1_BASE, true); /* 读取已使能的串口1中断状态 */
UARTIntClear(UART1_BASE, ulStatus); /* 清除当前的串口1中断 */
if ((ulStatus & UART_INT_RX) || (ulStatus & UART_INT_RT)) { /* 接收中断及接收超时中断 */
while ( UARTCharsAvail(UART1_BASE)) {
ucBuffer[ucNum] = UARTCharNonBlockingGet(UART1_BASE); /* 保存接收到的数据 */
ucNum++;
}
}
ucBit = 1;
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -