📄 uartirdarcv.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 + -