智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1494|回复: 1
打印 上一主题 下一主题

OV7620采集程序疑问

[复制链接]

1

主题

2

帖子

0

精华

注册会员

Rank: 2

积分
76
威望
42
贡献
24
兑换币
23
注册时间
2016-3-3
在线时间
5 小时
毕业学校
gaega
跳转到指定楼层
1#
发表于 2016-3-3 21:44:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. 当采集完240行后,中断里我已经禁止了行中断和场中断,我强行把图像数据格更,为什么在串口打印不能打印0x56?
复制代码
  1. extern u32 rowCnt ;   //行计数
  2. extern u8 ImageBuf[ROW][COL];
  3. u8 SampleFlag = 0;

  4. void PORTA_IRQHandler()
  5. {
  6.    //---HREF行中断处理
  7.     if( PORTA_ISFR & (1 << 9))         //PTA9触发中断  
  8.     {
  9.         PORTA_ISFR  |= (1 << 9);        //写1清中断标志位
  10.         
  11.          if ( SampleFlag == 0 )         //不足一场时返回
  12.         {
  13.           return;
  14.         }  
  15.         
  16.         //-------------DAM初始化通道4,数据源为PTD,每次存在数组ImageBuf[]指针中,PCLK接PT19触发,每次传输1个字节,每次触发传输320次,上升沿触发
  17.         DMA_PORTx2BUFF_Init (DMA_CH4, (void *)&PTD_BYTE0_IN, ImageBuf[rowCnt], PTC19, DMA_BYTE1, 320, DMA_rising);
  18.         //----使能DMA,初始化的时候禁止DMA
  19.         DMA_EN(DMA_CH4);
  20.    
  21.         rowCnt++;

  22.         if(rowCnt == 240)
  23.         {
  24.           rowCnt = 0;
  25.           DMA_DIS(DMA_CH4);
  26.           SampleFlag = 0;
  27.           //---------若为动态显示,删除此行------------//
  28. //          DisableInterrupts;
  29.           disable_irq(PORTA + 87);
  30.             
  31.         }
  32.     }
  33.    
  34.     //---VSYN场中断处理
  35.     if(PORTA_ISFR & (1 << 27))         //PTA27触发中断  场中断
  36.     {
  37.         PORTA_ISFR  |= (1 << 27);       //写1清中断标志位
  38.         rowCnt = 0;
  39.         SampleFlag = 1;
  40.     }
  41. }

  42. /*************************************************************************
  43. *                            岱默科技DEMOK Kinetis开发小组
  44. *
  45. *  函数名称:DMA_CH4_Handler
  46. *  功能说明:DMA通道4的中断服务函数
  47. *  参数说明:无
  48. *  函数返回:无
  49. *
  50. *************************************************************************/
  51. void DMA_CH4_Handler(void)
  52. {
  53.     //DMA通道4
  54.     DMA_IRQ_CLEAN(DMA_CH4);                             //清除通道传输中断标志位    (这样才能再次进入中断)
  55.     DMA_IRQ_DIS(DMA_CH4);                               //禁止DMA   等待下一次行中断来临开启DMA

  56. }
复制代码

回复

使用道具 举报

1

主题

2

帖子

0

精华

注册会员

Rank: 2

积分
76
威望
42
贡献
24
兑换币
23
注册时间
2016-3-3
在线时间
5 小时
毕业学校
gaega
2#
 楼主| 发表于 2016-3-3 21:45:43 | 只看该作者
这是main函数
  1. u8 ImageBuf[ROW][COL];

  2. volatile u8 VSYN = 1;
  3. volatile u32 rowCnt = 0 ;
  4. u8 uFirstDisp = 0;
  5. u32 otsu(u8 image[240][320]);
  6. u32 threshold = 0;
  7. void main()
  8. {
  9.    u32 i,j;
  10.    DisableInterrupts;
  11.    sccb_init();
  12.    
  13.     //-----------SCCB恢复默认出厂设置----------//
  14.     //--PCLK:70ns   HREF:63us   VSYN:33.33ms--//
  15.     //--原分辨率为640*480  
  16.     //--在每两个HREF之间有1280个PCLK---U Y V Y U Y V Y
  17.     //--在每两个VSYN之间有240个HREF    //OV7620是隔行采集
  18.     //sccb_regWrite(0x42,0x11,0x00);   
  19.     //sccb_regWrite(0x42,0x14,0x04);
  20.     //sccb_regWrite(0x42,0x28,0x20);
  21.     //---------------------------------------//

  22.     //----------SCCB寄存器配置---------------//
  23.     sccb_regWrite(0x42,0x11,0x03);    //地址0X11-中断四分频(640*240)           PCLK:166ns   HREF:254.6us   VSYN:133.6ms
  24.     sccb_regWrite(0x42,0x14,0x24);      //地址0X14-QVGA(320*120)                  PCLK:332ns   HREF:509.6us   VSYN:133.6ms
  25.     sccb_regWrite(0x42,0x28,0x20);      //地址0X28-连续采集模式(320*240)              PCLK:666ns   HREF:509.6us   VSYN:133.6ms

  26.     sccb_wait();
  27.    
  28.     //----初始化图像数组----//
  29.     for(i=0; i<ROW; i++)
  30.     {
  31.       for(j=0;j<COL ;j++)
  32.       {
  33.         ImageBuf[i][j] = 0;
  34.       }
  35.     }
  36.    
  37.     //----初始化串口------//
  38.     uart_init (UART1, 115200);
  39.    
  40.    
  41.     //----初始化外部中断---//
  42.     exti_init(PORTA, 9, rising_down);       //HREF----PORTA3 端口外部中断初始化 ,上升沿触发中断,内部下拉
  43.     exti_init(PORTA, 27, rising_down);      //VSYN----PORTA5 端口外部中断初始化 ,上升沿触发中断,内部下拉

  44.     EnableInterrupts;
  45.     while(1)
  46.     {
  47.       uart_putchar(UART1,0xFF);  //图像头
  48.       
  49.       if(!uFirstDisp)
  50.       {
  51.           uFirstDisp = 1;
  52.           threshold = otsu(ImageBuf);
  53. //          printf("ostu = %x",threshold);

  54.       }
  55.       
  56.        for(i=0; i<ROW; i++)
  57.       {
  58.         for(j=0;j<COL ;j++)
  59.         {
  60. //            if(ImageBuf[i][j] > threshold)
  61. //              ImageBuf[i][j] = 1;
  62. //            else
  63. //              ImageBuf[i][j] = 0;
  64.           ImageBuf[i][j] = 0x56;
  65.         }
  66.       }
  67.      
  68.       for(i=0; i<ROW; i++)
  69.       {
  70.         for(j=0;j<COL ;j++)
  71.         {
  72.           if(ImageBuf[i][j] == 0xFF) ImageBuf[i][j]--;
  73.   
  74. //          if(ImageBuf[i][j] > 0xB6)
  75. //              ImageBuf[i][j] = 1;
  76. //            else
  77. //              ImageBuf[i][j] = 0;
  78.           uart_putchar(UART1,ImageBuf[i][j]);
  79.          }
  80.        }
  81.         enable_irq(PORTA + 87);
  82. //      EnableInterrupts;
  83.       

  84.     }
  85. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-28 07:21 , Processed in 0.050461 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表