www.pudn.com > ARM-Cortex-M3.zip > UARTIrDArcv.c, change:2007-11-23,size:6859b


/****************************************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 
*********************************************************************************************************/