本帖最后由 奔跑小蜗牛 于 2014-12-18 16:59 编辑
你当然不能一股脑的把数据往SRAM里塞,塞的太多,时间超时,会造成DMA停止。
DMA传输长度就是指DMA_Buffersize
//DCMI DMA配置
void DCMI_DMA_Init(void)
{
RCC->AHB1ENR|=1<<22; //DMA2时钟使能
while(DMA2_Stream1->CR&0X01);//等待DMA2_Stream1可配置
DMA2->LIFCR|=0X3D<<6*1; //清空通道1上所有中断标志
DMA2_Stream1->FCR=0X0000021;//设置为默认值
DMA2_Stream1-> PAR=(u32)&DCMI->DR; //外设地址为: DCMI-> DR
DMA2_Stream1->M0AR=(u32)&(LCD->LCD_RAM);//LCD_RAM 作为目标地址
DMA2_Stream1->NDTR=1; //传输长度为1
DMA2_Stream1->CR=0; //先全部复位CR寄存器值
DMA2_Stream1->CR|=0<<6; //外设到存储器模式
DMA2_Stream1->CR|=1<<8; //循环模式
DMA2_Stream1->CR|=0<<9; //外设非增量模式
DMA2_Stream1->CR|=0<<10; //存储器非增量模式
DMA2_Stream1->CR|=2<<11; //外设数据长度:32位
DMA2_Stream1->CR|=1<<13; //存储器数据长度:16位
DMA2_Stream1->CR|=2<<16; //高优先级
DMA2_Stream1->CR|=0<<21; //外设突发单次传输
DMA2_Stream1->CR|=0<<23; //存储器突发单次传输
DMA2_Stream1->CR|=1<<25; //通道1 DCMI通道
DMA2_Stream1->FCR|=1<<2; //FIFO模式
DMA2_Stream1->FCR|=3<<0; //是用全FIFO
}
把上面的LCD->LCD_RAM改为你的:外部SRAM存放摄像头数据的首地址,SRAM你设置为地址自增,然后传输完一帧要中断,重新设置传输量。 中断你可以采用DCMI的帧中断,到里面再次去设置DMA。这里DMA仅仅负责搬运,不停的将DCMI->DR的数据,搬运到目标地址,一次搬运长度是1.
本帖最后由 奔跑小蜗牛 于 2014-12-18 16:59 编辑
你当然不能一股脑的把数据往SRAM里塞,塞的太多,时间超时,会造成DMA停止。
DMA传输长度就是指DMA_Buffersize
//DCMI DMA配置
void DCMI_DMA_Init(void)
{
RCC->AHB1ENR|=1<<22; //DMA2时钟使能
while(DMA2_Stream1->CR&0X01);//等待DMA2_Stream1可配置
DMA2->LIFCR|=0X3D<<6*1; //清空通道1上所有中断标志
DMA2_Stream1->FCR=0X0000021;//设置为默认值
DMA2_Stream1-> PAR=(u32)&DCMI->DR; //外设地址为: DCMI-> DR
DMA2_Stream1->M0AR=(u32)&(LCD->LCD_RAM);//LCD_RAM 作为目标地址
DMA2_Stream1->NDTR=1; //传输长度为1
DMA2_Stream1->CR=0; //先全部复位CR寄存器值
DMA2_Stream1->CR|=0<<6; //外设到存储器模式
DMA2_Stream1->CR|=1<<8; //循环模式
DMA2_Stream1->CR|=0<<9; //外设非增量模式
DMA2_Stream1->CR|=0<<10; //存储器非增量模式
DMA2_Stream1->CR|=2<<11; //外设数据长度:32位
DMA2_Stream1->CR|=1<<13; //存储器数据长度:16位
DMA2_Stream1->CR|=2<<16; //高优先级
DMA2_Stream1->CR|=0<<21; //外设突发单次传输
DMA2_Stream1->CR|=0<<23; //存储器突发单次传输
DMA2_Stream1->CR|=1<<25; //通道1 DCMI通道
DMA2_Stream1->FCR|=1<<2; //FIFO模式
DMA2_Stream1->FCR|=3<<0; //是用全FIFO
}
把上面的LCD->LCD_RAM改为你的:外部SRAM存放摄像头数据的首地址,SRAM你设置为地址自增,然后传输完一帧要中断,重新设置传输量。 中断你可以采用DCMI的帧中断,到里面再次去设置DMA。这里DMA仅仅负责搬运,不停的将DCMI->DR的数据,搬运到目标地址,一次搬运长度是1.
举报