📄 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: Litiantian
** Created date: 2006-12-30
** Version: 1.0
** Descriptions: UART3 IrDA演示,发送端的程序。
**
**------------------------------------------------------------------------------------------------------
** Modified by: yangshiping
** Modified date: 2007-09-03
** Descriptions: 对代码风格和注释进行了调整、校对
**
********************************************************************************************************/
#include "config.h"
#define IrDA_BPS 115200
/*********************************************************************************************************
** 函数名称:IrDASndInit
** 函数功能:按默认值初始化串口3的引脚和通讯参数。设置为8位数据位,1位停止位,无奇偶校验,波特率115200, 使用IrDA
** 入口参数:无
** 出口参数:无
**********************************************************************************************************/
void IrDASndInit(void)
{
uint32 Fdiv = 0;
/* 使能UART3 */
PCONP |= (1 << 25); // 打开UART3
/* 初始化相关的IO */
PINSEL9 = (0x03 << 24) | (0x03 << 26); // 设置P4.28和P4.29连接到UART3
/* 初始化串口通讯参数 */
U3LCR = 0x80; // 使能对除数锁存器的访问
Fdiv = (Fpclk / 16) / IrDA_BPS; // 设置波特率
U3DLM = Fdiv / 256;
U3DLL = Fdiv % 256;
U3LCR = 0x03; // 令DLAB位为0,并且设置帧格式为8位数据位,1位停止位,无奇偶校验
U3FCR &= ~0x07; // 禁用FIFO
U3IER &= ~0x07; // 禁止UART产生中断
/* 配置IrDA */
U3ICR = 0; // 清零IrDA控制寄存器
U3ICR |= 0x05; // 使能UART3的IrDA功能, 设置脉宽固定
U3ICR &= ~(0x07 << 3); // 设置脉宽为2个Tpclk
}
/*********************************************************************************************************
** 函数名称:IrDASndDat
** 函数功能:通过UART3,以IrDA的帧格式发送一个字节
** 入口参数:uint8 dat:待发送的数据字节
** 出口参数:无
**********************************************************************************************************/
void IrDASndDat(uint8 dat)
{
U3THR = dat;
while ((U3LSR & 0x40) == 0); // 等待UART发送器为空
}
/*********************************************************************************************************
** 函数名称:main
** 函数功能:发送数据到IrDA收发模块。
** 入口参数:无
** 出口参数:返回0则表示程序出错。
** 调试说明:1、使交换数据的两个红外设备的收发端对准;
** 2、此外要注意波特率和帧格式的一致;
** 3、如果需要逻辑分析仪观察IrDA数据帧,可以将主程序里的延时语句生效,方便观察;
** 4、需用短路器将P4.28和IR_T短接。
*********************************************************************************************************/
int main(void)
{
uint32 i = 0;
// uint32 j = 0;
IrDASndInit(); // 串口3初始化为波特率IrDA_BPS, 帧格式设置为8位数据位,1位停止位,无奇偶校验, 且初始化串口引脚, 并且配置好IrDA
while (1)
{
for (i = 0; i < 50; i++)
{
IrDASndDat(i); // 发送数据0~49
// for (j = 0; j < 2000; j++); // 延时, 以便用逻辑分析仪进行观察IrDA发送帧。
}
}
return (0);
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -