|
void dbgu_c_irq_handler(void)//中断函数
{
if ((AT91F_US_RxReady((AT91PS_USART)AT91C_BASE_DBGU)) != 0)
{
iTimeOut=0;
byRec[byRecCount]= AT91F_US_GetChar((AT91PS_USART)AT91C_BASE_DBGU) & 0xff;
byRecCount++;
}
}
void AT91F_DBGU_Init(void)
{
// 配制DBGU的PIO
AT91F_DBGU_CfgPIO();
//* 复位发送功能,允许发送
AT91F_US_ResetTx ((AT91PS_USART)AT91C_BASE_DBGU);//调用库函数
//* 复位接收功能,允许接受
AT91F_US_ResetRx ((AT91PS_USART)AT91C_BASE_DBGU);//调用库函数
// 配置DBGU的特性
AT91F_US_Configure (
(AT91PS_USART) AT91C_BASE_DBGU, // DBGU 基地址
AT91B_MCK,
AT91C_US_ASYNC_MODE , // 编程模式寄存器
115200 , // 编程波特率
0); // 触发时间编程
//允许DBGU口发送和接受
((AT91PS_USART)AT91C_BASE_DBGU)->US_CR = AT91C_US_RXEN | AT91C_US_TXEN;
AT91F_DBGU_InterruptEnable(AT91C_BASE_DBGU, 1<<0);//接受中断使能
//禁止其他的所有中断
AT91F_DBGU_InterruptDisable(AT91C_BASE_DBGU, !(1<<0));
//配制DBGU中断
AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC,
AT91C_ID_SYS,
DBGU_INTERRUPT_LEVEL,
AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL,
dbgu_c_irq_handler);
}
请朋友帮我看看,这段代码是否可以?
AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_SYS);
已经在其他地方执行。
程序执行是:当PC发送数据到板子上时,系统就不运行了,重新复位才恢复正常。
不知道DBGU的中断设置哪里有问题了,请有经验的朋友指点! |
|