TI中文支持网
TI专业的中文技术问题搜集分享网站

MSP432 SDK 多通道ADC采集例程问题

SDK版本:simplelink_msp432p4_sdk_3_40_01_02

CCS10.1.0

我在使用FreeRTOS的ADC驱动例程(adcbufmultichannel)遇到问题,我把P5.4接到3.3v,P5.5接到GND,通过串口显示采集结果,我看不出哪个是通道一的结果,哪个是通道2的结果。

Susan Yang:

请您重新以附件形式上传一下图片,谢谢
另外您使用的是TI的红色开发板?

haolong liu:

回复 Susan Yang:

是的,红色开发板。

Susan Yang:

回复 haolong liu:

参考该例程的说明

The sample buffer will contain alternating values between Board_ADCBUF0CHANNEL0 and Board_ADCBUF0CHANNEL1.

也就是说,buffer内是交替的值[CH0,CH1,CH0,CH1…]

您可以通过下面的代码来识别

void adcBufCallback(ADCBuf_Handle handle, ADCBuf_Conversion *conversion,void *completedADCBuffer, uint32_t completedChannel) {uint_fast16_t i;uint16_t *completedBuffer = (uint16_t *) completedADCBuffer;for (i = 0; i < ADCBUFFERSIZE; i++) {outputBuffer[i] = completedBuffer[i];}if(completedChannel == CONFIG_ADCBUF0CHANNEL_0){sem_post(&adcbufSem);}/* post adcbuf semaphore */// sem_post(&adcbufSem);
}

参考自: dev.ti.com/…/node

haolong liu:

回复 Susan Yang:

我有两个问题:

1. 可以在callback中打断点,并观察当前的channel号,我发现实际上每个通道完成后都会进入callback函数。如果释放信号量不加if限制,理论上每个通道完成后都会释放信号量,但实际上task似乎只能接收到channel1完成的信号量,接收不到channel0完成时释放的信号量,所以task每次只打印channel1的结果。

2.按照您的建议,我在callback中释放信号量加了if条件(只有channel0完成时释放信号量),我定义了一个全局变量channel来观察当前的通道号,在task中打了一个断点,每当程序执行到断点,我看到channel并不是0,而是1。

Susan Yang:

回复 haolong liu:

haolong liu如果释放信号量不加if限制,理论上每个通道完成后都会释放信号量

是的,您的理解是正确的,理论上是应该两个channel交替的

haolong liu但实际上task似乎只能接收到channel1完成的信号量,接收不到channel0完成时释放的信号量

您是如何测试的呢?

haolong liu每当程序执行到断点,我看到channel并不是0,而是1。

我来测试一下后回复,谢谢

haolong liu:

回复 Susan Yang:

Susan Yang

haolong liu
但实际上task似乎只能接收到channel1完成的信号量,接收不到channel0完成时释放的信号量

您是如何测试的呢?

Susan Yang,您好

我想了一下,task是可以正确的接收信号量的。中断发送信号量,任务接收信号量的机制是没有问题的,只是多通道采集时,在任务执行打印之前,channel1的结果覆盖了channel0的结果,所以channel0结果一直没办法被任务打印

Susan Yang:

回复 haolong liu:

抱歉,之前漏掉了您的帖子。您现在测试的情况如何了?

Susan Yang:

回复 haolong liu:

很高兴您能解决问题。谢谢您分享解决方法!

赞(0)
未经允许不得转载:TI中文支持网 » MSP432 SDK 多通道ADC采集例程问题
分享到: 更多 (0)