发布于 2018-11-21 11:13:14
配置DCMI外围设备以获取活动字段图像\视频:
(更好的方法是查看这段代码,并记录这些寄存器在拆分窗口中的功能)
// enable DCIM peripheral clock
RCC->AHB2ENR |= RCC_AHB2ENR_DCMIEN;
// disable DCIM
DCMI->CR = 0;
// NOTE: configure AVID
DCMI->CWSTRTR = 0;
// set top margin offset (VST)
DCMI->CWSTRTR |= ((18 - 1) << 16);
// set lef margin offset (HOFFCNT)
DCMI->CWSTRTR |= ((83 * 2 - 1) << 0);
DCMI->CWSIZER = 0;
// set height of active video (VLINE)
DCMI->CWSIZER |= ((220 - 1) << 16);
// set width of active video (CAPCNT)
DCMI->CWSIZER |= ((700 * 2 - 1) << 0);为什么对于水平的狂热参数,我们乘以2,因为外设会看到PIXCLK时钟的数目,其中2个等于一个像素。
从数字化流中提取Y部分:
4:2:2格式是什么样子?它是
Y1 Cr0 Y0 Cb0
Y3 Cr2 Y2 Cb2每个都是8位,您可以使用Y0:Cb0:Cr0和Y1:Cb0:Cr0获得2像素的彩色图像。其中Y-是一个luma (亮度)值->,这个值是你想要的灰度视频。这部分就是这样做的:
// set Y-only
DCMI->CR |= (0x1 << 16);
DCMI->CR |= (0x1 << 18);我们从32位字中提取(0x1 << 16)甚至(0x1 << 18)字节。
剩下的部分是微不足道的:
// choose data mode (8-bit = 0)
DCMI->CR |= (0x0 << 10);
// capture every 4 frame ( 4frames = 2 , 2frames = 1)
DCMI->CR |= (0x0 << 8);
// set polarity for VSCLK HSCLK PXCLK (0x1 = high)
DCMI->CR |= (0x1 << 7) | (0x1 << 6) | (0x0 << 5);
// choose synchornization (hardware = 0)
DCMI->CR |= (0x0 << 4);
// set AVID (enable = 1)
DCMI->CR |= (0x1 << 2);
// set capture mode (shanpshot = 1)
DCMI->CR |= (0x0 << 1);
// configure HSYNC interrupt
DCMI->IER = 0;
// configure IT lineComplete VSYNC frameComplete
DCMI->IER |= (0x1 << 4) | (0x1 << 3) | (0x1 << 0);
// enable IT for DCMI
// NVIC_EnableIRQ(DCMI_IRQn);
// NVIC_SetPriority(DCMI_IRQn, 1);
// enable DCIM
DCMI->CR |= (0x1 << 14);
// enable Capture
DCMI->CR |= (0x1 << 0);https://stackoverflow.com/questions/53410894
复制相似问题