高级会员
- 积分
- 730
- 威望
- 409
- 贡献
- 183
- 兑换币
- 139
- 注册时间
- 2012-9-12
- 在线时间
- 69 小时
|
4#
楼主 |
发表于 2012-11-22 22:23:08
|
只看该作者
J-sir 发表于 2012-11-22 22:18
感谢你的回答!我的情况是这样的:就像是把一副图片从中间拦腰截断了,第一次发上半部分,下一次发下半部 ...
一幅图像我只采其中的60行,但是用了DMA以后就采集了后面我本来不想要的那些行,并储存在下一幅的图像数组里。我并没有这样设置……还有我的事模拟摄像头。请帮我看看初始化的对吗?
void dma_init(){
SIM_SCGC6|=SIM_SCGC6_DMAMUX_MASK;//打开DMA多路复用器时钟
SIM_SCGC7|=SIM_SCGC7_DMA_MASK;//打开DMA模块时钟
DMAMUX_CHCFG0=DMAMUX_CHCFG_SOURCE(41);//DMA通道0对应41号DMA请求,即ADC1,参阅Chip Configuration
DMA_TCD0_SADDR = (uint32_t)&(ADC_R_REG(ADC1_BASE_PTR, 0));
DMA_TCD0_SOFF = 0;//每次传送源地址不变
DMA_TCD0_CITER_ELINKNO=DMA_CITER_ELINKNO_CITER(lie_max);//当前主循环次数,采集点数
DMA_TCD0_BITER_ELINKNO=DMA_BITER_ELINKNO_BITER(lie_max);//起始主循环次数,采集点数
DMA_TCD0_ATTR = DMA_ATTR_SSIZE(0) | DMA_ATTR_DSIZE(0);//源数据宽度8bit,目的数据宽度8bit
DMA_TCD0_NBYTES_MLNO = DMA_NBYTES_MLNO_NBYTES(1);//每次读取一字节
DMA_TCD0_SLAST = 0;//主循环结束后源地址0回写tcd
DMA_TCD0_DLASTSGA = 0;
DMA_TCD0_DADDR=(uint32)image;//设置目的地址,image数组第一个元素
DMA_TCD0_DOFF=1;//每次写目的地址加1
DMA_TCD0_CSR= DMA_CSR_DREQ_MASK;//DMA通道0主循环结束后停止硬件请求
DMA_TCD0_CSR|=DMA_CSR_INTMAJOR_MASK;//使能DMA0中断
DMAMUX_CHCFG0|=DMAMUX_CHCFG_ENBL_MASK;//DMA通道0使能
}
|
|