唐先生及各位大虾,在各位的帮助下小弟的任务已经接近完成,看到胜利的曙光了,在这里小弟先行谢过了。
现在还有一个我感觉蛮奇怪的问题,以下是小弟代码的框架:
头文件略
DMA_Start()
{
… //DMA初始化的一些动作
SIGEV_INTR_INIT(&event );
pthread_create (thread, NULL,PCI_ISR_0, NULL);
}
DMA_Status( int *status, int *count )
{
//从控制器获取当前DMA状态及传输的数据量
}
DMA_Stop()
{
pthread_cancel(thread);
InterruptDetach(rs);
}
void PCI_ISR_0 (void arg)
{
rs = InterruptAttach (irq_no, handler0, NULL, 0, 0);
if (rs == -1)
printf (“IntConnect ERR %d \n”);
while(1)
{
InterruptWait (NULL, NULL);
//printf(“Now Interrupt attached!\n”);
//break;
}
pthread_exit(0);
}
const struct sigevent *handler0(void *arg, int id)
{
//中断服务,判断DMA引发的中断并处理
return (&event);
}
main()
{
//初始化略
DMA_Start();
do{
DMA_Status (&status, ¤tCount);
printf("\nThe Current Count is %d.\n", currentCount);
}while ((status == AD_DMA_RUN) && (getchar()!=KEY_ESC));
DMA_Stop();
}
现在的问题就是在主函数中那个判断status的循环只循环一次,然后我必须按回车才能继续执行。有点不大明白,请各位大虾指点。