2440 摄像头驱动DMA使用问题
我使用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);这明明是用来显示的,但是怎么会不出图像呢?请做过的前辈指导一下。
你贴的东西没用...
[解决办法]
调用了 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显示的。看看位置有没有对应对?
[解决办法]