TI论坛
直播中

翁齐芳

8年用户 187经验值
私信 关注
[问答]

CC2640R2F ADC功能不正常该怎么办?

有大神指导一下吗?
现在我在用CC2640R2F的ADC功能是参考ti例程adcsinglechannel做的。但是我发现我一旦调用ADC_init();函数我所有的按键中断全部失灵。而且ADC功能也不正常。
以下是我的配置:
引用的头文件如下:
#include
#include
配置文件如下:

/* Analog Capable DIOs */
#define CC2640R2_LAUNCHXL_DIO5_ANALOG          IOID_5

#define CC2640R2_ADCCOUNT   1


typedef enum CC2640R2_LAUNCHXL_ADCName [
     CC2640R2_LAUNCHXL_ADC0 = 0,
     CC2640R2_LAUNCHXL_ADC1,
     CC2640R2_LAUNCHXL_ADC2,
     CC2640R2_LAUNCHXL_ADC3,
     CC2640R2_LAUNCHXL_ADC4,
     CC2640R2_LAUNCHXL_ADC5,
     CC2640R2_LAUNCHXL_ADC6,
     CC2640R2_LAUNCHXL_ADC7,
     CC2640R2_LAUNCHXL_ADCDCOUPL,
     CC2640R2_LAUNCHXL_ADCVSS,
     CC2640R2_LAUNCHXL_ADCVDDS,

     CC2640R2_LAUNCHXL_ADCCOUNT
] CC2640R2_LAUNCHXL_ADCName;

ADCCC26XX_Object adcCC26xxObjects[CC2640R2_ADCCOUNT];

const ADCCC26XX_HWAttrs adcCC26xxHWAttrs[CC2640R2_ADCCOUNT] = [
     [
         .adcDIO              = CC2640R2_LAUNCHXL_DIO5_ANALOG,
         .adcCompBInput       = ADC_COMPB_IN_AUXIO5,
         .refSource           = ADCCC26XX_FIXED_REFERENCE,
         .samplingDuration    = ADCCC26XX_SAMPLING_DURATION_2P7_US,
         .inputScalingEnabled = true,
         .triggerSource       = ADCCC26XX_TRIGGER_MANUAL,
         .returnAdjustedVal   = false
     ]

];

//ADC
const ADC_Config ADC_config[CC2640R2_ADCCOUNT] = [
     [&ADCCC26XX_fxnTable, &adcCC26xxObjects[CC2640R2_LAUNCHXL_ADC5], &adcCC26xxHWAttrs[CC2640R2_LAUNCHXL_ADC5]],

];

//ADC_COMPB_IN_AUXIO5

const uint_least8_t ADC_count = CC2640R2_ADCCOUNT;

其他什么都不做,然后我在初始化函数那里加上 ADC_init();就出问题了。请问我哪个地方配置出错了?
有能够正常跑起来的ADC例子可以给我参考一下吗?

回帖(5)

翁齐芳

2019-11-1 09:52:39
我使用的按键IO口是DIO7和IOD6,ADC检测口是DIO5,没有冲突。 Susan有建议吗?
举报

马海娟

2019-11-1 10:07:39
引用: pqwiepowqie 发表于 2019-11-1 16:10
我使用的按键IO口是DIO7和IOD6,ADC检测口是DIO5,没有冲突。 Susan有建议吗?

