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

📄 uartirdarcv.c

📁 easyARM8962 串口红外模式 接受程序
💻 C
字号:
/****************************************Copyright (c)****************************************************
**                               Guangzhou ZHIYUAN electronics Co.,LTD.
**                                     
**                                 http://www.embedtools.com		  
**
**--------------File Info---------------------------------------------------------------------------------
** File Name:               UARTIrDArcv.c	   
** Last modified Date:      2007.09.25 
** Last Version:            v1.0	  
** Description:             Stellaris系列单片机IrDA接收程序采用UART0的IrDA模式进行通信.
**--------------------------------------------------------------------------------------------------------
** Created By:              Ni Likao	   
** Created date:            2007.09.25    
** Version:                 v1.0	  
** Descriptions:            接收到调制信号后发生中断,并将解调后的数据传到上位机.	 
**
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Description:
**
*********************************************************************************************************/

#include "hw_ints.h"
#include "hw_memmap.h"
#include "hw_types.h"
#include "gpio.h"               
#include "interrupt.h"
#include "sysctl.h"						   
#include "uart.h"
#include "hw_uart.h"

#define  UART0_PIN    GPIO_PIN_0|GPIO_PIN_1                             /*  定义UART0的功能管脚         */
#define  UART1_PIN    GPIO_PIN_2|GPIO_PIN_3                             /*  定义UART1的功能管脚         */
#define  UART2_PIN    GPIO_PIN_0|GPIO_PIN_1                             /*  定义UART2的功能管脚         */

/*********************************************************************************************************
** Function name:           UARTRxIntHandle
** Descriptions:            UART0中断服务函数,工作在串口的接收中断和超时中断下,
**                          向上位机发送IrDA接收到的数据.
**                          用KEIL软件时,在Startup.S中添加该中断函数名
** input parameters:        无
** output parameters:       无
** Returned value:          无
** Created By:              Ni Likao
** Created date:            2007.09.25
**--------------------------------------------------------------------------------------------------------
** Modified by:             
** Modified date:           
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/

void UARTRxIntHandler (void)
{
    unsigned long ulStatus = 0;
    ulStatus = HWREG(UART1_BASE + 0x40);                                /*  获得中断状态                */
    UARTIntClear(UART1_BASE, ulStatus);                                 /*  清除等待响应的中断          */
    if (ulStatus & (UART_INT_RX | UART_INT_RT)) {                       /*  检查是否有未响应的传输中断  */
        while (UARTCharsAvail(UART1_BASE)) { 
            UARTCharPut(UART0_BASE, UARTCharNonBlockingGet(UART1_BASE));/*  向上位机发送IrDA接收到的数据*/     
        }
    }
}

/*********************************************************************************************************
** Function name:           main	   
** Descriptions:            该范例程序演示了通过串口IrDA模式接收数据并向上位机上传数据。
**                          UART0负责IrDA接收,UART1负责向上位机上传数据.两个UART都将被配置为 9600
**                          波特率,8-n-1模式持续发送数据。	
** input parameters:        无
** output parameters:       无      
** Returned value:          无	 
** Created By:              Ni Likao
** Created date:            2007.09.25
**--------------------------------------------------------------------------------------------------------
** Modified by:             
** Modified date:           
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
        
int main ()
{    
    SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC |
                   SYSCTL_OSC_MAIN | SYSCTL_XTAL_6MHZ);                 /*  设定晶振为时钟源            */
    SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);                        /*  使能UART0外设               */
    SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1);                        /*  使能UART1外设               */
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);                        /*  使能GPIOA外设               */
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);                        /*  使能GPIOD外设               */
    
    GPIOPinTypeUART(GPIO_PORTA_BASE, UART0_PIN);                        /*  配置UART0的功能管脚         */
    GPIOPinTypeUART(GPIO_PORTD_BASE, UART1_PIN);                        /*  配置UART1的功能管脚         */
    UARTDisable(UART1_BASE);                                            /*  禁能UART0                   */
    HWREG(UART1_BASE + UART_O_CTL) |= UART_CTL_SIREN;                   /*  配置UART1为IrDA模式         */
    UARTEnable(UART1_BASE);                                             /*  使能UART1                   */
    
    IntMasterEnable();                                                  /*  开总中断                    */

    UARTConfigSet(UART0_BASE, 9600, (UART_CONFIG_WLEN_8 |                 
                                     UART_CONFIG_STOP_ONE |
                                     UART_CONFIG_PAR_NONE));            /*  配置UART0的波特率及端口参数 */
    UARTConfigSet(UART1_BASE, 9600, (UART_CONFIG_WLEN_8 |
                                     UART_CONFIG_STOP_ONE |
                                     UART_CONFIG_PAR_NONE));            /*  配置UART1的波特率及端口参数 */
    
    UARTEnable(UART1_BASE);                                             /*  使能UART1                   */
    UARTIntDisable(UART1_BASE, UART_INT_TX);
    /*
     *  设置UART0接收中断及接收超时中断
     */
    UARTIntRegister(UART1_BASE,UARTRxIntHandler);    
    UARTIntEnable(UART1_BASE, UART_INT_RX | UART_INT_RT);
                                                                        
    HWREG(UART1_BASE + 0x34) = (0x01 << 3);                             /*  IFLS 中断级别选择           */
    IntEnable(INT_UART1);                                               /*  使能UART1中断               */
    while (1) {
        ;
    }
}

/*********************************************************************************************************
  END FILE
*********************************************************************************************************/

⌨️ 快捷键说明

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