Other Parts Discussed in Thread: CC2650
Tool/software: TI-RTOS
Hi,
I have developed CC2650 5XD Custom board.I am trying to reading ADC value at IOID_9 pin.I am getting wrong value.ADC value at IOID_9 is 835 and voltage at that pin is 2V. For same hardware by using Sensor controller studio ADC Window Monitor example i am getting correct value.I am using Simple peripheral example and i have done mapping as-
//Board.h #define Board_ADC0 CC2650_LAUNCHXL_ADC2
//CC2650_LAUNCHXL.h #define Board_DIO07_ANALOG PIN_UNASSIGNED #define Board_DIO08_ANALOG PIN_UNASSIGNED #define Board_DIO09_ANALOG IOID_9 #define Board_DIO10_ANALOG PIN_UNASSIGNED #define Board_DIO11_ANALOG PIN_UNASSIGNED #define Board_DIO12_ANALOG PIN_UNASSIGNED #define Board_DIO13_ANALOG PIN_UNASSIGNED #define Board_DIO14_ANALOG PIN_UNASSIGNED /*! * @def CC2650_LAUNCHXL_ADCBufName * @brief Enum of ADCs */ typedef enum CC2650_LAUNCHXL_ADCBufName { CC2650_LAUNCHXL_ADCBuf0 = 0, CC2650_LAUNCHXL_ADCBufCOUNT } CC2650_LAUNCHXL_ADCBufName; /*! * @def CC2650_LAUNCHXL_ADCName * @brief Enum of ADCs */ typedef enum CC2650_LAUNCHXL_ADCName { CC2650_LAUNCHXL_ADC0 = 0, CC2650_LAUNCHXL_ADC1, CC2650_LAUNCHXL_ADC2, CC2650_LAUNCHXL_ADC3, CC2650_LAUNCHXL_ADC4, CC2650_LAUNCHXL_ADC5, CC2650_LAUNCHXL_ADC6, CC2650_LAUNCHXL_ADC7, CC2650_LAUNCHXL_ADCDCOUPL, CC2650_LAUNCHXL_ADCVSS, CC2650_LAUNCHXL_ADCVDDS, CC2650_LAUNCHXL_ADCCOUNT } CC2650_LAUNCHXL_ADCName; #ifdef __cplusplus }
//CC2650_LAUNCHXL.c /* * ========================== ADCBuf begin ========================================= */ /* Place into subsections to allow the TI linker to remove items properly */ #if defined(__TI_COMPILER_VERSION__) #pragma DATA_SECTION(ADCBuf_config, ".const:ADCBuf_config") #pragma DATA_SECTION(adcBufCC26xxHWAttrs, ".const:adcBufCC26xxHWAttrs") #pragma DATA_SECTION(ADCBufCC26XX_adcChannelLut, ".const:ADCBufCC26XX_adcChannelLut") #endif /* Include drivers */ #include <ti/drivers/ADCBuf.h> #include <ti/drivers/adcbuf/ADCBufCC26XX.h> /* ADCBuf objects */ ADCBufCC26XX_Object adcBufCC26xxObjects[CC2650_LAUNCHXL_ADCBufCOUNT]; /* * This table converts a virtual adc channel into a dio and internal analogue input signal. * This table is necessary for the functioning of the adcBuf driver. * Comment out unused entries to save flash. * Dio and internal signal pairs are hardwired. Do not remap them in the table. You may reorder entire entries though. * The mapping of dio and internal signals is package dependent. */ const ADCBufCC26XX_AdcChannelLutEntry ADCBufCC26XX_adcChannelLut[] = { //{PIN_UNASSIGNED, ADC_COMPB_IN_VDDS}, //{PIN_UNASSIGNED, ADC_COMPB_IN_DCOUPL}, //{PIN_UNASSIGNED, ADC_COMPB_IN_VSS}, //{Board_DIO07_ANALOG, ADC_COMPB_IN_AUXIO7}, //{Board_DIO08_ANALOG, ADC_COMPB_IN_AUXIO6}, {Board_DIO09_ANALOG, ADC_COMPB_IN_AUXIO5}, //{Board_DIO10_ANALOG, ADC_COMPB_IN_AUXIO4}, //{Board_DIO11_ANALOG, ADC_COMPB_IN_AUXIO3}, //{Board_DIO12_ANALOG, ADC_COMPB_IN_AUXIO2}, //{Board_DIO13_ANALOG, ADC_COMPB_IN_AUXIO1}, //{Board_DIO14_ANALOG, ADC_COMPB_IN_AUXIO0}, }; const ADCBufCC26XX_HWAttrs adcBufCC26xxHWAttrs[CC2650_LAUNCHXL_ADCBufCOUNT] = { { .intPriority = ~0, .swiPriority = 0, .adcChannelLut = ADCBufCC26XX_adcChannelLut, .gpTimerUnit = Board_GPTIMER0A, .gptDMAChannelMask = 1 << UDMA_CHAN_TIMER0_A, } }; const ADCBuf_Config ADCBuf_config[] = { {&ADCBufCC26XX_fxnTable, &adcBufCC26xxObjects[0], &adcBufCC26xxHWAttrs[0]}, {NULL, NULL, NULL}, }; /* * ========================== ADCBuf end ========================================= */ /* * ========================== ADC begin ========================================= */ /* Place into subsections to allow the TI linker to remove items properly */ #if defined(__TI_COMPILER_VERSION__) #pragma DATA_SECTION(ADC_config, ".const:ADC_config") #pragma DATA_SECTION(adcCC26xxHWAttrs, ".const:adcCC26xxHWAttrs") #endif /* Include drivers */ #include <ti/drivers/ADC.h> #include <ti/drivers/adc/ADCCC26XX.h> /* ADC objects */ ADCCC26XX_Object adcCC26xxObjects[CC2650_LAUNCHXL_ADCCOUNT]; const ADCCC26XX_HWAttrs adcCC26xxHWAttrs[CC2650_LAUNCHXL_ADCCOUNT] = { { .adcDIO = Board_DIO07_ANALOG, .adcCompBInput = ADC_COMPB_IN_AUXIO7, .refSource = ADCCC26XX_FIXED_REFERENCE, .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US, .inputScalingEnabled = true, .triggerSource = ADCCC26XX_TRIGGER_MANUAL }, { .adcDIO = Board_DIO08_ANALOG, .adcCompBInput = ADC_COMPB_IN_AUXIO6, .refSource = ADCCC26XX_FIXED_REFERENCE, .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US, .inputScalingEnabled = true, .triggerSource = ADCCC26XX_TRIGGER_MANUAL }, { .adcDIO = Board_DIO09_ANALOG, .adcCompBInput = ADC_COMPB_IN_AUXIO5, .refSource = ADCCC26XX_FIXED_REFERENCE, .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US, .inputScalingEnabled = true, .triggerSource = ADCCC26XX_TRIGGER_MANUAL }, { .adcDIO = Board_DIO10_ANALOG, .adcCompBInput = ADC_COMPB_IN_AUXIO4, .refSource = ADCCC26XX_FIXED_REFERENCE, .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US, .inputScalingEnabled = true, .triggerSource = ADCCC26XX_TRIGGER_MANUAL }, { .adcDIO = Board_DIO11_ANALOG, .adcCompBInput = ADC_COMPB_IN_AUXIO3, .refSource = ADCCC26XX_FIXED_REFERENCE, .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US, .inputScalingEnabled = true, .triggerSource = ADCCC26XX_TRIGGER_MANUAL }, { .adcDIO = Board_DIO12_ANALOG, .adcCompBInput = ADC_COMPB_IN_AUXIO2, .refSource = ADCCC26XX_FIXED_REFERENCE, .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US, .inputScalingEnabled = true, .triggerSource = ADCCC26XX_TRIGGER_MANUAL }, { .adcDIO = Board_DIO13_ANALOG, .adcCompBInput = ADC_COMPB_IN_AUXIO1, .refSource = ADCCC26XX_FIXED_REFERENCE, .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US, .inputScalingEnabled = true, .triggerSource = ADCCC26XX_TRIGGER_MANUAL }, { .adcDIO = Board_DIO14_ANALOG, .adcCompBInput = ADC_COMPB_IN_AUXIO0, .refSource = ADCCC26XX_FIXED_REFERENCE, .samplingDuration = ADCCC26XX_SAMPLING_DURATION_10P9_MS, .inputScalingEnabled = true, .triggerSource = ADCCC26XX_TRIGGER_MANUAL }, { .adcDIO = PIN_UNASSIGNED, .adcCompBInput = ADC_COMPB_IN_DCOUPL, .refSource = ADCCC26XX_FIXED_REFERENCE, .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US, .inputScalingEnabled = true, .triggerSource = ADCCC26XX_TRIGGER_MANUAL }, { .adcDIO = PIN_UNASSIGNED, .adcCompBInput = ADC_COMPB_IN_VSS, .refSource = ADCCC26XX_FIXED_REFERENCE, .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US, .inputScalingEnabled = true, .triggerSource = ADCCC26XX_TRIGGER_MANUAL }, { .adcDIO = PIN_UNASSIGNED, .adcCompBInput = ADC_COMPB_IN_VDDS, .refSource = ADCCC26XX_FIXED_REFERENCE, .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US, .inputScalingEnabled = true, .triggerSource = ADCCC26XX_TRIGGER_MANUAL } }; const ADC_Config ADC_config[] = { {&ADCCC26XX_fxnTable, &adcCC26xxObjects[0], &adcCC26xxHWAttrs[0]}, {&ADCCC26XX_fxnTable, &adcCC26xxObjects[1], &adcCC26xxHWAttrs[1]}, {&ADCCC26XX_fxnTable, &adcCC26xxObjects[2], &adcCC26xxHWAttrs[2]}, {&ADCCC26XX_fxnTable, &adcCC26xxObjects[3], &adcCC26xxHWAttrs[3]}, {&ADCCC26XX_fxnTable, &adcCC26xxObjects[4], &adcCC26xxHWAttrs[4]}, {&ADCCC26XX_fxnTable, &adcCC26xxObjects[5], &adcCC26xxHWAttrs[5]}, {&ADCCC26XX_fxnTable, &adcCC26xxObjects[6], &adcCC26xxHWAttrs[6]}, {&ADCCC26XX_fxnTable, &adcCC26xxObjects[7], &adcCC26xxHWAttrs[7]}, {&ADCCC26XX_fxnTable, &adcCC26xxObjects[8], &adcCC26xxHWAttrs[8]}, {&ADCCC26XX_fxnTable, &adcCC26xxObjects[9], &adcCC26xxHWAttrs[9]}, {&ADCCC26XX_fxnTable, &adcCC26xxObjects[10], &adcCC26xxHWAttrs[10]}, {NULL, NULL, NULL}, }; /* * ========================== ADC end ========================================= */
//Main file
int main() { /* Register Application callback to trap asserts raised in the Stack */ RegisterAssertCback(AssertHandler); //Board_initGeneral(); PIN_init(BoardGpioInitTable); Board_initADC(); // Power_enablePolicy() UART_init(); UartLog_init(UART_open(Board_UART, NULL)); // uint16_t i; ADC_Handle adc; ADC_Params params; int_fast16_t res; ADC_Params_init(¶ms); adc = ADC_open(Board_ADC0, ¶ms); if (adc == NULL) { Log_info0("Error initializing ADC channel 0\n"); } else { Log_info0("ADC channel 0 initialized\n"); } /* Blocking mode conversion */ res = ADC_convert(adc, &adcValue0); if (res == ADC_STATUS_SUCCESS) { Log_info1("ADC channel 0 convert result: %d", adcValue0); } else { Log_info0("ADC channel 0 convert failed\n"); } ADC_close(adc); // System_printf("||"); Log_info0("UART Logger initialized"); // Enable iCache prefetching VIMSConfigure(VIMS_BASE, TRUE, TRUE); // Enable cache VIMSModeSet(VIMS_BASE, VIMS_MODE_ENABLED); #if !defined( POWER_SAVING ) || defined( USE_FPGA ) /* Set constraints for Standby, powerdown and idle mode */ // PowerCC26XX_SB_DISALLOW may be redundant Power_setConstraint(PowerCC26XX_SB_DISALLOW); Power_setConstraint(PowerCC26XX_IDLE_PD_DISALLOW); #endif // POWER_SAVING | USE_FPGA /* Initialize ICall module */ ICall_init(); /* Start tasks of external images - Priority 5 */ ICall_createRemoteTasks(); /* Kick off profile - Priority 3 */ GAPRole_createTask(); SimpleBLEPeripheral_createTask(); /* enable interrupts and start SYS/BIOS */ BIOS_start(); return 0; }