void *threadFxn0(void *arg0)[    ADC_Handle   adc;    ADC_Params   params;    int_fast16_t res;    ADC_Params_init(¶ms);    adc = ADC_open(Board_ADC0, ¶ms);    if (adc == NULL) [        Display_printf(display, 0, 0, "Error initializing ADC channel 0n");        while (1);    ]    /* Blocking mode conversion */    res = ADC_convert(adc, &adcValue0);    if (res == ADC_STATUS_SUCCESS) [        adcValue0MicroVolt = ADC_convertRawToMicroVolts(adc, adcValue0);        Display_printf(display, 0, 0, "ADC channel 0 convert result: %d uVn", adcValue0MicroVolt);    ]    else [        Display_printf(display, 0, 0, "ADC channel 0 convert failedn");    ]    ADC_close(adc);    return (NULL);]  你参照这个用ADC_OPEN配置ADC即可,无需使用ADC_INIT。此外如果你要用按键操作推荐使用以下code:/****************************************************************************** @file  board_key.c @brief This file contains the interface to the SRF06EB Key Service. Group: WCS, BTS Target Device: CC2650, CC2640, CC1350 ******************************************************************************  Copyright (c) 2014-2016, Texas Instruments Incorporated All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: *  Redistributions of source code must retain the above copyright    notice, this list of conditions and the following disclaimer. *  Redistributions in binary form must reproduce the above copyright    notice, this list of conditions and the following disclaimer in the    documentation and/or other materials provided with the distribution. *  Neither the name of Texas Instruments Incorporated nor the names of    its contributors may be used to endorse or promote products derived    from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ****************************************************************************** Release Name: ble_sdk_2_02_01_18 Release Date: 2016-10-26 15:20:04 *****************************************************************************//********************************************************************* * INCLUDES */#include #include #include #include #include #include #ifdef USE_ICALL#include #endif   #include #include "util.h"#include "board_key.h"#include "board.h"/********************************************************************* * TYPEDEFS *//********************************************************************* * LOCAL FUNCTIONS */static void Board_keyChangeHandler(UArg a0);static void Board_keyCallback(PIN_Handle hPin, PIN_Id pinId);/******************************************************************************* * EXTERNAL VARIABLES *//********************************************************************* * LOCAL VARIABLES */// Value of keys Pressedstatic uint8_t keysPressed;// Key debounce clockstatic Clock_Struct keyChangeClock;// Pointer to application callbackkeysPressedCB_t appKeyChangeHandler = NULL;// Memory for the GPIO module to construct a HwiHwi_Struct callbackHwiKeys;// PIN configuration structure to set all KEY pins as inputs with pullups enabledPIN_Config keyPinsCfg[] =[#if defined (CC2650_LAUNCHXL) || defined (CC1350_LAUNCHXL)    Board_BTN1          | PIN_GPIO_OUTPUT_DIS  | PIN_INPUT_EN  |  PIN_PULLUP,    Board_BTN2          | PIN_GPIO_OUTPUT_DIS  | PIN_INPUT_EN  |  PIN_PULLUP,#elif defined (CC2650DK_7ID)  || defined (CC1350DK_7XD)    Board_KEY_SELECT    | PIN_GPIO_OUTPUT_DIS  | PIN_INPUT_EN  |  PIN_PULLUP,    Board_KEY_UP        | PIN_GPIO_OUTPUT_DIS  | PIN_INPUT_EN  |  PIN_PULLUP,    Board_KEY_DOWN      | PIN_GPIO_OUTPUT_DIS  | PIN_INPUT_EN  |  PIN_PULLUP,    Board_KEY_LEFT      | PIN_GPIO_OUTPUT_DIS  | PIN_INPUT_EN  |  PIN_PULLUP,    Board_KEY_RIGHT     | PIN_GPIO_OUTPUT_DIS  | PIN_INPUT_EN  |  PIN_PULLUP,#endif    PIN_TERMINATE];PIN_State  keyPins;PIN_Handle hKeyPins;/********************************************************************* * PUBLIC FUNCTIONS *//********************************************************************* * @fn      Board_initKeys * * @brief   Enable interrupts for keys on GPIOs. * * @param   appKeyCB - application key pressed callback * * @return  none */void Board_initKeys(keysPressedCB_t appKeyCB)[  // Initialize KEY pins. Enable int after callback registered  hKeyPins = PIN_open(&keyPins, keyPinsCfg);  PIN_registerIntCb(hKeyPins, Board_keyCallback);#if defined (CC2650_LAUNCHXL) || defined (CC1350_LAUNCHXL)  PIN_setConfig(hKeyPins, PIN_BM_IRQ, Board_BTN1        | PIN_IRQ_NEGEDGE);  PIN_setConfig(hKeyPins, PIN_BM_IRQ, Board_BTN2        | PIN_IRQ_NEGEDGE);#elif defined (CC2650DK_7ID)  || defined (CC1350DK_7XD)  PIN_setConfig(hKeyPins, PIN_BM_IRQ, Board_KEY_SELECT  | PIN_IRQ_NEGEDGE);  PIN_setConfig(hKeyPins, PIN_BM_IRQ, Board_KEY_UP      | PIN_IRQ_NEGEDGE);  PIN_setConfig(hKeyPins, PIN_BM_IRQ, Board_KEY_DOWN    | PIN_IRQ_NEGEDGE);  PIN_setConfig(hKeyPins, PIN_BM_IRQ, Board_KEY_LEFT    | PIN_IRQ_NEGEDGE);  PIN_setConfig(hKeyPins, PIN_BM_IRQ, Board_KEY_RIGHT   | PIN_IRQ_NEGEDGE);#endif#ifdef POWER_SAVING  //Enable wakeup#if defined (CC2650_LAUNCHXL) || defined (CC1350_LAUNCHXL)  PIN_setConfig(hKeyPins, PINCC26XX_BM_WAKEUP, Board_BTN1 | PINCC26XX_WAKEUP_NEGEDGE);  PIN_setConfig(hKeyPins, PINCC26XX_BM_WAKEUP, Board_BTN2 | PINCC26XX_WAKEUP_NEGEDGE);#elif defined (CC2650DK_7ID)  || defined (CC1350DK_7XD)  PIN_setConfig(hKeyPins, PINCC26XX_BM_WAKEUP, Board_KEY_SELECT | PINCC26XX_WAKEUP_NEGEDGE);  PIN_setConfig(hKeyPins, PINCC26XX_BM_WAKEUP, Board_KEY_UP | PINCC26XX_WAKEUP_NEGEDGE);  PIN_setConfig(hKeyPins, PINCC26XX_BM_WAKEUP, Board_KEY_DOWN | PINCC26XX_WAKEUP_NEGEDGE);  PIN_setConfig(hKeyPins, PINCC26XX_BM_WAKEUP, Board_KEY_LEFT | PINCC26XX_WAKEUP_NEGEDGE);  PIN_setConfig(hKeyPins, PINCC26XX_BM_WAKEUP, Board_KEY_RIGHT | PINCC26XX_WAKEUP_NEGEDGE);#endif#endif //POWER_SAVING    // Setup keycallback for keys  Util_constructClock(&keyChangeClock, Board_keyChangeHandler,                      KEY_DEBOUNCE_TIMEOUT, 0, false, 0);  // Set the application callback  appKeyChangeHandler = appKeyCB;]/********************************************************************* * @fn      Board_keyCallback * * @brief   Interrupt handler for Keys * * @param   none * * @return  none */static void Board_keyCallback(PIN_Handle hPin, PIN_Id pinId)[  keysPressed = 0;#if defined (CC2650_LAUNCHXL) || defined (CC1350_LAUNCHXL)  if ( PIN_getInputValue(Board_BTN1) == 0 )  [    keysPressed |= KEY_LEFT;  ]  if ( PIN_getInputValue(Board_BTN2) == 0 )  [    keysPressed |= KEY_RIGHT;  ]  #elif defined (CC2650DK_7ID)  || defined (CC1350DK_7XD)  if ( PIN_getInputValue(Board_KEY_SELECT) == 0 )  [    keysPressed |= KEY_SELECT;  ]  if ( PIN_getInputValue(Board_KEY_UP) == 0 )  [    keysPressed |= KEY_UP;  ]  if ( PIN_getInputValue(Board_KEY_DOWN) == 0 )  [    keysPressed |= KEY_DOWN;  ]  if ( PIN_getInputValue(Board_KEY_LEFT) == 0 )  [    keysPressed |= KEY_LEFT;  ]  if ( PIN_getInputValue(Board_KEY_RIGHT) == 0 )  [    keysPressed |= KEY_RIGHT;  ]#endif    Util_startClock(&keyChangeClock);]/********************************************************************* * @fn      Board_keyChangeHandler * * @brief   Handler for key change * * @param   UArg a0 - ignored * * @return  none */static void Board_keyChangeHandler(UArg a0)[  if (appKeyChangeHandler != NULL)  [    // Notify the application    (*appKeyChangeHandler)(keysPressed);  ]]/******************************************************************************************************************************************/
                                                                           致力于帮助更多使用TI平台的开发者!
举报

李子月

2019-11-1 10:19:06
你的芯片是7*7的封装不?
                                                                         
提供德州仪器蓝牙和射频cc2540,cc2541,cc26系列,cc13系列脱机烧录工具。



 
举报

翁齐芳

2019-11-1 10:38:29
引用: victorlekwk 发表于 2019-11-1 16:25
void *threadFxn0(void *arg0)[    ADC_Handle   adc;    ADC_Params   params;    int_fast16_t res;    ADC_Params_init(&params);    adc = ADC_open(Board_ADC0, &params);    if (adc == NULL) [        Display_printf(display, 0, 0, "Error initializing ADC channel 0n");        while (1);    ]    /* Blocking ...

Dear Alvin:
我参考网上的例程已经可以检测到AD值了,但是我发现它的AD基准电压是4.3V,我想要将电源电压作为参考电压,请问要怎么设置?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分