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

📄 main.c

📁 LPC2300硬件系统外设驱动源代码库
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2004-09-16
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:			Chenmingji
** Created date:		2004-09-16
** Version:				1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:			zhmj
** Modified date:		2006-4-28
** Version:
** Descriptions:		UART0通讯实验,中断方式。请用户使用串口延长线连接SmartARM2300工控开发平台的CON6
**                              和PC的串口,上位机使用EasyARM.exe,通信设置使用115200-none-8-1 
**                              在EasyARM.exe上发送“ABCDEFGH!”8个字符到目标板,会立即收到这8个字符
**
********************************************************************************************************/
#include 	"config.h"

#define 	UART0_INT		6

uint8 		rcv_buf[8];							// UART0数据接收缓冲区
volatile	uint8 rcv_new = 0;						// 接收新数据标志

/*********************************************************************************************************
** 函数名称 :IRQ_UART0
** 函数功能 :串口0接收中断服务程序
** 入口参数 :无。
** 出口参数 :无。
*********************************************************************************************************/
__irq __arm void IRQ_UART0(void)
{
	uint8 i = 0;

	if ((U0IIR & 0x0F) == 0x04)						// 判断是否RDA中断
	{
		rcv_new = 1;							// 设置接收到新的数据标志
		for (i=0; i<8; i++)	rcv_buf[i] = U0RBR;		        // 读取FIFO的数据,并清除中断
		VICVectAddr = 0x00;						// 中断处理结束
	}

	if ((U0IIR & 0x0F) == 0x02)						// 判断是否THRE中断
	{
		VICVectAddr = 0x00;						// 中断处理结束
	}

}

/*********************************************************************************************************
** 函数名称 :UART0_AllIni
** 函数功能 :令串口0完成全部初始化工作
** 入口参数 :无。
** 出口参数 :无。
*********************************************************************************************************/
void	UART0_AllIni(void)
{
	uint32 bak = 0;
	
	PCONP |= 1 << 3;					        // 使能UART0
	PINSEL0 = (0x01 << 4) | (0x01 << 6);			        // 设置P0.2和P0.3连接到UART0

	/* 设置串口波特率 */
	U0LCR = 0x80;							// DLAB = 1	
	bak   = (Fpclk >> 4) / 115200;
	U0DLM = bak >> 8;
	U0DLL = bak & 0xFF;
	
	/* 设置串口模式 */
	bak   = 8 - 5;							// 设置数据位个数
	bak &= ~0x04;							// 设置为1位停止位
	
	bak &= ~(0x01 << 4);						// 设置为无奇偶校验 
	U0LCR = bak;							// 将模式设置字写入U0LCR

	/* 配置中断 */
	U0IER = 0x03;							// 设置中断使能寄存器,使能RDA和THRE中断
	U0FCR = 0x81;							// 使能FIFO,并设置FIFO缓冲区大小为8个字节
	
        VICIntEnClr |= 1 << UART0_INT;					// 禁止本中断
	
	VICVectPri6 = 0x05;						// 设置串口中断优先级为5
	VICVectAddr6 = (uint32)IRQ_UART0;				// 装入串口中断服务程序地址

	VICIntEnable |= 1 << UART0_INT;					// 使能本中断
	}

/*********************************************************************************************************
** 函数名称 :UART0_SendData
** 功能描述 :从串口0发送数据
** 入口参数 :data_buf:发送数据缓冲区首地址
**	     count :发送字节数
** 出口参数 :无
********************************************************************************************************/
void UART0_SendData(uint8 *data_buf,uint8 count)
{
	uint32 i = 0;
	
	for(i = 0;i < count;i++) U0THR   = data_buf[i];
}

/*********************************************************************************************************
** 函数名称 :main
** 函数功能 :以中断方式从串口UART0接收字符并不断发送回上位机显示。
** 入口参数 :无。
** 出口参数 :若为0则表明程序出错。
** 调试说明 :需要PC串口显示终端软件如EasyARM.exe。在启动代码文件里需打开IRQ中断(已经设置)
*********************************************************************************************************/
int main (void)
{
	UART0_AllIni();					// 初始化串口0的引脚,通讯参数,中断参数,设置FIFO使能且触发字节为8个
	while (1)
	{
		if (rcv_new == 1)			// 检查接收标志,若接收到字符串则再将其发送回去
		{	
		 rcv_new = 0;
		 UART0_SendData(rcv_buf,8);		// 串口0接收到字符串后,再发送回去
		}
	}
 //   return 0;
}

/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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