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:
很高兴您能解决问题。谢谢您分享解决方法!