智能车制作

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

作者: Sincerely    时间: 2013-7-16 16:17
标题: K60芯片,OV7620摄像头 用DMA传输 遇到不能读程序的问题
我的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行中断(自己家的)
}
******************************

作者: Sincerely    时间: 2013-7-16 16:32
:'(:'(:'(:'(




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2