智能车制作

标题: 用gpio触发dma传输adc数据求大神帮忙看下哪里错了 [打印本页]

作者: 无形DE风.I3E    时间: 2013-5-27 22:02
标题: 用gpio触发dma传输adc数据求大神帮忙看下哪里错了
完全采集不到,PTB5有电平变化的,ADC0已经初始化为连续采集,使能dma

void Dma_init(void)
{
LPLD_eDMA_Cfg_t User_Def_DMA_Init_u;  //声明DMA初始化结构体
  
  User_Def_DMA_Init_u.Channelx          =DMA_CH0;               //设置为通道0,通道0采集
  User_Def_DMA_Init_u.Peri_DmaReq       =PORTB_DMAREQ;          //IO B 产生DMA请求
  User_Def_DMA_Init_u.Minor_loop_Length =128;                              //主循环次数      
  User_Def_DMA_Init_u.Source_Addr       =(uint32_t)&ADC0_RA; //设置源地址,
  User_Def_DMA_Init_u.Source_Size       =DMA_SRC_8BIT;
  User_Def_DMA_Init_u.Source_Addr_inc   =0;
  User_Def_DMA_Init_u.Dest_Addr         =(uint32_t)Pixel;      //目的地址为Pix_Data的首地址
  User_Def_DMA_Init_u.Dest_Addr_inc     =1;             //目的地址不增加
  User_Def_DMA_Init_u.Dest_Size         =DMA_DST_8BIT;
  User_Def_DMA_Init_u.Dma_irqc          =1;                     //主循环次数为减少0,触发中断
  User_Def_DMA_Init_u.isr_func          =dman_isr;              //自定义通道1中断服务子程序
  //初始化DMA模块
  DMA_Init(&User_Def_DMA_Init_u);
}
void GPIO_init()
{
  LPLD_GPIO_Init(PTB, 5, DIR_INPUT, INPUT_PDOWN, IRQC_DMARI);
  adc_init(ADC0, AD9) ;
}
void adc_continuous(ADCn adcn, ADC_Ch ch, ADC_nbit bit)   
{
   Master_Adc_Config.CONFIG1 = ADLPC_NORMAL | ADC_CFG1_ADIV(ADIV_1) | ADLSMP_LONG |  ADC_CFG1_MODE(bit) | ADC_CFG1_ADICLK(ADICLK_BUS_2);
   Master_Adc_Config.CONFIG2 =  MUXSEL_ADCA | ADACKEN_DISABLED | ADHSC_HISPEED | ADC_CFG2_ADLSTS(ADLSTS_20);
   Master_Adc_Config.COMPARE1 = 0x1234u;
   Master_Adc_Config.COMPARE2 = 0x5678u;
   Master_Adc_Config.STATUS2 = ADTRG_SW | ACFE_DISABLED |  ACFGT_LESS | ACREN_DISABLED |  DMAEN_ENABLED | ADC_SC2_REFSEL(REFSEL_EXT);
  Master_Adc_Config.STATUS3 = CAL_OFF | ADCO_CONTINUOUS | AVGE_ENABLED | ADC_SC3_AVGS(AVGS_32);
  Master_Adc_Config.PGA = PGAEN_DISABLED | PGACHP_NOCHOP | PGALP_NORMAL | ADC_PGA_PGAG(PGAG_64);
  Master_Adc_Config.STATUS1A = AIEN_ON | DIFF_SINGLE | ADC_SC1_ADCH(ch);
//  Master_Adc_Config.STATUS1B = AIEN_ON | DIFF_SINGLE | ADC_SC1_ADCH(ch);
  adc_config_alt(ADCx[adcn], &Master_Adc_Config);
   
}

作者: 无形DE风.I3E    时间: 2013-5-27 22:05
发现LPLD库有个bug,下面代码会使Dest_Addr不管是填hold还是INCREASE,最后结果都是INCREASE
  //如果用户没有设置 目的地址增加 默认为执行一次DMA请求后目的地址加一
    if(DMA_Config->Dest_Addr_inc ==NULL)
    {
        DMA_Config->Dest_Addr_inc     =ADDR_INCREASE;    //针对目的地址的操作执行完毕后加1
    }

应该把ADDR_INCREASE改成hold
作者: 无形DE风.I3E    时间: 2013-5-27 22:08
坐等老大和大神回答,我已经调了2天了都没调出来
作者: zjght123    时间: 2013-5-27 22:13
我也在纠结adc+dma,坐等洋葱圈大神回答
作者: oО開莳-    时间: 2013-5-27 22:14
顺便帮你说下是MK60芯片……
作者: 无形DE风.I3E    时间: 2013-5-28 01:46
请大神给点idea,今晚就守在电脑旁了
作者: 无形DE风.I3E    时间: 2013-5-29 15:57
真的没人来回答吗,伤心了





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