在裸奔程序中,循环获取7个通道的AD值并将转换为电阻后逐个打印,串口助手中显示正常,代码如下;
- i=0;
- while (1)
- {
- Change_Channel(i);
- ADS1248_Start(ADC_MODE_SINGLECOV);
- ADS1248_WaitBusy();
- Data=ADS1248_Read();
- R = (Data/8388607.0/8)*2*820+180;
- printf("%5.2f, ",R);
-
- i++;
- if(i==7)
- {
- i=0;
- printf("\n");
- };
-
- }
复制代码
现将其移植到RTX系统中,启用单任务时运行正常:
- __task void adcTask (void) {
- ADS1248_Init(ADC_GAIN_8|ADC_SPS_20);
- int8_t chanel = 0;
- float R;
- for (;;) {
- int32_t Data;
- Data = ADS1248_Channel_Data(chanel);
- R = (Data/8388607.0/8)*2*820+180;
- printf("%5.2f, ", R);
- chanel++;
- if(chanel==7)
- {
- printf("\n");
- chanel=0;
- };
- os_dly_wait(10);
- }
- }
复制代码
接着将AD转换与打印数据分离实现,启用一个新的任务用于打印AD数据,因此在AD任务中将7个通道的AD值逐个存入float类型数组R中,并在打印任务中打印AD值。结果AD值无法正常显示,数据显示如下图所示,,
请问有人遇到过类似的情况吗?是什么原因造成的?
(补充:测试时发现将SPI的时钟配置修改为70KHz后,AD值将正常显示,,原始SPI时钟频率为140KHz,根据AD数据手册时序要求得到SPI时钟频率的上限为2MHz,所以应该不是SPI的问题,应该只是有所牵连,具体问题出自于哪还望大神们解惑!!)
- __task void printfTask (void) {
-
- for (;;) {
-
- int i;
- for(i=0; i<7; i++)
- {
- printf("%5.2f, ", (chanelDataArray[i]/8388607.0/8)*2*820+180);
- }
- printf("\n");
- os_dly_wait(100);
- }
- }
复制代码
|