搜索
bottom↓
回复: 7

在KDS环境下 KL16 6路ADC中断连续采样要怎样设置呢?

[复制链接]

出0入0汤圆

发表于 2014-9-12 12:50:40 | 显示全部楼层 |阅读模式
在KDS环境下 KL16  6路ADC中断连续采样要怎样设置呢?

KDS帮助文档应用只是一路ADC的例程,多路的按帮助文档试了很多次也不成功,请FSL版主,各位高手指点。

#define NUMBER_OF_MEASUREMENTS 10U
#define SAMPLE_GROUP_SIZE 1U

volatile uint8_t ConversionCount = 0U;
volatile AD1_TResultData MeasuredValues[SAMPLE_GROUP_SIZE];
LDD_TDeviceData *MyADCPtr;
LDD_TError Error;

void main(void)
{
  ...
  MyADCPtr = AD1_Init((LDD_TUserData *)NULL);        /* Initialize the device */
  Error = AD1_SelectSampleGroup(MyADCPtr, 0U);       /* Select sample group 0 */
  Error = AD1_StartLoopMeasurement(MyADCPtr);        /* Start continuous measurement */
  for(;;) {
    if (ConversionCount == NUMBER_OF_MEASUREMENTS) { /* After NUMBER_OF_MEASUREMENTS cycles the conversion is stopped */
       Error = AD1_CancelMeasurement(MyADCPtr);      /* Stop continuous measurement */
    }
  }
}

Content of Event.c:

extern volatile uint8_t ConversionCount;
extern volatile AD1_TResultData MeasuredValues[];
extern LDD_TDeviceData *MyADCPtr;
extern LDD_TError Error;

void AD1_OnMeasurementComplete(LDD_TUserData *UserDataPtr)
{
  ConversionCount++;                                 /* Increment counter of conversions */
  Error = AD1_GetMeasuredValues(MyADCPtr, (LDD_TData *)MeasuredValues);  /* Read measured values */
}
这是KDS帮助的例程

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

 楼主| 发表于 2014-9-12 13:48:50 | 显示全部楼层
channel 0 已经可以正常转换数据,但是channel1-5还没有数据,初学FSL,请FAE多多支持

出0入0汤圆

发表于 2014-9-12 14:21:24 | 显示全部楼层
从你这个代码片段里没有中断处理的代码,你看看来中断后,你有没有清除中断,重新开启中断。另外,就是用poll的方式,看看 是不是寄存器都配置对了,ad采集常用的做法是启动一个dma,数据满的时候来一次dma中断把数据都读到数组里,就可以看到不同通道的ad值了

出0入0汤圆

 楼主| 发表于 2014-9-12 14:40:51 | 显示全部楼层
bbstr 发表于 2014-9-12 14:21
从你这个代码片段里没有中断处理的代码,你看看来中断后,你有没有清除中断,重新开启中断。另外,就是用po ...

中断代码:

/*
** ===================================================================
**     Method      :  AD_NTC1_6_MeasurementCompleteInterrupt (component ADC_LDD)
**
**     Description :
**         Measurement complete interrupt handler
**         This method is internal. It is used by Processor Expert only.
** ===================================================================
*/
PE_ISR(AD_NTC1_6_MeasurementCompleteInterrupt)
{
  /* {Default RTOS Adapter} ISR parameter is passed through the global variable */
  AD_NTC1_6_TDeviceDataPtr DeviceDataPrv = INT_ADC0__DEFAULT_RTOS_ISRPARAM;
  AD_NTC1_6_OnMeasurementComplete(DeviceDataPrv->UserData);
  (void)ADC_PDD_GetResultValueRaw(ADC0_BASE_PTR, 0U); /* Clear conversion complete flag */
}

/*
** ===================================================================
**     Event       :  AD_NTC1_6_OnMeasurementComplete (module Events)
**
**     Component   :  AD_NTC1_6 [ADC_LDD]
*/
/*!
**     @brief
**         Called after measurement is done, [Interrupt service/event]
**         is enabled, OnMeasurementComplete event is enabled and ADC
**         device is enabled. See [SetEventMask()] method or [Event
**         mask] property group to enable this event and [Enable]
**         method or [Enabled in init. code] property to enable ADC
**         device. If DMA is enabled , this event is called after the
**         configured number of measurements and DMA transfer is done.
**     @param
**         UserDataPtr     - Pointer to the user or
**                           RTOS specific data. The pointer is passed
**                           as the parameter of Init method.
*/
/* ===================================================================*/

extern volatile uint8_t ConversionCount;
extern volatile AD_NTC1_6_TResultData MeasuredValues[];
extern LDD_TDeviceData *MyADCPtr;
extern LDD_TError ADCError;



void AD_NTC1_6_OnMeasurementComplete(LDD_TUserData *UserDataPtr)
{
  /* Write your code here ... */
        ConversionCount++;                                 /* Increment counter of conversions */
    ADCError = AD_NTC1_6_GetMeasuredValues(MyADCPtr, (LDD_TData *)MeasuredValues);  /* Read measured values */
}

出0入0汤圆

发表于 2014-9-12 14:52:51 | 显示全部楼层
AD_NTC1_6_TDeviceDataPtr DeviceDataPrv = INT_ADC0__DEFAULT_RTOS_ISRPARAM;
  AD_NTC1_6_OnMeasurementComplete(DeviceDataPrv->UserData);
  (void)ADC_PDD_GetResultValueRaw(ADC0_BASE_PTR, 0U);

ADC_PDD_GetResultValueRaw这个你重点看下,看看有没有清除掉中断位 0与1..5的清除可能有所区别的

出0入0汤圆

 楼主| 发表于 2014-9-12 15:10:54 | 显示全部楼层
bbstr 发表于 2014-9-12 14:52
AD_NTC1_6_TDeviceDataPtr DeviceDataPrv = INT_ADC0__DEFAULT_RTOS_ISRPARAM;
  AD_NTC1_6_OnMeasurementC ...

谢谢,我看看

出0入0汤圆

 楼主| 发表于 2014-9-12 15:15:51 | 显示全部楼层
#define ADC_PDD_GetResultValueRaw(PeripheralBase, Index) ( \
      ADC_R_REG(PeripheralBase,(Index)) \
    )

#define ADC_R_REG(base,index)                    ((base)->R[index])

跟到头文件里复制过来的

出0入0汤圆

发表于 2014-9-12 15:32:08 | 显示全部楼层
(void)ADC_PDD_GetResultValueRaw(ADC0_BASE_PTR, 0U);  改成

(void)ADC_PDD_GetResultValueRaw(ADC0_BASE_PTR, 0U);
(void)ADC_PDD_GetResultValueRaw(ADC0_BASE_PTR, 1U);
(void)ADC_PDD_GetResultValueRaw(ADC0_BASE_PTR, 2U);
(void)ADC_PDD_GetResultValueRaw(ADC0_BASE_PTR, 3U);
看看呢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 03:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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