📄 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: UART3 IrDA发送实验。
**
********************************************************************************************************/
#include "config.h"
#define UART_BPS 115200 // 设定IrDA数据发送的波特率,同时也设置UART0和上位机通讯的波特率
/*********************************************************************************************************
** 函数名称:IrDASndIni
** 函数功能:按默认值初始化串口3的引脚和通讯参数。设置为8位数据位,1位停止位,无奇偶校验,波特率115200,使用IrDA
** 入口参数:无
** 出口参数:无
**********************************************************************************************************/
void IrDASndIni (void)
{
uint32 Fdiv = 0;
PCONP |= 1 << 25; // 打开UART3
/* 初始化相关的IO */
PINSEL9 = (0x03 << 24) | (0x03 << 26); // 设置P4.28和P4.29连接到UART3
/* 初始化串口通讯参数 */
U3LCR = 0x80; // 使能对除数锁存器的访问
Fdiv = (Fpclk / 16) / UART_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 |= 0x01 << 3; // 设置脉宽为2个Tpclk
}
/*********************************************************************************************************
** 函数名称:IrDASndDat
** 函数功能:通过UART3,以IrDA的帧格式发送一个字节
** 入口参数:uint8 dat:待发送的数据字节
** 出口参数:无
**********************************************************************************************************/
void IrDASndDat(uint8 dat)
{
U3THR = dat;
while ( (U3LSR & 0x20) == 0 ); // 等待发送FIFO为空
}
/*********************************************************************************************************
** 函数名称:main
** 函数功能:发送数据到IrDA收发模块。
** 入口参数:无
** 出口参数:返回0则表示程序出错。
** 调试说明:1、使交换数据的两个红外设备的收发端对准;
** 2、此外要注意波特率和帧格式的一致;
** 3、在负责IrDA接收的SmartARM2300上,要注意将JP1上的IR_EN接地,以选择IrDA1.0的解码方式,否则接收数据出错
** 4、如果需要逻辑分析仪观察IrDA数据帧,可以将主程序里的延时语句生效,方便观察。
*********************************************************************************************************/
int main (void)
{
uint32 i = 0;
IrDASndIni(); // 串口3初始化为波特率115200,帧格式设置为8位数据位,1位停止位,无奇偶校验,且初始化串口引脚,并且配置好IrDA
while(1)
{
for(i = 0;i < 50;i++) IrDASndDat(i); // 发送数据0~49
// for(i = 0;i < 2000;i++); // 延时,以便用逻辑分析仪进行观察。
}
return 0;
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -