首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

2440 摄像头驱动DMA使用有关问题

2012-04-07 
2440 摄像头驱动DMA使用问题C/C++ code我使用GPIO模拟IIC初始化OV9652 已经成功(我读出来和写入数值一致)

2440 摄像头驱动DMA使用问题

C/C++ code
我使用GPIO模拟IIC初始化OV9652 已经成功(我读出来和写入数值一致)并且用应用程序打开摄像头驱动时候,摄像头驱动也已经能够不停的产生中断。但是不知道怎么回事,但是图像死活不出现。——我用老的BSP 编译出NK 摄像头可以正常采集,排除了硬件问题。但是我把老的BSP的代码搬到5.0 却死活不出图像了。我推测是DMA问题,我根据内存映射表修改了一番,可是还是没有结果。我的内存映射表g_oalAddressTable        DCD     0x80000000, 0x30000000, 64      ; 32 MB DRAM BANK 6        DCD     0x84000000, 0x10000000, 32      ; nGCS2: PCMCIA/PCCARD        DCD     0x86000000, 0x18000000, 32      ; 32 MB SROM(SRAM/ROM) BANK 3        DCD     0x88000000, 0x20000000, 32      ; 32 MB SROM(SRAM/ROM) BANK 4        DCD     0x8A000000, 0x28000000, 32      ; 32 MB SROM(SRAM/ROM) BANK 5        DCD     0x8C000000, 0x08000000, 32      ; 32 MB SROM(SRAM/ROM) BANK 1        DCD     0x90800000, 0x48000000,  1      ; Memory control register        DCD     0x90900000, 0x49000000,  1      ; USB Host register        DCD     0x90A00000, 0x4A000000,  1      ; Interrupt Control register        DCD     0x90B00000, 0x4B000000,  1      ; DMA control register        DCD     0x90C00000, 0x4C000000,  1      ; Clock & Power register        DCD     0x90D00000, 0x4D000000,  1      ; LCD control register        DCD     0x90E00000, 0x4E000000,  1      ; NAND flash control register        DCD     0x90F00000, 0x4F000000,  1      ; Camera control register    DCD     0x91000000, 0x50000000,  1      ; UART control register        DCD     0x91100000, 0x51000000,  1      ; PWM timer register        DCD     0x91200000, 0x52000000,  1      ; USB device register        DCD     0x91300000, 0x53000000,  1      ; Watchdog Timer register        DCD     0x91400000, 0x54000000,  1      ; IIC control register        DCD     0x91500000, 0x55000000,  1      ; IIS control register        DCD     0x91600000, 0x56000000,  1      ; I/O Port register        DCD     0x91700000, 0x57000000,  1      ; RTC control register        DCD     0x91800000, 0x58000000,  1      ; A/D convert register        DCD     0x91900000, 0x59000000,  1      ; SPI register        DCD     0x91A00000, 0x5A000000,  1      ; SD Interface register        DCD     0x92000000, 0x00000000, 32      ; 32 MB SROM(SRAM/ROM) BANK 0        DCD     0x94D00000, 0x34000000, 64      ; 64 MB SDRAM BANK 6——我使用的128M SDRAM 非连续方法扩展        DCD     0x00000000, 0x00000000,  0      ; end of table我的config.bib的DMA内存设置。MEMORY    NK      80200000  01E00000  RAMIMAGE    RAM     82000000  02000000  RAM    FLASH   92000000  00100000  RESERVED; Common RAM areas    AUD_DMA             80002000  00000800  RESERVED     SDIO_DMA            80010000  00010000  RESERVED    ARGS                80020800  00000800  RESERVED    DBGSER_DMA          80022000  00002000  RESERVED    SER_DMA             80024000  00002000  RESERVED    IR_DMA              80026000  00002000  RESERVED    SLEEP               80028000  00002000    RESERVED    EDBG                80030000  00020000  RESERVED;    DISPLAY            80100000  00100000  RESERVED; camera DMA 用于摄像头DMA    CAMERA                80050000  00110000  RESERVED     DISPLAY             84800000  00100000  RESERVED    CAMERA_CODE        84000000  00800000  RESERVED 在camera驱动中我是这么定义的//----------------------------------yl2440 4.2-->5.0 BSP 's set---------------------------// 1st Ping-pong Address#define COPIFRAMEBUFFER_A     0x30050000    // 320*240 * 2(RGB 16bit) * 4 frames = 614400 = 0x96000// 0x30030000 + 0x96000 = 0x300c6000//#define COPIFRAMEBUFFER_B     0x32000000    // Max buffer size of Port : 0x1c2000 (640*480+640*480*2/4)*4#define COPIFRAMEBUFFER_B     0x34000000    // 0x32000000-->0x34000000//要把CODE通道DMA地址放到不影响其他部分运行的RAM地址#define VIRTUAL_OFFSET        0x7C000000#define VIRTUAL_ADDR_OFFSET    VIRTUAL_OFFSET // for MPEG4中断的线程已经不停的执行,调用了    Display_Cam_Image(0,0, 240, 240, PORT_A);这明明是用来显示的,但是怎么会不出图像呢?请做过的前辈指导一下。


[解决办法]
dma 的配置、启用、停止很简单,使用物理地址,网卡、硬盘等经常使用...


你贴的东西没用...
[解决办法]
调用了 Display_Cam_Image(0,0, 240, 240, PORT_A);
这个函数里面怎么执行的?
我们刚开始做,碰到异常,就直接将buffer数据用串口打印出来。用纯色图片,比如红色的,这样看数据就比较方便。
[解决办法]
BTW:OV的芯片有一个内部测试模式,输出固定的颜色条图像信息,不需要外部有实际拍摄的东西。
[解决办法]
lz上面好象差不多了,有数据了,只不过是数据格式和大小可能有问题.

查下你的源图像的大小和编码格式有没有设置错?目标图像的大小有没有设置错。

camera要有dma buffer,你用HalAllocateCommonBuffer来开辟,只要用足够的ram就没有问题。查下你开辟的ram区大小,这个要根据图像的大小和编码格式来确定dma buffer的大小。 不要开辟小了,大了浪费内存,小了造成桢与桢数据重叠,显示模糊或是花屏。

查下你的显示区域,camera的driver是将dma的数据直接拷到framebuffer显示的。看看位置有没有对应对?
[解决办法]

探讨
引用:
lz上面好象差不多了,有数据了,只不过是数据格式和大小可能有问题.

查下你的源图像的大小和编码格式有没有设置错?目标图像的大小有没有设置错。

camera要有dma buffer,你用HalAllocateCommonBuffer来开辟,只要用足够的ram就没有问题。查下你开辟的ram区大小,这个要根据图像的大小和编码格式来确定dma buffer的大小。 不要开辟小了,大了浪费内存,小了造成桢与桢数据重叠,显示模糊或…

[解决办法]
6搂的morris88兄也提出过
dma 的buffer申请也是比较简单的做法。

你的显示图像是多大?4.2和5.0里面的一样么?都是240*240么?
能不能看看你的4.2出来的图像是什么样子的?

热点排行