您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> 求助:BF592 PPI 采集 CMOS 传感器的配置问... 
本帖共有438个阅读者
发表帖子 发表投票 回复主题
求助:BF592 PPI 采集 CMOS 传感器的配置问题
wanta(论坛新手)
wanta
头衔:社区公民
帮派:无帮无派
帖数:4
金钱:143
积分:7
注册时间:2016/10/29
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
求助:BF592 PPI 采集 CMOS 传感器的配置问题
BF592 配合 线性CMOS 传感器,2496 pixel x 1 pixel ,TIM0 TIM1 使用PPI_CLK内部触发,FS1控制CMOS图像传感器,FS2控制光源,光源开和关分别采集一行再触发DMA0中断,在DMA0中断中处理数据,现在遇到的问题是,DMA0中断只能触发一次,有时还不触发,Halt暂停运行后,发现DMA_ERR 为1,DMA_RUN 为0了,DMA停止的,PPI_OVR 为1,似乎问题出在DMA配置上,找来找去,没发现什么错误,PPI DMA 初始化代码如下,请高手指教配置哪里有问题:

#include "common.h"

#define HLINE_W 3000  // 每行的周期,3000
#define IMAGE_W 2496   // 采集图像水平像素宽度
#define IMAGE_H 2     // 光源开关,分别采集一行

unsigned short image_buffer[IMAGE_W*IMAGE_H]; // 图像缓冲区

short exposure_time =50; // CMOS传感器曝光时间,高电平有效


void gpio_init(void)
{
// TSCLK(PF6), FS1(PF9), FS2(PF10)
*pPORTF_FER |= PF0 | PF1 |PF2 | PF3 | PF6| PF9| PF10;
*pPORTF_MUX |= PF0 | PF1 |PF2 | PF3; // enable PPI_D8 - PPI_D11,CMOS 传感器12位数据
*pPORTG_FER |= PG8 | PG9 |PG10 | PG11 |PG12 | PG13 |PG14 | PG15; // enable peripheral
*pPORTG_MUX |= PG8 | PG9 |PG10 | PG11 |PG12 | PG13 |PG14 | PG15; // enable PPI_D0 - PPI_D7
}

volatile short cnt = 0;

void Process_Data(void)
{
cnt ++; // 处理代码以后添加
}

EX_INTERRUPT_HANDLER(DMA0_ISR)
{
    Process_Data();
    *pDMA0_IRQ_STATUS |= DMA_DONE;
    
}

void ppi_init(void)
{
*pDMA0_START_ADDR = image_buffer;     //配置PPIDMA数据起始地址
*pDMA0_CONFIG = FLOW_AUTO|DI_EN|WDSIZE_16|DMA2D|WNR;//配置DMA工作模式
*pDMA0_X_COUNT = IMAGE_W;        //配置DMA一行要传输多少次数据
*pDMA0_X_MODIFY = 2;          //配置每次传输行地址的增量
*pDMA0_Y_COUNT = IMAGE_H;        //配置要传输多少行数据
*pDMA0_Y_MODIFY = 2;          //配置每次列数据地址的增量,12位数据占 2个字节
asm("ssync;");
    register_handler(ik_ivg8, DMA0_ISR);
    *pSIC_IMASK |= IRQ_DMA0;
*pTIMER0_PERIOD   = HLINE_W;     //配置行同步信号产生的周期
*pTIMER0_WIDTH    = exposure_time;       //配置行同步信号宽度
*pTIMER0_CONFIG   = EMU_RUN|CLK_SEL |TIN_SEL| PERIOD_CNT |PULSE_HI| PWM_OUT;//配置行同步信号工作模式,上升沿开始
*pTIMER1_PERIOD   = HLINE_W*IMAGE_H;// 采集两行的周期
*pTIMER1_WIDTH   = exposure_time ; // 光源打开时间
*pTIMER1_CONFIG   = EMU_RUN|CLK_SEL |TIN_SEL| PERIOD_CNT| PWM_OUT;//配置行同步信号工作模式,低电平打开光源

asm("ssync;");

*pPPI_CONTROL = POLS|DLEN_12|(0x10)|XFR_TYPE ; //配置PPI工作偶是 PORT_CFG=0010
*pPPI_DELAY = 22;                  //配置时钟延时为14(Sensor) + 7(ADC)
*pPPI_COUNT = IMAGE_W -1;          //配置PPI每行要传输2496次
*pPPI_FRAME = IMAGE_H;             //配置每帧图像有2行
asm("ssync;");
*pDMA0_CONFIG |= DMAEN;                 //使能DMA
asm("ssync;");                          //系统同步
*pPPI_CONTROL |= PORT_EN;               //使能PPI
asm("ssync;");                          //系统同步
*pTIMER_ENABLE|= TIMEN0 | TIMEN1;       //使能行场同步信号
asm("ssync;");                           //系统同步
}

void SensorInit()
{
gpio_init();
ppi_init();
}


上传的图片
  201611911231571.png [ 128.05 KB 1494×900 ] (缩略时请点击查看原图)

 



「该帖子被 wanta 在 2016-11-09 11:23:52 编辑过」

大家好
等级:论坛新手 参考IP地址:*.*.*.*
2016/11/9 10:39:37
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154468 Call, 1 Queries, Processed in 0.015991 second(s),