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

📄 iar-

📁 IAR_example_EasyARM8962.zip
💻
字号:
/****************************************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 + -