LPC2294的P0.1和P0.0作为串口接收单片机发来的按键值(0x01,0x02......),不知道程序哪里有问题,单片机发出来的数据用串口调试助手可以收到,为什么ARM收不到,还有就是U0FCR 设置为触发点为1个字节对不对?按键值在单片机定义的是char型。
void UART0_Ini(uint32 baud) baud为9600
{
uint32 bak;
PINSEL0 = PINSEL0 | 0x00000005; //使用P0.0-TXD(UART0)和P0.1-RXT(UART0)
U0LCR = 0x83; // DLAB位置1
bak = (Fpclk >> 4) / baud;
U0DLM = bak >> 8;
U0DLL = bak&0xff;
U0LCR = 0x03; //字长选择8bit,清DLAB,无奇偶校验;
U0FCR = 0x01; // 使能FIFO,设置触发点为1字节,并复位RXFIFO
U0IER = 0x01; // 允许RBR中断,即接收中断
//设置中断允许
VICIntSelect = 0x00000000; // 设置所有通道为IRQ中断
VICVectCntl1 = 0x26; // UART0中断通道分配到IRQ slot 1,即优先级second
VICVectAddr1 = (uint32)IRQ_UART0; // 设置UART1向量地址
VICIntEnable = (1<<6); // 使能UART0中断
}
void __irq IRQ_UART0(void)
{
uint8 i;
// IO0SET=(0X00000001<<23);
uart0=1;
if( (U0IIR&0x0F)==0x04)
{//接收字节数达到接收FIFO中的出发点(RDA)中断
/*for(i=0;i<14;i++)
{
uart0_buf[i]=U0RBR; // 读取FIFO的数据,并清除中断标志
}*/
keynum = U0RBR;
}
else
{//接收超时(CTI)中断
U0FCR=0XC3; //bit2 = 1,清空UARTn接收FIFO,并使指针逻辑复位
}
VICVectAddr = 0x00; // 中断处理结束
}
|