智能车制作

标题: 还是DMA的问题 这样写有错吗 为什么 都是只给数组的第一个元素赋值其余不变 [打印本页]

作者: wustyhj    时间: 2015-1-22 20:51
标题: 还是DMA的问题 这样写有错吗 为什么 都是只给数组的第一个元素赋值其余不变
void dma_init()         
    {
        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_CITER_ELINKNO=DMA_CITER_ELINKNO_CITER(157);//当前主循环次数,采集点数
        DMA_TCD0_BITER_ELINKNO=DMA_BITER_ELINKNO_BITER(157);//起始主循环次数,采集点数
        DMA_TCD0_SADDR=(uint32)&GPIOE_PDIR;                          //设置源地址GPIO口,PORTB
        DMA_TCD0_SOFF=0;                                             //每次传送源地址不变
       
        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)Image_Original;//设置目的地址,video数组第一个元素
        DMA_TCD0_DOFF=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_INTMAJOR_MASK;//使能DMA0中断
        DMAMUX_CHCFG0|=DMAMUX_CHCFG_ENBL_MASK;//DMA通道0使能
        DMA_ERQ&=~DMA_ERQ_ERQ5_MASK ;//The DMA request signal for the corresponding channel is enabled
    }


void DMA0_isr(void)//DMA0中断服务函数
{
  DMA_INT|=DMA_INT_INT0_MASK;                     //清除通道0中断
  Sample_point++;
}


////////////////////////////////////////////////////////////
// 中断服务函数,场中断为PTA181的IO中断;
//  等待改为输入捕捉
//
///////////////////////////////////////////////////////////
void PORTA_isr(void)//场中断PTB21 中断号87
{
  if(send_F==1)
  {
  send_F=0;
  PORTA_PCR14 |= PORT_PCR_ISF_MASK;        //清标志位
  Sample_point=SampleRow;//赋地址指针
  enable_irq(0);         //使能DMA完成中断
   enable_irq(88); //使能行中断
  }
}
/////////////////////////////////////////////////////////////
//
//行中断,PTB22
//
///////////////////////////////////////////////////////////
void PORTB_isr(void)//行中断PB22 中断号88
{
  static uint16 ui_SampleRow=0;   //采集的行数
  PORTB_PCR22 |= PORT_PCR_ISF_MASK;//清行中断标志位;
  
  if(ui_SampleRow==*Sample_point) //判断是否为采集的行
  {
   DMA_ERQ|=DMA_ERQ_ERQ0_MASK;//使能通道0硬件DMA请求
  }
  ui_SampleRow++;//行计数
  if(ui_SampleRow>=160)
  {
   uc_ImageOver=1;
   ui_SampleRow=0;    //清采集图像上行
   disable_irq(88); //关行中断
   uc_ImageOver=0;
   send_F=1;
}
}




作者: wustyhj    时间: 2015-1-22 20:52
求解释啊




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