小弟在写程序,遇到这个问题好几天了,不得解,还望大神赐教,主程序仿真显示一直死在while(!Finish_Flag);这一句。但是再DMA的中断函数中已明显执行了Finish_Flag=1。
while(1)
{
PDout(2)=0;
while((bDeviceState != CONFIGURED)||(buffer_out[0]!=0x55)||(buffer_out[4]!=0x0D));
while(!Finish_Flag); // 等待上一次结束
start();
Finish_Flag=0;
// 执行到这了
while(!Finish_Flag); // 等待一次采集结束
// 没有执行到这
}
程序流程是:等待串口数据,判断,开始定时器,在定时器的中断里开启AD与DMA,DMA传送了N个数据之后进中断,在DMA中断函数中虚拟串口发送数据,并且 Finish_Flag=1。我已经收到了一次数据,但是发送完之后应该跳到程序的开头等待下一次的指令,可是程序一直死在while(!Finish_Flag);DMA中断服务函数如下
void DMAChannel1_IRQHandler(void)
{
u16 i,j;
disable(); //关闭定时器与AD
for(i=0;i<5;i++)
buffer_out=0; //将判断条件置零
for(j=0;j<3694;j++)
{
CCD_Buf[2*j]=(u8)(ADC_Buf[j] & 0x00FF);
CCD_Buf[2*j+1]=(u8)((ADC_Buf[j] & 0xFF00)>>8);//d字节在前,高字节在后
}
pbuffer_in_usb=CCD_Buf;
usart_2_usb_send(); //发送采集的数据,已经收到一次数据
Finish_Flag=1; //标志位改变,使能重新开始接受指令
PDout(2)=1;
//执行到这了
DMA1->IFCR|=0x0F; // 清DMA中断标志 PDout(2)=1;
}
用PD2标记执行
请大神们多多指点。
|