IrDA的初始化功能
0赞
发表于 1/7/2012 3:22:29 PM
阅读(2038)
#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(); //发送数据,测试接受数据时应屏蔽此函数,否则会干扰接受 } }