中级会员
- 积分
- 410
- 威望
- 205
- 贡献
- 93
- 兑换币
- 107
- 注册时间
- 2015-1-31
- 在线时间
- 56 小时
- 毕业学校
- 上海交通大学
|
u8 VSYN_Flag;
void main()
{
DisableInterrupts; //禁止总中断
uart_init (UART0 , 115200); //初始化UART0,输出脚PTA15,输入脚PTA14,串口频率 9600
///////////////////////////////////
pit_init_ms(PIT0,5); //初始化PIT0,定时时间为: 5ms
OV7620_Init();
PWM_Init();
EnableInterrupts;
while(1)
if( VSYN_Flag == 1) //SCCB写成功 图像采集一帧结束///////////函数就在这里标志位老是0,请大家帮忙看看吧,谢谢了
{
send_image();//上位机看原始图像、包含发送图像到上位机
}
}
/////////////////////////////////////////////////////////////
extern u8 Buffer[ROW][COL];
extern u8 VSYN_Flag;
u8 DMA_Over_Flg,row_count =0;
u8 flag_jichang=0,ji_ou_choice=0;
volatile u16 ge_hang = 0 ; //行计数u8
//每2cm确定的行
void PORTD_IRQHandler() //行中断 60us
{
if(PORTD_ISFR & (1 << 14))//PTD14触发中断,采集的行中断
{
PORTD_ISFR |=(1 << 14);//写1清中断标志位
if(VSYN_Flag ==0)//不满一场返回
return;
row_count++ ;
if(row_count==Ge_hang_tuxiang[ge_hang])//隔行采集
{ //通过PTD12像素同步信号进行触发,采集下降沿前200个(硬件进行了4分频),数据通过PTD前8个口传送,存入二维数组Buffer[ge_hang]中。
DMA_PORTx2BUFF_Init (DMA_CH4, (void *)&PTD_BYTE0_IN,Buffer, PTD12, DMA_BYTE1,200, DMA_rising_down); //_down
DMA_IRQ_CLEAN(DMA_CH4); //清除通道传输中断标志位 (这样才能再次进入中断)
DMA_IRQ_EN(DMA_CH4) ; //允许DMA通道传输
DMA_EN(DMA_CH4); //使能通道CHn 硬件请求 (这样才能继续触发DMA传输)
ge_hang++;
if(ge_hang >= 50)//采样行数 50 这里采集的50行是已经隔行处理的
{
ge_hang=0;
}
}
}
if(PORTD_ISFR &(1 <<13))//PTC8触发中断,采集的场中断。
{
PORTD_ISFR |= (1 <<13);//写1清中断标志位
ji_ou_choice++;//奇偶场判断
if(ji_ou_choice==1)//奇场采集
{
row_count = 0 ;
ge_hang=0;
VSYN_Flag==1;//满一场进入标志
// enable_irq(PORTD+87);
}
else if(ji_ou_choice>=2)//290us 偶场处理
{
ji_ou_choice=0;
disable_irq(PORTD+87);
//process();拟合图像
//display_saidao();//oled显示赛道
// display_OLED();//1.2ms
//send_image();//发送原始图像
}
}
}
|
|