请教各位,我用了LPC2103的串口中断程序时钟不能产生中断什么原因,大家帮忙看看。程序如下:
主程序
int main (void)
{
uiGRcvNew = 0;
PINSEL0 = PINSEL0 & (~0x0F);
PINSEL0 = PINSEL0 | 0x05; /* 设置I/O连接到UART */
UARTInit(); /* 串口初始化 */
U0FCR = 0x01; /* 使能FIFO,设置8个字节触发点 */
U0IER = 0x01; /* 使能接收中断 */
IRQEnable();
//VICIntEnClear = 0xffffffff;
VICIntSelect = 0x00000000; /* 设置所有中断为向量中断 */
VICVectCntl0 = 0x20 | 0x06; /* 设置串口中断为最高优先级 */
VICVectAddr0 = (uint32)UART0_IRQ; /* 设置向量地址 */
VICIntEnable = 1 << 0x06; /* 使能串口中断 */
while(1)
{ /* 判断是否有新数据 U0RBR */
if (uiGRcvNew == 1)
{
uiGRcvNew = 0; /* 清除标志 */
UART0SendStr (uiGRcvBuf, uiGNum); /* 向串口发送数据 */
}
}
return 0;
}
中断入口程序
void __irq UART0_IRQ (void)
{
n++;
uiGNum = 0;
while ((U0IIR & 0x01) == 0)
{ /* 判断是否有中断挂起 */
switch (U0IIR & 0x0f)
{ /* 判断中断标志 */
case 0x04: /* 接收数据中断 */
uiGRcvNew = 1; /* 置接收新数据标志 */
for (uiGNum = 0; uiGNum < 8; uiGNum++) /* 连续接收8个字节 */
{
uiGRcvBuf[uiGNum] = U0RBR;
}
break;
case 0x0C: /* 字符超时中断 */
uiGRcvNew = 1;
while ((U0LSR & 0x01) == 1) /* 判断数据是否接收完毕 */
{
uiGRcvBuf[uiGNum] = U0RBR;
uiGNum++;
}
break;
default: break;
}
}
if (uiGRcvNew == 1)
{
uiGRcvNew = 0; /* 清除标志 */
for(uiGNum=0;uiGNum<8;uiGNum++)
{
sprintf(cStr,"接收数据为:%d\n",*p);
ISendStr (0,0,0x30,cStr);
}
}
VICVectAddr = 0x00;
}
始终不能产生中断,请问是什么原因? |