默れ

IrDA的初始化功能

0
阅读(1986)
#include "dm_bf5xx.h"
#include "dm_cpu.h"

#define  UART_9600bps		351
unsigned short TXbuf[256];
unsigned short RXbuf[512];
static unsigned short cont=0;

EX_INTERRUPT_HANDLER(UART_ISR);
/****************************************************************************
* 名称 : UARTinit
* 功能 : 初始化UARTinit
* 入口参数 :div   串口波特率的配置值
* 出口参数 :无
****************************************************************************/
void UARTinit(unsigned short div)
{
 	 
	*pUART_GCTL=0x000b;// Irda mode 允许                                                                                            
	*pUART_LCR=0x0080;// DLAB=1 允许访问DLL 和DLH
	*pUART_DLL=div;
	*pUART_DLH=div>>8; //DLL DLH分别赋值
	*pUART_LCR=0x0003;//  允许访问 RBR THR 和IER 
	*pUART_IER=0x0001;//  接收中断允许
}

/****************************************************************************
* 名称 : EX_INTERRUPT_HANDLER(UART_ISR) 
* 功能 : 在中断中接受数据
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
EX_INTERRUPT_HANDLER(UART_ISR)
{	
	if(*pUART_LSR&DR)          //判断是否有新的数据。
	{
		if(cont>512)			//防止buff溢出,测试代码,将接收到的数据重复写入512字节的buff
		cont = 0;		
		RXbuf[cont]=*pUART_RBR;
		cont++;
	}
}

/****************************************************************************
* 名称 : Init_Interrupts
* 功能 : 初始化中断
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void Init_Interrupts(void)
{
	*pSIC_IAR0 = 0xf0ffffff;     // UART ERROR
	*pSIC_IAR1 = 0xf3ffffff;     // UART 中断定义
	*pSIC_IAR2 = 0xfffFFffF;					
	register_handler(ik_ivg10, UART_ISR);		// UART ISR -> IVG 10
	*pSIC_IMASK = 0x00004040;
}

/****************************************************************************
* 名称 : Test_TX
* 功能 : 通过串口发送测试数据
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void Test_TX(void)
{
	int_t i;			
	for(i=0;i<0xff;i++)			//发送测试函数,将生成的数据通过IR发送出去。
	{	
		*pUART_THR=i;
    	 while(!(*pUART_LSR&0x0020));
    }

}
/****************************************************************************
* 名称 : main
* 功能 : 红外线数据传输测试主函数
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void main(void)
{ 
	Set_PLL(22,5);  			//配置内核时钟为594M,系统时钟为118.8M
    UARTinit(UART_9600bps);		//设置串口波特率为9600bps
    Init_Interrupts();			//初始化中断
    Init_EBIU();
	init_UART_CPLD();
	while(1)
	{
		Test_TX(); 				//发送数据,测试接受数据时应屏蔽此函数,否则会干扰接受	
	}
}