中级会员
- 积分
- 449
- 威望
- 211
- 贡献
- 138
- 兑换币
- 136
- 注册时间
- 2014-12-3
- 在线时间
- 50 小时
- 毕业学校
- 上海工程技术大学
|
我用的是ov7620摄像头dma传输数据,用的是羽良工作室的采集代码,运行时没有错误,但是调试的时候一直进入不了行中断,而且行计数值也一直处于很奇怪的状态,求各位大神帮忙化解。
V_Cnt=0; //行计数
Is_SendPhoto=0; //变量初始化 //从串口发送图像
u16 i=0,j=0;
exti_init(PORTA,29,9); //行中断,PORTA29 端口外部中断初始化 ,上升沿触发中断,内部下拉
disable_irq(87); //行中断关闭
exti_init(PORTB,0,10); //场中断,PORTB0 端口外部中断初始化 ,下降沿触发中断,内部下拉
uart_init(UART0,170000,115200);
EnableInterrupts;
while(1)
{
//串口调试
if(Is_SendPhoto)
{
/*************************************************************************/
//直接发送灰度数据,上位机软件会把图像信息显示出来
disable_irq(87);
disable_irq(88); //关闭PORTB中断,即关闭场中断,防止串口发送图像数据进程被打乱
//以下四句话是固定格式,是串口和上位机软件之间的协议
uart_putchar(UART0,0);
uart_putchar(UART0,255);
uart_putchar(UART0,1);
uart_putchar(UART0,0);
for(i=0;i<V;i++)
{
for(j=0;j<H;j+=4)
{
uart_putchar(UART0,Pix_Data[j]);
}
}
enable_irq(88); //打开PORTB中断
enable_irq(87);
Is_SendPhoto=0;
uart_putchar(UART0,'\r');
uart_putchar(UART0,'\n');
}
}
}
下面是另一个c文件中的中断
void DMA_CH4_Handler(void)
{
DMA_IRQ_CLEAN(DMA_CH4); //清除通道传输中断标志位 (这样才能再次进入中断)
DMA_DIS(DMA_CH4); //采集完H个数据后进入这个DMA中断,停止DMA传输。行中断中打开DMA传输
/********************/
//串口调试用到
if(V_Cnt == 240)
Is_SendPhoto = 1;
/*******************/
}
/****************************************************
//行中断处理函数
void PORTA_IRQHandler()
{
if((PORTA_ISFR & (1<<29))) //PTA29触发中断,行中断
{
PORTA_ISFR |= (1<<29); //写1清中断标志位
/**************用户任务**************************************************/
if((++V_Cnt)%6 == 0) //判断该行数据是否需要,根据自己需要的行数自己设定判别条件
{
DMA_EN(DMA_CH4); //使能通道CHn 硬件请求
}
//可以在这里判断需要的数据是否已经采集完,可以设置一个标志位
/****************
*这里也可以进行数据处理
*****************/
/************************************************************************/
}
}
//场中断处理函数
void PORTB_IRQHandler()
{
if(PORTB_ISFR & (1<<0)) //PTB0触发中断,场中断
{
PORTB_ISFR |= (1<<0); //写1清中断标志位
Is_SendPhoto = 0; //发送图像标志,串口调试要用
/**************用户任务**************************************************/
//奇偶场判别
FieldCounter++;
if(FieldCounter>= 2)
{
FieldCounter = 0;
}
//奇场 采集图像
if(FieldCounter == 0)
{
DMA_PORTx2BUFF_Init(DMA_CH4, (void *)&PTD_BYTE0_IN, Pix_Data, GPIOC,GPIO_Pin_0, DMA_BYTE1, H, DMA_rising_keepon);
//DMA通道4初始化,PTC0上升沿触发DMA传输,源地址为PTD_BYTE0_IN,目的地址为:Pix_Data ,每次传输1Byte,传输H次后停止传输,目的地址保持不变,关闭通道CHn 硬件请求
enable_irq(87); //使能PORTA中断,即开启行中断,PORTA的ISR中断号为87
V_Cnt=0; //行采集计数清零
Is_SendPhoto = 0; //发送图像标志
}
//偶场
else
{
DMA_DIS(DMA_CH4); //停止DMA传输
disable_irq(87); //关闭PORTA中断,即关闭行中断,PORTA的ISR中断号为87
disable_irq(88);
Is_SendPhoto = 1; //发送图像标志
}
上面是采集部分,然后下面就是我烧写程序调试时,用watch窗口看的变量,V_Cnt形式不懂,然后行中断的数字也感觉不对,不应该是1吗?求大神帮忙啦~
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|