智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2231|回复: 1
打印 上一主题 下一主题

[摄像头] K60芯片,OV7620摄像头 用DMA传输 遇到不能读程序的问题

[复制链接]

1

主题

2

帖子

0

精华

注册会员

Rank: 2

积分
72
威望
48
贡献
16
兑换币
17
注册时间
2013-3-18
在线时间
5 小时
跳转到指定楼层
1#
发表于 2013-7-16 16:17:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的Y0-Y7 对应着portB0-B7   下边是我的部分程序 求大神给我指点一下  我根本读不到摄像头的数据额
***********************************************
void DMA0_Init1(void)
{
SIM_SCGC6|=SIM_SCGC6_DMAMUX_MASK;//打开DMA多路复用器时钟
SIM_SCGC7|=SIM_SCGC7_DMA_MASK;//打开DMA模块时钟
DMAMUX_CHCFG0=DMAMUX_CHCFG_SOURCE(50);//DMA通道0对应50号DMA请求,即PORTB

DMA_TCD0_SADDR=(uint32)&GPIOB_PDIR;//设置源地址GPIO口,PORTB
DMA_TCD0_SOFF=0;//每次传送源地址不变

DMA_TCD0_CITER_ELINKNO=DMA_CITER_ELINKNO_CITER(V);//当前主循环次数,采集点数
DMA_TCD0_BITER_ELINKNO=DMA_BITER_ELINKNO_BITER(V);//起始主循环次数,采集点数

//DMA_TCD1_NBYTES_MLOFFYES=DMA_NBYTES_MLOFFYES_NBYTES(1)+DMA_NBYTES_MLOFFNO_SMLOE_MASK+DMA_NBYTES_MLOFFYES_MLOFF(-4);//传送4字节
DMA_TCD0_NBYTES_MLNO=DMA_NBYTES_MLNO_NBYTES(1);//每次读取一字节

DMA_TCD0_SLAST=0;//主循环结束后源地址0回写tcd
DMA_TCD0_DLASTSGA=0;//主循环结束后目的地址0回写tcd

DMA_TCD0_DADDR=(uint32)video;//设置目的地址,video数组第一个元素
DMA_TCD0_DOFF=1;//每次写目的地址加1//@地址加1了,另外的程序里没看到,以后要注意注意!!!

DMA_TCD0_ATTR=DMA_ATTR_SSIZE(0)+DMA_ATTR_DSIZE(0);//源数据宽度8bit,目的数据宽度8bit
//DMA_TCD0_CSR=DMA_CSR_DREQ_MASK;//DMA通道0主循环结束后停止硬件请求
        DMA_TCD0_CSR|= DMA_CSR_DREQ_MASK;/* major_loop递减为0时自动关闭DMA,即只进行一次DMA传输 */
DMA_TCD0_CSR|=DMA_CSR_INTMAJOR_MASK;//使能DMA0中断
DMAMUX_CHCFG0|=DMAMUX_CHCFG_ENBL_MASK;//DMA通道0使能

//DMA_TCD1_CSR|=DMA_CSR_INTMAJOR_MASK;//使能DMA中断
//DMA_TCD0_CSR|=DMA_CSR_START_MASK;
        DMA_ERQ &= ~(1 << 0); /* 关闭相应通道的DMA请求,在配置阶段先关闭,再调用myDMA_Start函数开启DMA */
}
*************************
****************************************
void porta_isr(void)//场中断,A24,下降沿中断
{
  //PORTA_ISFR = 0xFFFFFFFF;  //Clear Port A ISR flags
  PORTA_ISFR=1<<24;   // Clear the PTE25 interrupt flags   
  //PORTA_PCR24|=PORT_PCR_ISF_MASK;//清除中断标志
  if(!Field_Over)
  {
   DMA0_Init1();
   enable_irq(0);//使能DMA通道0完成中断
   row=0;//初始化行
   imagerow=0;//初始化采集行
   
   disable_irq (87);//我自己架上的
   enable_irq (88);//使能B口中断 ,B10行中断
  }   
    gpio_reverse(PORTA,16);
}
***************************************************
************************************************
void portb_isr(void)//行中断,B10,上升沿中断
{
  PORTB_ISFR=1<<10;   // Clear the PTE25 interrupt flags   
  //PORTB_PCR10|=PORT_PCR_ISF_MASK;//清除中断标志位
  row++; //行计数
  if(row==data_table[imagerow])//如果当前行数据应该采集
  {
   DMA_ERQ|=DMA_ERQ_ERQ0_MASK;//使能通道0硬件DMA请求  
  }
  else if(row>=ENDROW) //一场完成,关闭行中断
  {
  disable_irq (88);
  }
   enable_irq (87);//使能a口中断 ,A24行中断(自己家的)
}
******************************

1

主题

2

帖子

0

精华

注册会员

Rank: 2

积分
72
威望
48
贡献
16
兑换币
17
注册时间
2013-3-18
在线时间
5 小时
2#
 楼主| 发表于 2013-7-16 16:32:03 | 只看该作者
:'(:'(:'(:'(
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-27 16:22 , Processed in 0.045554 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表