智能车制作
标题:
OV7620采集程序疑问
[打印本页]
作者:
motoy
时间:
2016-3-3 21:44
标题:
OV7620采集程序疑问
当采集完240行后,中断里我已经禁止了行中断和场中断,我强行把图像数据格更,为什么在串口打印不能打印0x56?
复制代码
extern u32 rowCnt ; //行计数
extern u8 ImageBuf[ROW][COL];
u8 SampleFlag = 0;
void PORTA_IRQHandler()
{
//---HREF行中断处理
if( PORTA_ISFR & (1 << 9)) //PTA9触发中断
{
PORTA_ISFR |= (1 << 9); //写1清中断标志位
if ( SampleFlag == 0 ) //不足一场时返回
{
return;
}
//-------------DAM初始化通道4,数据源为PTD,每次存在数组ImageBuf[]指针中,PCLK接PT19触发,每次传输1个字节,每次触发传输320次,上升沿触发
DMA_PORTx2BUFF_Init (DMA_CH4, (void *)&PTD_BYTE0_IN, ImageBuf[rowCnt], PTC19, DMA_BYTE1, 320, DMA_rising);
//----使能DMA,初始化的时候禁止DMA
DMA_EN(DMA_CH4);
rowCnt++;
if(rowCnt == 240)
{
rowCnt = 0;
DMA_DIS(DMA_CH4);
SampleFlag = 0;
//---------若为动态显示,删除此行------------//
// DisableInterrupts;
disable_irq(PORTA + 87);
}
}
//---VSYN场中断处理
if(PORTA_ISFR & (1 << 27)) //PTA27触发中断 场中断
{
PORTA_ISFR |= (1 << 27); //写1清中断标志位
rowCnt = 0;
SampleFlag = 1;
}
}
/*************************************************************************
* 岱默科技DEMOK Kinetis开发小组
*
* 函数名称:DMA_CH4_Handler
* 功能说明:DMA通道4的中断服务函数
* 参数说明:无
* 函数返回:无
*
*************************************************************************/
void DMA_CH4_Handler(void)
{
//DMA通道4
DMA_IRQ_CLEAN(DMA_CH4); //清除通道传输中断标志位 (这样才能再次进入中断)
DMA_IRQ_DIS(DMA_CH4); //禁止DMA 等待下一次行中断来临开启DMA
}
复制代码
作者:
motoy
时间:
2016-3-3 21:45
这是main函数
u8 ImageBuf[ROW][COL];
volatile u8 VSYN = 1;
volatile u32 rowCnt = 0 ;
u8 uFirstDisp = 0;
u32 otsu(u8 image[240][320]);
u32 threshold = 0;
void main()
{
u32 i,j;
DisableInterrupts;
sccb_init();
//-----------SCCB恢复默认出厂设置----------//
//--PCLK:70ns HREF:63us VSYN:33.33ms--//
//--原分辨率为640*480
//--在每两个HREF之间有1280个PCLK---U Y V Y U Y V Y
//--在每两个VSYN之间有240个HREF //OV7620是隔行采集
//sccb_regWrite(0x42,0x11,0x00);
//sccb_regWrite(0x42,0x14,0x04);
//sccb_regWrite(0x42,0x28,0x20);
//---------------------------------------//
//----------SCCB寄存器配置---------------//
sccb_regWrite(0x42,0x11,0x03); //地址0X11-中断四分频(640*240) PCLK:166ns HREF:254.6us VSYN:133.6ms
sccb_regWrite(0x42,0x14,0x24); //地址0X14-QVGA(320*120) PCLK:332ns HREF:509.6us VSYN:133.6ms
sccb_regWrite(0x42,0x28,0x20); //地址0X28-连续采集模式(320*240) PCLK:666ns HREF:509.6us VSYN:133.6ms
sccb_wait();
//----初始化图像数组----//
for(i=0; i<ROW; i++)
{
for(j=0;j<COL ;j++)
{
ImageBuf[i][j] = 0;
}
}
//----初始化串口------//
uart_init (UART1, 115200);
//----初始化外部中断---//
exti_init(PORTA, 9, rising_down); //HREF----PORTA3 端口外部中断初始化 ,上升沿触发中断,内部下拉
exti_init(PORTA, 27, rising_down); //VSYN----PORTA5 端口外部中断初始化 ,上升沿触发中断,内部下拉
EnableInterrupts;
while(1)
{
uart_putchar(UART1,0xFF); //图像头
if(!uFirstDisp)
{
uFirstDisp = 1;
threshold = otsu(ImageBuf);
// printf("ostu = %x",threshold);
}
for(i=0; i<ROW; i++)
{
for(j=0;j<COL ;j++)
{
// if(ImageBuf[i][j] > threshold)
// ImageBuf[i][j] = 1;
// else
// ImageBuf[i][j] = 0;
ImageBuf[i][j] = 0x56;
}
}
for(i=0; i<ROW; i++)
{
for(j=0;j<COL ;j++)
{
if(ImageBuf[i][j] == 0xFF) ImageBuf[i][j]--;
// if(ImageBuf[i][j] > 0xB6)
// ImageBuf[i][j] = 1;
// else
// ImageBuf[i][j] = 0;
uart_putchar(UART1,ImageBuf[i][j]);
}
}
enable_irq(PORTA + 87);
// EnableInterrupts;
}
}
复制代码
欢迎光临 智能车制作 (http://111.231.132.190/)
Powered by Discuz! X3.2