智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 3215|回复: 6
打印 上一主题 下一主题

用gpio触发dma传输adc数据求大神帮忙看下哪里错了

[复制链接]

1

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
391
威望
209
贡献
110
兑换币
124
注册时间
2012-12-17
在线时间
36 小时
跳转到指定楼层
1#
发表于 2013-5-27 22:02:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
完全采集不到,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);
   
}

1

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
391
威望
209
贡献
110
兑换币
124
注册时间
2012-12-17
在线时间
36 小时
2#
 楼主| 发表于 2013-5-27 22:05:46 | 只看该作者
发现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
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
391
威望
209
贡献
110
兑换币
124
注册时间
2012-12-17
在线时间
36 小时
3#
 楼主| 发表于 2013-5-27 22:08:38 | 只看该作者
坐等老大和大神回答,我已经调了2天了都没调出来
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

注册会员

Rank: 2

积分
63
威望
42
贡献
13
兑换币
15
注册时间
2013-5-27
在线时间
4 小时
毕业学校
浙江大学城市学院
4#
发表于 2013-5-27 22:13:46 | 只看该作者
我也在纠结adc+dma,坐等洋葱圈大神回答
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
249
威望
140
贡献
77
兑换币
78
注册时间
2012-11-1
在线时间
16 小时
毕业学校
浙大城市学院
5#
发表于 2013-5-27 22:14:34 | 只看该作者
顺便帮你说下是MK60芯片……
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
391
威望
209
贡献
110
兑换币
124
注册时间
2012-12-17
在线时间
36 小时
6#
 楼主| 发表于 2013-5-28 01:46:59 | 只看该作者
请大神给点idea,今晚就守在电脑旁了
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
391
威望
209
贡献
110
兑换币
124
注册时间
2012-12-17
在线时间
36 小时
7#
 楼主| 发表于 2013-5-29 15:57:56 | 只看该作者
真的没人来回答吗,伤心了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 18:32 , Processed in 0.097069 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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