📄 main.c
字号:
/****************************************Copyright (c)****************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.embedtools.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:
** Modified date:
** Version:
** Descriptions:
**
**********************************************************************************************************/
#include "main.h"
#define IrDA_BPS 115200
/*********************************************************************************************************
** 函数名称:IrDASndInit
** 函数功能:按默认值初始化串口3的引脚和通讯参数。设置为8位数据位,1位停止位,无奇偶校验,波特率115200,
** 使用IrDA
** 入口参数:无
** 出口参数:无
**********************************************************************************************************/
void IrDASndInit(void)
{
uint32 Fdiv = 0;
PCONP |= (1 << 25); /* 打开UART3 */
PINSEL9 = (PINSEL9 &(~(0x0F << 24))) | (0x03 << 24) | (0x03 << 26); /* 设置P4.28和P4.29连接到UART3 */
/*
* 初始化串口通讯参数
*/
U3LCR = 0x80; /* 使能对除数锁存器的访问 */
Fdiv = (uint32)(Fpclk / 16) / IrDA_BPS; /* 设置波特率 */
U3DLM = (unsigned long)Fdiv / 256;
U3DLL = (unsigned long)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连接,P0.14和IR_EN连接
**********************************************************************************************************/
int main(void)
{
uint8 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 FILE
**********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -