📄 main.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: Litiantian
** Modified date: 2006-12-30
** Version:
** Descriptions: UART0通讯实验,中断方式。
**
********************************************************************************************************/
#include "config.h"
#define UART0_INT 6
uint8 rcv_buf[8]; // UART0数据接收缓冲区
volatile uint8 rcv_new = 0; // 接收新数据标志
/*********************************************************************************************************
** 函数名称 :IRQ_UART0
** 函数功能 :串口0接收中断服务程序
** 入口参数 :无。
** 出口参数 :无。
*********************************************************************************************************/
void __irq IRQ_UART0(void)
{
uint8 i = 0;
rcv_new = 1; // 设置接收到新的数据标志
for (i=0; i<8; i++) rcv_buf[i] = U0RBR; // 读取FIFO的数据,并清除中断
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 = 0x01; // 设置中断使能寄存器,使能RDA中断
U0FCR = 0x81; // 使能FIFO,并设置FIFO缓冲区大小为8个字节
VICIntEnClr |= 1 << UART0_INT; // 禁止本中断
VICVectPri6 = 0x05; // 设置串口中断优先级为5
VICVectAddr6 = (uint32)IRQ_UART0; // 装入串口中断服务程序地址
VICIntEnable |= 1 << UART0_INT; // 使能本中断
IRQEnable(); // 使能IRQ中断
}
/*********************************************************************************************************
** 函数名称 :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];
while ( (U0LSR & 0x20) == 0 );
}
}
/*********************************************************************************************************
** 函数名称 :main
** 函数功能 :以中断方式从串口UART0接收字符并不断发送回上位机显示。
** 入口参数 :无。
** 出口参数 :若为0则表明程序出错。
** 调试说明 :需要PC串口显示终端软件如EasyARM.exe。
*********************************************************************************************************/
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;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -