在KDS环境下 KL16 6路ADC中断连续采样要怎样设置呢?
在KDS环境下 KL166路ADC中断连续采样要怎样设置呢?KDS帮助文档应用只是一路ADC的例程,多路的按帮助文档试了很多次也不成功,请FSL版主,各位高手指点。
#define NUMBER_OF_MEASUREMENTS 10U
#define SAMPLE_GROUP_SIZE 1U
volatile uint8_t ConversionCount = 0U;
volatile AD1_TResultData MeasuredValues;
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帮助的例程
channel 0 已经可以正常转换数据,但是channel1-5还没有数据,初学FSL,请FAE多多支持 从你这个代码片段里没有中断处理的代码,你看看来中断后,你有没有清除中断,重新开启中断。另外,就是用poll的方式,看看 是不是寄存器都配置对了,ad采集常用的做法是启动一个dma,数据满的时候来一次dma中断把数据都读到数组里,就可以看到不同通道的ad值了 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
*/
/*!
** @brief
** Called after measurement is done,
** is enabled, OnMeasurementComplete event is enabled and ADC
** device is enabled. See method or [Event
** mask] property group to enable this event and
** method or 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 */
} 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的清除可能有所区别的
bbstr 发表于 2014-9-12 14:52
AD_NTC1_6_TDeviceDataPtr DeviceDataPrv = INT_ADC0__DEFAULT_RTOS_ISRPARAM;
AD_NTC1_6_OnMeasurementC ...
谢谢,我看看 #define ADC_PDD_GetResultValueRaw(PeripheralBase, Index) ( \
ADC_R_REG(PeripheralBase,(Index)) \
)
#define ADC_R_REG(base,index) ((base)->R)
跟到头文件里复制过来的
(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);
看看呢
页:
[1]