跨届大侠
火云邪神
- 积分
- 6644
- 威望
- 3359
- 贡献
- 2001
- 兑换币
- 765
- 注册时间
- 2011-8-24
- 在线时间
- 642 小时
|
本帖最后由 ☆_。寒泉..+ 于 2012-6-15 08:14 编辑
前言:我摄像头是倒着装的,我打印的时候是倒着打印的所以看起来图像还是正的
首先说明一下我的场中断和行中断都是好的,我测试的时候首先关闭总中断,然后开启场中断在场中断里面关闭场中断,开启行中断和某一IO口置高,然后进行中断在行中断关闭行中断,开启场中断IO置低,这样就能看到是否可以两个中断互相制约,我两个都是下降沿上拉。我就用地线测试程序,结果小灯会量暗证明中断好使,我的视频奇偶场信号与行中断信号都是好使的,用示波器侧过了绝对没有问题,
我的采集程序是这样的,首先程序一开始的时候开场中断,在场中断里面关闭场中断,开启行中断,行清零
在行中断里面的是关闭行中断,用for循环采集图像,(这个采集行的程序是正常的没有问题)然后hang++ 当行数大于100的时候关闭行中断并且令flag=1;(用于开启打印程序),否则开启行中断以便于下次进入
下面是程序
中断:
void PORTC_IRQHandler()
{
if(PORTC_ISFR & (1 << 4)) //PTC4触发中断 行中断
{
PORTC_ISFR |= (1 << 4); //写1清中断标志位
disable_irq(89); //关行中断
point=0;
for(count2=0;count2<100;count2++)
{
asm("nop");
}
for(point=0;point<LIST;point++)
{
PIC[line][point]=PTC8_IN; // gpio_get(PORTD,7);
count2=PTC3_IN;
}
line++;
// gpio_set(PORTA,15,0);
// count1++;
if(hang>=100)
{
disable_irq(89); //关行中断
flag=1;
}
else
{
enable_irq(89); //开行中断
}
}
}
//场中断任务
void PORTD_IRQHandler()
{
if(PORTD_ISFR & (1 << 4)) //PTD4 触发中断 场中断
{
PORTD_ISFR |= (1 << 4); //写1清中断标志位
/* 用户任务 */
disable_irq(90); //关场中断
count1=0;
line=0; //行列清零
enable_irq(89); //开行中断
}
}
其中count2=PTC3_IN;当做是延时了,波形侧过了没问题一行采集图像没问题的
打印函数:
void video_print(void)
{
u8 i=201,j=100;
disable_irq(90u);
disable_irq(89u);
for(j=LINE-1;j>0;j--)
{
printf("1: ");//行数加一
for(i=LIST-1;i>0;i--)
{
printf("%d",PIC[j]);
}
printf(" \n "); //换行
}
printf(" \n ");
printf(" \n ");
printf(" \n ");
printf(" \n ");
flag=0;
enable_irq(90); //开场中断
}
主函数
while(1)
{
if(flag==1)
{
video_print();
}
}
这样的程序是只有打印完了才能进入采集,采集完了才会进入打印,不会出现打印一半又重新采集去了,
下面上图 注意:中间的白色空格就是两场之间的空隙,我用了四个回车,但是两幅图像貌似接到一起了但是衔接的也不怎么样,我就怀疑是场中断没有关闭造成的,或者是行中断没有关闭造成的,这就导致行数无法清零,或者是场中断以后不知道什么时候才进入行中断,或者是总线时钟不够,我的是200M不知道有没有能力识别到行中断,有的时候采集起跑线发现有时候是3行有时候是2行,不知道是不是行中断有的时候没有进去,悲催啊,求大神啊
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|