智能车制作

 找回密码
 注册

扫一扫,访问微社区

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

怎么用拉普兰德驱动中PDB与ADC结合的模块

[复制链接]

16

主题

32

帖子

0

精华

高级会员

Rank: 4

积分
742
威望
425
贡献
161
兑换币
172
注册时间
2012-6-23
在线时间
78 小时
跳转到指定楼层
1#
发表于 2013-9-2 20:31:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
拉普兰德底层驱动2.2版中有一个PDB与ADC结合的模块,但是当读取AD值的时候老是停留在while((ADC_SC1_REG(adcptr,0)&ADC_SC1_COCO_MASK) == 0);
这句中,不知道是什么问题,求解答!

68

主题

439

帖子

2

精华

版主

Rank: 9Rank: 9Rank: 9

积分
4618
QQ
威望
2342
贡献
1290
兑换币
1175
注册时间
2009-12-24
在线时间
493 小时
2#
发表于 2013-9-2 22:23:39 | 只看该作者
你PDB trigger了吗 ,另外需要在ADC 中 把触发方式设置为硬件触发。可以参考我的代码库
回复 支持 反对

使用道具 举报

68

主题

439

帖子

2

精华

版主

Rank: 9Rank: 9Rank: 9

积分
4618
QQ
威望
2342
贡献
1290
兑换币
1175
注册时间
2009-12-24
在线时间
493 小时
3#
发表于 2013-9-2 22:23:53 | 只看该作者
你PDB trigger了吗 ,另外需要在ADC 中 把触发方式设置为硬件触发。可以参考我的代码库
http://www.znczz.com/thread-123546-1-1.html
回复 支持 反对

使用道具 举报

68

主题

439

帖子

2

精华

版主

Rank: 9Rank: 9Rank: 9

积分
4618
QQ
威望
2342
贡献
1290
兑换币
1175
注册时间
2009-12-24
在线时间
493 小时
4#
发表于 2013-9-2 22:24:16 | 只看该作者
回复 支持 反对

使用道具 举报

16

主题

32

帖子

0

精华

高级会员

Rank: 4

积分
742
威望
425
贡献
161
兑换币
172
注册时间
2012-6-23
在线时间
78 小时
5#
 楼主| 发表于 2013-9-2 22:41:35 | 只看该作者
这些我都设了
回复 支持 反对

使用道具 举报

16

主题

32

帖子

0

精华

高级会员

Rank: 4

积分
742
威望
425
贡献
161
兑换币
172
注册时间
2012-6-23
在线时间
78 小时
6#
 楼主| 发表于 2013-9-2 22:43:46 | 只看该作者
yandld 发表于 2013-9-2 22:23
你PDB trigger了吗 ,另外需要在ADC 中 把触发方式设置为硬件触发。可以参考我的代码库

#include "common.h"
#include "HAL_PDB.h"
#include "HAL_ADC.h"
\
uint16 ADC_TrgTime[2] ;
void adc_isr0();
void main(void)
{
  uint16 temp;

  //初始化ADC0,配置成8位精度,单端模式
  LPLD_ADC_Init(ADC0, MODE_8, CONV_SING);

  //设置ADC的触发源为硬件触发
  LPLD_ADC_SetHWTrg(ADC0);
  LPLD_ADC_Channel_Init(ADC0,0,ADC_INT_ENABLE,adc_isr0);
  //当前外设总线为50Mhz
  //prescale = 1, mult = 10
  //计数器单位计数频率为:f_pdb_Counter = 50Mhz/prescale*mult = 50Mhz/10 = 5Mhz
  //计数器单位计数周期为:t_pdb_Counter = 0.2us
  //计数器的计数值为:mod = 5000
  //PDB的计数器的周期 = 0.2 * 5000 = 1ms
  //选择LMOD加载模式0
  //选择软件触发
  //选择关闭DMA
  //选择PDB连续计数模式
  LPLD_PDB_Init(PDB_PRESC_1,
                PDB_MULT_10,
                5000,
                SOFTWARE_TRIGER,
                LDMOD0,
                PDB_CONTINUE,
                PDB_DMA_OFF);

  //选择PDB_DAC0作为触发通道
  //选择PDB触发DAC的延时为0.2 * 5000 = 1ms
  //禁止外部输入触发
  ADC_TrgTime[0] = 5000;
  //ADC_TrgTime[1] = 5000;
  //PDB触发1ms,选择通道0,预触发0,禁用B2B模式
  LPLD_PDB_ADC_Trigger_Congfig(ADC0, ADC_TrgTime, PDB_PRECH_EN0, PDB_PREBB_DIS);

  //PDB开始运行
  LPLD_PDB_SetUp(PDB_OPERATION);

  while(1)
  {
      int a=1;
    //获得采样值
    temp = LPLD_ADC_SE_Get(ADC0,8);
    //打印输出
    //printf("AD sample value:%d",temp);
  }
}
这是源代码

回复 支持 反对

使用道具 举报

17

主题

97

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2209
QQ
威望
1093
贡献
652
兑换币
638
注册时间
2012-12-1
在线时间
232 小时
7#
发表于 2013-9-6 03:19:43 | 只看该作者
楼主,问题解决了吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-29 16:44 , Processed in 0.072654 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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