unsigned char flag=0;
unsigned short TXbuf[256];
unsigned short RXbuf[512];
#define UART_9600bps 351
/****************************************************************************
* 名称 : UARTinit
* 功能 : 初始化UARTinit
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void UARTinit(unsigned short div)
{
*pUART_GCTL=0x0009; //0x0001 为UART 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
* 功能 : 在中断中接受数据
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
static unsigned short cont=0;
EX_INTERRUPT_HANDLER(UART_ISR)
{
if(*pUART_LSR&DR) //判断是否有新的数据。
{
if(cont>512) //防止buff溢出,测试代码,将接收到的数据重复写入512字节的buff
cont = 0;
RXbuf[cont]=*pUART_RBR;
cont++;
}
}
Test_TX()
{
int i;
for(i=0;i<0xff;i++) //发送测试函数,将生成的数据通过IR发送出去。
{
*pUART_THR=i;
while(!(*pUART_LSR&0x0020));
}
}
void Setup_Interrupt_irda(void) //UART INT init
{
*pSICA_IAR3 = 0xfff2ffff;
register_handler (ik_ivg9, UART_ISR);
*pSICA_IMASK0 = 0x10000000;
}
void main()
{
Set_PLL( (short)(CORECLK/CLKIN), (short)(CORECLK/SYSCLK));
Init_EBIU();
UARTinit(UART_9600bps); //设置串口波特率为9600bps
Setup_Interrupt_irda();
*pCtrOut_Flag_OE &= (0xff&(~IRDA_SD)); //置低IRDA的SD脚
while(1)
{
Test_TX(); //发送数据,测试接受数据时应屏蔽此函数,否则会干扰接受
}
}