您好!
将工程从2640R2F移植到2640R2L,CCS版本V9.0.1.00004,没有换到最新的CCS,工程的设备还是选的CC2640R2F,目前移植后蓝牙连接,PWM,UART,GPIO中断等都没问题,就是ADC移植后无法使用,后面使用例程的顺序初始话,ADC_open这一步失败,贴出代码如下:
if(user_ADC_Handle[ADC_Channel] == NULL)//static ADC_Handle user_ADC_Handle[USER_ADCCOUNT]; {ADC_init();ADC_Params_init(&user_ADC_Params[ADC_Channel]); //static ADC_Params user_ADC_Params[USER_ADCCOUNT];user_ADC_Params[ADC_Channel].isProtected= true;user_ADC_Handle[ADC_Channel]=ADC_open(0,&user_ADC_Params[ADC_Channel]);if(user_ADC_Handle[ADC_Channel] == NULL){while(1);}}
没有搞懂IO映射,直接ADC_open第一个参数填的0.最后程序进入了while(1).请帮忙分析下可能是哪儿的问题,谢谢你!
Viki Shi:
看下ADC_Config里的设置
const ADC_Config ADC_config[CC2640R2_LAUNCHXL_ADCCOUNT] = {{&ADCCC26XX_fxnTable, &adcCC26xxObjects[CC2640R2_LAUNCHXL_ADC0], &adcCC26xxHWAttrs[CC2640R2_LAUNCHXL_ADC0]},{&ADCCC26XX_fxnTable, &adcCC26xxObjects[CC2640R2_LAUNCHXL_ADC1], &adcCC26xxHWAttrs[CC2640R2_LAUNCHXL_ADC1]},{&ADCCC26XX_fxnTable, &adcCC26xxObjects[CC2640R2_LAUNCHXL_ADC2], &adcCC26xxHWAttrs[CC2640R2_LAUNCHXL_ADC2]},{&ADCCC26XX_fxnTable, &adcCC26xxObjects[CC2640R2_LAUNCHXL_ADC3], &adcCC26xxHWAttrs[CC2640R2_LAUNCHXL_ADC3]},{&ADCCC26XX_fxnTable, &adcCC26xxObjects[CC2640R2_LAUNCHXL_ADC4], &adcCC26xxHWAttrs[CC2640R2_LAUNCHXL_ADC4]},{&ADCCC26XX_fxnTable, &adcCC26xxObjects[CC2640R2_LAUNCHXL_ADC5], &adcCC26xxHWAttrs[CC2640R2_LAUNCHXL_ADC5]},{&ADCCC26XX_fxnTable, &adcCC26xxObjects[CC2640R2_LAUNCHXL_ADC6], &adcCC26xxHWAttrs[CC2640R2_LAUNCHXL_ADC6]},{&ADCCC26XX_fxnTable, &adcCC26xxObjects[CC2640R2_LAUNCHXL_ADC7], &adcCC26xxHWAttrs[CC2640R2_LAUNCHXL_ADC7]},{&ADCCC26XX_fxnTable, &adcCC26xxObjects[CC2640R2_LAUNCHXL_ADCDCOUPL], &adcCC26xxHWAttrs[CC2640R2_LAUNCHXL_ADCDCOUPL]},{&ADCCC26XX_fxnTable, &adcCC26xxObjects[CC2640R2_LAUNCHXL_ADCVSS], &adcCC26xxHWAttrs[CC2640R2_LAUNCHXL_ADCVSS]},{&ADCCC26XX_fxnTable, &adcCC26xxObjects[CC2640R2_LAUNCHXL_ADCVDDS], &adcCC26xxHWAttrs[CC2640R2_LAUNCHXL_ADCVDDS]}, };/*!*@briefFunction to initialize the ADC peripheral**Function to initialize the ADC peripheral specified by the*particular index value.**@preADC_init() has been called**@param[in]indexIndex in the @p ADC_Config[] array.*@param[in]paramsPointer to an initialized #ADC_Params structure.*If NULL, the default #ADC_Params values are used.**@return An #ADC_Handle on success or NULL on error.**@saADC_init()*@saADC_close()*/ extern ADC_Handle ADC_open(uint_least8_t index, ADC_Params *params);
kai li2:
回复 Viki Shi:
const ADC_Config user_ADCConfig[USER_ADCCOUNT] = {{&ADCCC26XX_fxnTable,&userADCProjects[USER_ADC0],&userADCHwAttrs[USER_ADC0]},{&ADCCC26XX_fxnTable,&userADCProjects[USER_ADC1],&userADCHwAttrs[USER_ADC1]},{&ADCCC26XX_fxnTable,&userADCProjects[USER_ADC2],&userADCHwAttrs[USER_ADC2]},{&ADCCC26XX_fxnTable,&userADCProjects[USER_ADCDCOUPL],&userADCHwAttrs[USER_ADCDCOUPL]},{&ADCCC26XX_fxnTable,&userADCProjects[USER_ADCVSS],&userADCHwAttrs[USER_ADCVSS]},{&ADCCC26XX_fxnTable,&userADCProjects[USER_ADCVDDS],&userADCHwAttrs[USER_ADCVDDS]},
};
const ADCCC26XX_HWAttrs userADCHwAttrs[USER_ADCCOUNT] = {{
//ADC0的配置.adcDIO= ADC_PIN0,//#defineADC_PIN0IOID_12.adcCompBInput= ADC_COMPB_IN_AUXIO7,.refSource= ADCCC26XX_FIXED_REFERENCE,.samplingDuration= ADCCC26XX_SAMPLING_DURATION_2P7_US,.inputScalingEnabled= false,.triggerSource= ADCCC26XX_TRIGGER_MANUAL,.returnAdjustedVal= 0},
因为之前2640R2F有比较器, 而2640R2L没有,.inputScalingEnabled由true改为false了,在2640R2L上跑不过,RHB封装DIO7-DIO14可以作为模拟引脚。
kai li2:
回复 Viki Shi:
能看下图中adcCC26XXHWAttrs的初始化吗,基于2640R2L的
kai li2:
参考software-dl.ti.com/…/_a_d_c_buf_c_c26_x_x_8h.html解决。
一个ADC映射表
It maps a DIO to its corresponding driverlib define for the CompBInput that it is hardwired to. This table can be used to create virtual channel entries in the ADCBufCC26XX_adcChannelLut table in the board file.
Viki Shi:
回复 kai li2:
已经解决了吗?是引脚映射问题?