This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC3220MODA:ADCinit()导致中断不起作用

Guru**** 2988540 points

Other Parts Discussed in Thread: CC3220MODA

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/718086/cc3220moda-adcinit-causes-interrupts-not-work

器件型号:CC3220MODA

大家好、

我有一个基于 out_OF_Box 示例的工作代码、其中 GPIO6上有一个中断、导致 LED 切换。

当我添加一行时:

adc_init()

在 mainThread 中、中断停止工作。  

概括而言、有人能否解释 ADC_init 和 GPIO 中断处理之间是否存在任何连接?

谢谢、

David

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 David:

    请提供您的 TI 驱动程序配置文件( CC3220xx_LAUNCHXL.c )。 您使用的 SDK 版本是什么? 您使用自己的硬件还是 LaunchPad?

    1月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jan、

    以下是 TI 驱动程序配置文件:

    /*
    版权所有(c) 2016-2017、德州仪器(TI)公司
    *保留所有权利。
    *
    *
    只要
    符合以下条件*、允许以源代码和二进制形式重新分发和使用:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    ***二进制形式的再发行必须在
    
    *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    ***未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *、
    
    不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
    *贡献者都不对任何直接、间接、偶然、特殊、
    *模范、 或相应的损害(包括但不限于
    *采购替代产品或服务;丧失使用、数据或利润;
    *或业务中断)、但出于任何责任理论
    、*无论是在合同中、严格责任还是由于
    使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
    、*即使已获悉可能会发生此类损坏。
    //
    
    /*
    === CC3220S_LAUNCHXL.c ===
    *此文件负责为
    * CC3220S_LAUNCHXL 板设置特定于电路板的项目。
    */
    
    #include 
    #include 
    #include 
    
    #include 
    #include 
    #include 
    
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    
    #include 
    #include 
    
    #include "CC3220S_LAUNCHXL.h"
    
    /*
    此定义决定是使用 UARTCC32XXDMA 驱动程序
    *还是使用 UARTCC32XX (无 DMA)驱动程序。 设置为1可使用 UARTCC32XXDMA
    *驱动程序。
    */
    #ifndef TI_DRIVERS_UART_DMA
    #define TI_DRIVERS_UART_DMA 0
    #endif
    
    //
    *========================================== ADC ================================================
    */
    #include 
    #include 
    
    ADCCC32XX_Object adcCC3220SObjects[CC3220S_LAUNCHXL_ADCCOUNT];
    
    const ADCCC32XX_HWAttrsV1 adcCC3220SHWAttrs[CC3220S_LAUNCHXL_ADCCOUNT]={
    {
    .adcPin = ADCCC32XX_PIN_58_CH_1
    // .adcPin =由 David 关闭的 ADCCC32XX_PIN_59_CH_2
    }、
    {
    .adcPin = ADCCC32XX_PIN_59_CH_2
    // .adcPin =由 David 关闭的 ADCCC32XX_PIN_60_CH_3
    }
    };
    
    const ADC_Config ADC_CONFIG[CC3220S_LAUNCHXL_ADCCOUNT]={
    {
    .fxnTablePtr =&ADCCC32XX_fxnTable、
    .object =&adcCC3220SObjects[CC3220S_LAUNCHXL_ADC0]、
    hwAttrs =&adcCC3220SHWAttrs[CC3220S_LAUNCHXL_ADC0]
    }、
    {
    .fxnTablePtr =&ADCCC32XX_fxnTable、
    .object =&adcCC3220SObjects[CC3220S_LAUNCHXL_ADC1]、
    hwAttrs =&adcCC3220SHWAttrs[CC3220S_LAUNCHXL_ADC1]
    }
    };
    
    const uint_least8_t ADC_count = CC3220S_LAUNCHXL_ADCCOUNT;
    
    //
    *========================================= 捕获=========================================
    */
    #include 
    #include 
    
    CaptureCC32XX_Object CaptureCC3220SObjects[CC3220S_LAUNCHXL_CAPTURECOUNT];
    
    const CaptureCC32XX_HWAttrs CaptureCC3220SHWAttrs[CC3220S_LAUNCHXL_CAPTURECOUNT]=
    {
    {
    .CapturePin = CaptureCC32XX_PIN_04、
    .intPriority =~0
    }、
    {
    .CapturePin = CaptureCC32XX_PIN_05、
    .intPriority =~0
    }、
    };
    
    const Capture_Config Capture_config[CC3220S_LAUNCHXL_CAPTURECOUNT]={
    {
    .fxnTablePtr =&CaptureCC32XX_fxnTable、
    .object =捕捉 CC3220SObjects[CC3220S_LAUNCHXL_CAPTURE0]、
    .hwAttrs =捕捉 CC3220SHWAttrs [CC3220S_LAUNCHXL_CAPTURE0]
    }、
    {
    .fxnTablePtr =&CaptureCC32XX_fxnTable、
    .object =捕捉 CC3220SObjects[CC3220S_LAUNCHXL_CAPTURE1]、
    hwAttrs =&captureCC3220SHWAttrs[CC3220S_LAUNCHXL_CAPTURE1]
    }
    };
    
    const uint_least8_t Capture_count = CC3220S_LAUNCHXL_CAPTURECOUNT;
    
    //
    *================================================= Crypto ================================================
    */
    #include 
    
    CryptoCC32XX_Object cryptoCC3220SObjects[CC3220S_LAUNCHXL_CRYPTOCOUNT];
    
    const CryptoCC32XX_Config CryptoCC32XX_CONFIG[CC3220S_LAUNCHXL_CRYPTOCOUNT]={
    {
    .object =加密 CC3220SObjects[CC3220S_LAUNCHXL_CRYPTO0]
    }
    };
    
    const uint_least8_t CryptoCC32XX_count = CC3220S_LAUNCHXL_CRYPTOCOUNT;
    
    //
    *=================================== DMA ================================================
    */
    #include 
    
    #if defined (__TI_Compiler_version__)
    #pragma DATA_ALIGN (dmaControlTable,1024)
    #Elif defined (__IAR_SYSTEMS_ICC__)
    #pragma DATA_ALIGNINS=1024
    #Elif defined (__GNU__)
    __attribute__((aligned (1024)))#endif
    
    static tControlTable=*=*=dma64==*===[maControlTable_=*=*=
    
    
    dmaErrorFxn ===
    *这是 uDMA 错误中断的处理程序。
    */
    static void dmaErrorFxn (uintptr_t arg)
    {
    int status = map_uDMAErrorStatusGet ();
    map_uDMAErrorStatusClear ();
    
    /*禁止未使用的变量警告*/
    (无效)地位;
    
    while (1);
    }
    
    UDMACC32XX_Object udmaCC3220SObject;
    
    const UDMACC32XX_HWAttrs udmaCC3220SHWAttrs ={
    .controlBaseAddr =(void *) dmaControlTable、
    .dmaErrorFxn =(UDMACC32XX_ErrorFxn) dmaErrorFxn、
    .intNum = INT_UDMAERR、
    .intPriority =(~0)
    };
    
    const UDMACC32XX_Config UDMACC32XX_config ={
    .object = udmaCC3220SObject、
    hwAttrs =&udmaCC3220SHWAttrs
    };
    
    /*
    ========================================= 一般================================================
    //
    /*
    === CC3220S_LAUNCHXL_initGeneral ===
    */
    void CC3220S_LAUNCHXL_initGeneral (void)
    {
    PRCMCC3200MCUInit();
    power_init();
    }
    
    /*
    ======================================== GPIO ===========================================
    */
    #include 
    #include 
    
    
    //由 David 修改
    //
    *引脚配置数组
    *注:引脚配置的顺序必须与之前
    的顺序一致* 在 CC3220S_LAUNCHXL.h 中定义
    *注意:不用于中断的引脚应放置在
    *的末尾 数组。 回调数组到
    *的回调条目可以省略 减少内存使用。
    */
    GPIO_PinConfig gpioPinConfigs[]={
    /*带有回调的输入引脚*/
    /* CC3220S_LAUNCHXL_GPIO_SW2 *
    GPIOCC32XX_GPIO_22 | GPIO_CFG_INPUT| GPIO_CFG_IN_INT_INT_RISING、
    /* CC3220S_LAUNCHXL_GPIO_SW3 */
    GPIOCC32XX_GPIO_13 | GPIO_CFG_INPUT| GPIO_CFG_IN_INT_INT_RISING、
    
    /*输出引脚*/
    /* CC3220S_LAUNCHXL_GPIO_LED_D7 *
    GPIOCC32XX_GPIO_09 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW、
    
    /* CC3220S_LAUNCHXL_GPIO_LED_GP7 *
    GPIOCC32XX_GPIO_07 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW、
    
    /* CC3220S_LAUNCHXL_GPIO_LED_GP15 *
    GPIOCC32XX_GPIO_15 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW、
    
    /* CC3220S_LAUNCHXL_GPIO_LED_GP8 *
    GPIOCC32XX_GPIO_08 | GPIO_CFG_INPUT| GPIO_CFG_IN_INT_INT_RISING、
    
    /* CC3220S_LAUNCHXL_GPIO_LED_GP12 *
    GPIOCC32XX_GPIO_12 | GPIO_CFG_INPUT| GPIO_CFG_IN_INT_INT_RISING、
    
    /* CC3220S_LAUNCHXL_GPIO_LED_GP12 *//由 David 于2018年7月31日添加
    GPIOCC32XX_GPIO_06 | GPIO_CFG_INPUT | GPIO_CFG_IN_INT_INT_FALLING、
    
    /*
    * CC3220S_LAUNCHXL_GPIO_LED_D5和 CC3220S_LAUNCHXL_GPIO_LED_D6与共享
    * I2C 和 PWM 外设。 为了使这些示例正常工作、这些示例
    * LED 取自 gpioPinConfig[]
    *
    /* CC3220S_LAUNCHXL_GPIO_LED_D6 *
    /* GPIOCC32XX_GPIO_10 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW、*
    /* CC3220S_LAUNCHXL_GPIO_LED_D5 *
    /* GPIOCC32XX_GPIO_11 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW、*/
    };
    //>//
    
    
    *回调函数指针数组
    *注意:引脚配置的顺序必须与之前
    的顺序一致* 在 CC3220S_LAUNCHXL.h 中定义
    *注意:不用于中断的引脚可从回调数组中省略至
    * 减少内存使用(如果放置在 gpioPinConfigs 数组的末尾)。
    */
    GPIO_CallbackFxn gpioCallbackFunctions[]={
    空、// CC3220S_LAUNCHXL_GPIO_SW2 */
    空/* CC3220S_LAUNCHXL_GPIO_SW3 */
    };
    
    /*特定于器件的 GPIO_CONFIG 结构*/
    CONST GPIOCC32XX_Config GPIOCC32XX_CONFIG ={
    .pinConfigs =(GPIO_PinConfig *) gpioPinConfigs、
    .callback =(GPIO_CallbackFxn *) gpioCallbackFuncions、
    numberOfPinConfigs = sizeof (gpioPinConfigs)/sizeof (GPIO_PinConfig)、
    numberOfCallbacks = sizeof (gpioCallbackFuncions)/sizeof (GPIO_CallbackFxn)、
    .intPriority =(~0)
    };
    
    /*
    ========================================= Display =================================================
    */
    #include 
    #include 
    #define MAXPRINTLEN 1024
    
    DisplayUart_Object displayUartObject;
    
    static char displayBuf[MAXPRINTLEN];
    
    const DisplayUart_HWAttrs displayUartHWAttrs ={
    uartIdx = 0、
    .budrate = 115200、
    .mutexTimeout =(unsigned int)(-1)、
    strBuf = displayBuf、
    strBufLen = MAXPRINTLEN
    };
    
    #ifndef Board_display_use_uart_ansi
    #define Board_display_use_uart_ansi 0
    #endif
    
    const Display_Config Display_config[]={
    {
    # if (Board_display_use_uart_ansi)
    .fxnTablePtr =&DisplayUartAnsi_fxnTable、
    # else //默认为最小 UART,无光标放置*/
    .fxnTablePtr =&DisplayUartMin_fxnTable
    、# endif
    .object =显示 UartObject (&D)、
    hwAttrs =&displayUartHWAttrs
    }
    };
    
    const uint_least8_t Display_count = sizeof (Display_config)/sizeof (Display_Config);
    
    //
    *========================================================= I2C ================================================
    */
    #include 
    #include 
    
    I2CCC32XX_Object i2cCC3220SObjects[CC3220S_LAUNCHXL_I2CCOUNT;
    
    const I2CCC32XX_HWAttrsV1 i2cCC3220SHWAttrs[CC3220S_LAUNCHXL_I2CCOUNT ={
    {
    baseAddr = I2CA0_BASE、
    .intNum = INT_I2CA0、
    .intPriority =(~0)、
    clkPin = I2CCC32XX_PIN_01_I2C_SCL、
    .dataPin = I2CCC32XX_PIN_02_I2C_SDA
    }
    };
    
    const I2C_Config I2C_CONFIG[CC3220S_LAUNCHXL_I2CCOUNT ={
    {
    .fxnTablePtr =&I2CCC32XX_fxnTable、
    .object =&i2cCC3220SObjects[CC3220S_LAUNCHXL_I2C0]、
    hwAttrs =&i2cCC3220SHWAttrs[CC3220S_LAUNCHXL_I2C0]
    }
    };
    
    const uint_least8_t I2C_count = CC3220S_LAUNCHXL_I2CCOUNT;
    
    //
    *================================================= I2S ========================================================
    */
    #include 
    #include 
    
    I2SCC32XXDMA_Object i2sCC3220SObjects[CC3220S_LAUNCHXL_I2SCOUNT];
    
    const I2SCC32XXDMA_HWAttrsV1 i2sCC3220SHWAttrs[CC3220S_LAUNCHXL_I2SCOUNT]={
    {
    baseAddr = I2S_base、
    .intNum = INT_I2S、
    .intPriority =(~0)、
    .rxChannelIndex = UDMA_CH4_I2S_RX、
    txChannelIndex = UDMA_CH5_I2S_TX、
    .xr0Pin = I2SCC32XXDMA_PIN_64_McAXR0、
    .xr1引脚= I2SCC32XXDMA_PIN_50_McAXR1、
    clkxPin = I2SCC32XXDMA_PIN_62_McACLKX、
    clkPin = I2SCC32XXDMA_PIN_53_McACLK、
    fsxPin = I2SCC32XXDMA_PIN_63_McAFSX
    、}
    };
    
    const I2S_Config I2S_CONFIG[CC3220S_LAUNCHXL_I2SCOUNT]={
    {
    .fxnTablePtr =&I2SCC32XXDMA_fxnTable、
    .object =&i2sCC3220SObjects[CC3220S_LAUNCHXL_I2S0]、
    hwAttrs =&i2sCC3220SHWAttrs[CC3220S_LAUNCHXL_I2S0]
    }
    };
    
    const uint_least8_t I2S_count = CC3220S_LAUNCHXL_I2SCOUNT;
    
    /*
    ========================================== 电源================================================
    */
    /*
    此表定义
    了在 LPDS 期间为每个可屏蔽引脚*设置的停止状态。 (在 LPDS 期间必须将器件引脚停驻、以
    实现最大的*节电。) 如果引脚应保持悬空状态、请指定状态
    * PowerCC32XX_DONT_PARK。 例如、对于 UART TX 引脚、器件
    *将在过渡到 LPDS 期间自动将引脚置于高电平状态
    、*因此电源管理器不需要显式地将引脚暂留。 因此
    、*该表中的相应条目应指示 PowerCC32XX_DONT_PARK。
    //
    PowerCC32XX_ParkInfo parkInfo[]={
    // 引脚 驻车状态 引脚别名(功能)
    -------- ---------------------- ---------- *
    {PowerCC32XX_PIN01、PowerCC32XX_weak 下拉_STD}、// GPIO10 *
    {PowerCC32XX_PIN02、PowerCC32XX_weak 下拉_STD}、// GPIO11 *
    {PowerCC32XX_PIN03、PowerCC32XX_weak 下拉_STD}、// GPIO12 *
    {PowerCC32XX_PIN04、PowerCC32XX_weak 下拉_STD}、// GPIO13 *
    {PowerCC32XX_PIN05、PowerCC32XX_weak 下拉_STD}、// GPIO14 *
    {PowerCC32XX_PIN06、PowerCC32XX_weak 下拉_STD}、// GPIO15 *
    {PowerCC32XX_PIN07、PowerCC32XX_weak 下拉_STD}、// GPIO16 *
    {PowerCC32XX_PIN08、PowerCC32XX_weak 下拉_STD}、// GPIO17 *
    {PowerCC32XX_PIN13、PowerCC32XX_weak 下拉_STD}、/* FLASH_SPI_DIN *
    {PowerCC32XX_PIN15、PowerCC32XX_weak 下拉_STD}、// GPIO22 *
    {PowerCC32XX_PIN16、PowerCC32XX_weak 下拉_STD}、// TDI (JTAG 调试)*
    {PowerCC32XX_PIN17、PowerCC32XX_weak 下拉_STD}、/* TDO (JTAG 调试)*/
    {PowerCC32XX_PIN19、PowerCC32XX_weak 下拉_STD}、/* TCK (JTAG 调试)*/
    {PowerCC32XX_PIN20、PowerCC32XX_weak 下拉_STD}、/* TMS (JTAG 调试)*/
    {PowerCC32XX_PIN18、PowerCC32XX_weak 下拉_STD}、// GPIO28 *
    {PowerCC32XX_PIN21、PowerCC32XX_weak 下拉_STD}、// SOP2 *
    {PowerCC32XX_PIN29、PowerCC32XX_weak 下拉_STD}、// ANTSEL1 *
    {PowerCC32XX_PIN30、PowerCC32XX_weak 下拉_STD}、// ANTSEL2 *
    {PowerCC32XX_PIN45、PowerCC32XX_weak 下拉_STD}、/* DCDC_ANA2_SW_P *
    {PowerCC32XX_PIN50、PowerCC32XX_weak 下拉_STD}、// GPIO0 *
    {PowerCC32XX_PIN52、PowerCC32XX_weak 下拉_STD}、/* RTC_XTAL_N *
    {PowerCC32XX_PIN53、PowerCC32XX_weak 下拉_STD}、// GPIO30 *
    {PowerCC32XX_PIN55、PowerCC32XX_weak 上拉_std}、/* GPIO1 (XDS_UART_RX)*
    {PowerCC32XX_PIN57、PowerCC32XX_weak 上拉_std}、/* GPIO2 (XDS_UART_TX)*
    {PowerCC32XX_PIN58、PowerCC32XX_weak 下拉_STD}、// GPIO3 *
    {PowerCC32XX_PIN59、PowerCC32XX_weak 下拉_STD}、// GPIO4 *
    {PowerCC32XX_PIN60、PowerCC32XX_weak 下拉_STD}、// GPIO5 *
    {PowerCC32XX_PIN61、PowerCC32XX_weak 下拉_STD}、// GPIO6 *
    {PowerCC32XX_PIN62、PowerCC32XX_weak 下拉_STD}、// GPIO7 *
    {PowerCC32XX_PIN63、PowerCC32XX_weak 下拉_STD}、// GPIO8 *
    {PowerCC32XX_PIN64、PowerCC32XX_weak 下拉_STD}、// GPIO9 */
    };/*
    
    
    此结构定义电源管理器的配置。
    *
    *在此配置中,默认情况下禁用电源策略(因为
    * enablePolicy 设置为 false)。 可以
    通过调用 Power_enablePolicy()在运行时*动态启用电源策略,也可以在构建时通过在此
    结构中将* enablePolicy 更改为 true 来启用电源策略。
    */
    const PowerCC32XX_ConfigV1 PowerCC32XX_CONFIG ={
    .policyInitFxn =&PowerCC32XX_initPolicy、
    policyFxn =&PowerCC32XX_sleepPolicy、
    .enterLPDSHookFxn =空、
    .resumeLPDSHookFxn =空、
    .enablePolicy = false、
    .enableGPIOWakeupLPDS = true、
    .enableGPIOWakeupShutdown = true、
    .enableNetworkWakeupLPDS = true、
    .wakeupGPIOSourceLPDS = PRCM_LPD_GPIO13、
    .wakeupGPIOTypeLPDS = PRCM_LPD_FALL_EDGE、
    .wakeupGPIOFxnLPDS =空、
    .wakeupGPIOFxnLPDSArg=0、
    .wakeupGPIOSourceShutdown = PRCM_HIB_GPIO13、
    .wakeupGPIOTypeShutdown = PRCM_HIB_RISE_EDGE、
    .ramRetentionMaskLPDS = PRCM_SRAM_COL_1 | PRCM_SRAM_COL_2 |
    PRCM_SRAM_COL_3 | PRCM_SRAM_COL_4、
    keepDebugActiveDuringLPDS = false、
    ioRetentionShutdown = PRCM_IO_RET_GRP_1、
    .pinParkDefs = parkInfo、
    numpins = sizeof (parkInfo)/sizeof (PowerCC32XX_ParkInfo)
    };
    
    /*
    =========================================== PWM ================================================
    */
    #include 
    #include 
    
    PWMTimerCC32XX_Object pwmTimerCC3220SObjects[CC3220S_LAUNCHXL_PWMCOUNT;
    
    const PWMTimerCC32XX_HWAttrsV2 pwmTimerCC3220SHWAttrs[CC3220S_LAUNCHXL_PWMCOUNT ={}{
    {/* CC3220S_LAUNCHXL_PWM6 *
    pwmPin = PWMTimerCC32XX_PIN_01
    }、
    {* CC3220S_LAUNCHXL_PWM7 */
    pwmPin = PWMTimerCC32XX_PIN_02
    }
    };
    
    const PWM_Config PWM_CONFIG[CC3220S_LAUNCHXL_PWMCOUNT ={
    {
    .fxnTablePtr =&PWMTimerCC32XX_fxnTable、
    .object =&pwmTimerCC3220SObjects[CC3220S_LAUNCHXL_PWM6]、
    hwAttrs =&pwmTimerCC3220SHWAttrs[CC3220S_LAUNCHXL_PWM6]
    }、
    {
    .fxnTablePtr =&PWMTimerCC32XX_fxnTable、
    .object =&pwmTimerCC3220SObjects[CC3220S_LAUNCHXL_PWM7]、
    hwAttrs =&pwmTimerCC3220SHWAttrs[CC3220S_LAUNCHXL_PWM7]
    }
    };
    
    const uint_least8_t PWM_count = CC3220S_LAUNCHXL_PWMCOUNT;
    
    //
    *================================================= SDFatFS ========================================================
    */
    #include 
    #include 
    
    /*
    注意:SDFatFS 驱动程序提供了启用 FatFs
    的接口功能*,但依靠 SD 驱动程序与 SD 卡进行通信。 打开
    * SDFatFs 驱动程序实例将在内部尝试打开 SD 驱动程序实例
    *重复使用相同的索引编号(在索引0处打开 SDFatFs 驱动程序将尝试
    *在索引0处打开 SD 驱动程序)。 这要求所有 SDFatFs 驱动程序实例
    *都具有随附的 SD 驱动程序实例、该实例使用相同的索引进行定义。
    可以*接受的 SD 驱动程序实例数多于 SDFatFs 驱动程序实例
    *、但不支持相反、SDFatFs 将无法打开。
    //
    SDFatFS_Object sdfatfsObjects[CC3220S_LAUNCHXL_SDFatFSCOUNT];
    
    const SDFatFS_Config SDFatFS_CONFIG[CC3220S_LAUNCHXL_SDFatFSCOUNT]={
    {
    .object =&sdfatfsObjects[CC3220S_LAUNCHXL_SDFatFS0]
    }
    };
    
    const uint_least8_t SDFatFS_count = CC3220S_LAUNCHXL_SDFatFSCOUNT;
    
    //
    *==== sd ================================================
    */
    #include 
    #include 
    
    SDHostCC32XX_Object sdhostCC3220SObjects[CC3220S_LAUNCHXL_SDCOUNT];
    
    /* SDHost 配置结构、描述要使用的引脚*/
    const SDHostCC32XX_HWAttrsV1 sdhostCC3220SHWattrs[CC3220S_LAUNCHXL_SDCOUNT ={]
    {
    clkRate = 80000、
    .intPriority =~0、
    baseAddr = SDHOST_BASE、
    .rxChIdx = UDMA_CH23_SDHOST_RX、
    txChIdx = UDMA_CH24_SDHOST_TX、
    .dataPin = SDHostCC32XX_PIN_06_SDCARD_DATA、
    .cmd 引脚= SDHostCC32XX_PIN_08_SDCARD_CMD、
    clkPin = SDHostCC32XX_PIN_07_SDCARD_CLK
    }
    };
    
    const SD_Config SD_config[CC3220S_LAUNCHXL_SDCOUNT]={
    {
    .fxnTablePtr =&sdHostCC32XX_fxnTable、
    .object =&sdhostCC3220SObjects[CC3220S_LAUNCHXL_SD0]、
    hwAttrs =&sdhostCC3220SHWattrs[CC3220S_LAUNCHXL_SD0]
    }、
    };
    
    const uint_least8_t sd_count = CC3220S_LAUNCHXL_SDCOUNT;
    
    //
    *================================================= SPI ========================================================
    */
    #include 
    #include 
    
    SPICC32XXDMA_Object spiCC3220SDMAObjects[CC3220S_LAUNCHXL_SPICOUNT];
    
    #if defined (__TI_Compiler_version__)
    #pragma DATA_ALIGN (spiCC3220SDMAscratchBuf、32)#if
    defined (__IAR_systems_version__)#CC3220SDMCC32_CC32_
    
    t_S (spi20CC32_CC32_t_CC32_CC32_CC32_t_t_S)#t_spi20CC32_t_t_spi_S (#t_CC32_CC32_CC32_CC32_CC32_CC32_t_t_t_t_S
    
    
    
    
    
    /*索引0为链接到 NWP 的 LSPI 预留*/
    {
    baseAddr = LSPI_base、
    .intNum = INT_LSPI、
    .intPriority =(~0)、
    spiPRCM = PRCM_LSPI、
    .csControl = SPI_SW_CTRL_CS、
    csPolarity = SPI_CS_ACTIVEHIGH、
    .pinMode = SPI_4PIN_MODE、
    .TurboMode = SPI_Turbo_OFF、
    scratchBufPtr =&spiCC3220SDMAscratchBuf[CC3220S_LAUNCHXL_SPI0]、
    defaultTxBufValue = 0、
    .rxChannelIndex = UDMA_CH12_LSPI_RX、
    txChannelIndex = UDMA_CH13_LSPI_TX、
    .minDmaTransferSize = 100、
    .mosipin = SPICC32XXDMA_PIN_NO_CONFIG、
    MISO 引脚= SPICC32XXDMA_PIN_NO_CONFIG、
    clkPin = SPICC32XXDMA_PIN_NO_CONFIG、
    csPin = SPICC32XXDMA_PIN_NO_CONFIG
    }、
    {
    baseAddr = GSPI_base、
    .intNum = INT_GSPI、
    .intPriority =(~0)、
    spiPRCM = PRCM_GSPI、
    .csControl = SPI_HW_CTRL_CS、
    csPolarity = SPI_CS_ACTIVELOW、
    .pinMode = SPI_4PIN_MODE、
    .TurboMode = SPI_Turbo_OFF、
    scratchBufPtr =&spiCC3220SDMAscratchBuf[CC3220S_LAUNCHXL_SPI1]、
    defaultTxBufValue = 0、
    .rxChannelIndex = UDMA_CH6_GSPI_RX、
    txChannelIndex = UDMA_CH7_GSPI_TX、
    .minDmaTransferSize = 100、
    .mosipin = SPICC32XXDMA_PIN_07_MOSI、
    MISO 引脚= SPICC32XXDMA_PIN_06_MISO、
    clkPin = SPICC32XXDMA_PIN_05_CLK、
    .csPin = SPICC32XXDMA_PIN_08_CS
    }
    };
    
    const SPI_Config SPI_CONFIG[CC3220S_LAUNCHXL_SPICOUNT ={
    {
    .fxnTablePtr =&SPICC32XXDMA_fxnTable、
    .object =&spiCC3220SDMAObjects[CC3220S_LAUNCHXL_SPI0]、
    hwAttrs =&spiCC3220SDMAHWAttrs[CC3220S_LAUNCHXL_SPI0]
    }、
    {
    .fxnTablePtr =&SPICC32XXDMA_fxnTable、
    .object =&spiCC3220SDMAObjects[CC3220S_LAUNCHXL_SPI1]、
    hwAttrs =&spiCC3220SDMAHWAttrs[CC3220S_LAUNCHXL_SPI1]
    }
    };
    
    const uint_least8_t SPI_count = CC3220S_LAUNCHXL_SPICOUNT;
    
    //
    *========================================= 计时器=========================================
    */
    #include 
    #include 
    
    TimerCC32XX_Object timerCC3220SObjects[CC3220S_LAUNCHXL_TIMERCOUNT];
    
    const TimerCC32XX_HWAttrs timerCC3220SHWAttrs[CC3220S_LAUNCHXL_TIMERCOUNT]={
    {
    baseAddress = TIMERA0_BASE、
    .subTimer = TimerCC32XX_timer32、
    .intNum = INT_TIMERA0A、
    .intPriority =~0
    }、
    {
    baseAddress = TIMERA1_base、
    .subTimer = TimerCC32XX_timer16A、
    .intNum = INT_TIMERA1A、
    .intPriority =~0
    }、
    {
    baseAddress = TIMERA1_base、
    .subTimer = TimerCC32XX_timer16B、
    .intNum = INT_TIMERA1B、
    .intPriority =~0
    }、
    };
    
    const Timer_Config Timer_config[CC3220S_LAUNCHXL_TIMERCOUNT]={
    {
    .fxnTablePtr =&TimerCC32XX_fxnTable、
    .object =&timerCC3220SObjects[CC3220S_LAUNCHXL_TIMER0]、
    hwAttrs =&timerCC3220SHWAttrs[CC3220S_LAUNCHXL_TIMER0]
    }、
    {
    .fxnTablePtr =&TimerCC32XX_fxnTable、
    .object =&timerCC3220SObjects[CC3220S_LAUNCHXL_Timer1]、
    hwAttrs =&timerCC3220SHWAttrs[CC3220S_LAUNCHXL_Timer1]
    }、
    {
    .fxnTablePtr =&TimerCC32XX_fxnTable、
    .object =&timerCC3220SObjects[CC3220S_LAUNCHXL_TIMER2]、
    hwAttrs =&timerCC3220SHWAttrs[CC3220S_LAUNCHXL_TIMER2]
    }、
    };
    
    const uint_least8_t Timer_count = CC3220S_LAUNCHXL_TIMERCOUNT;
    
    /*
    ========================================== UART ========================================================
    */
    #include 
    #if TI_DRIVERS_UART_DMA
    #include 
    
    UARTCC32XXDMA_Object uartCC3220SDmaObjects[CC3220S_LAUNCHXL_UARTCOUNT];
    
    /* UART 配置结构*/
    const UARTCC32XXDMA_HWAttrsV1 uartCC3220SDmaHWAttrs[CC3220S_LAUNCHXL_UARTCOUNT]={\lang302\f3}
    {
    baseAddr = UARTA0_BASE、
    .intNum = INT_UARTA0、
    .intPriority =(~0)、
    .FlowControl = UARTCC32XXDMA_FLOWCTRL_NONE、
    .rxChannelIndex = UDMA_CH8_UARTA0_RX、
    txChannelIndex = UDMA_CH9_UARTA0_TX、
    rxPin = UARTCC32XXDMA_PIN_57_UART0_RX、
    txPin = UARTCC32XXDMA_PIN_55_UART0_TX、
    ctsPin = UARTCC32XXDMA_PIN_Unassigned、
    rtsPin = UARTCC32XXDMA_PIN_Unassigned、
    errorFxn =空
    }、
    {
    baseAddr = UARTA1_base、
    .intNum = INT_UARTA1、
    .intPriority =(~0)、
    .FlowControl = UARTCC32XXDMA_FLOWCTRL_NONE、
    .rxChannelIndex = UDMA_CH10_UARTA1_RX、
    txChannelIndex = UDMA_CH11_UARTA1_TX、
    rxPin = UARTCC32XXDMA_PIN_08_UART1_RX、
    txPin = UARTCC32XXDMA_PIN_07_UART1_TX、
    ctsPin = UARTCC32XXDMA_PIN_Unassigned、
    rtsPin = UARTCC32XXDMA_PIN_Unassigned、
    errorFxn =空
    }
    };
    
    const UART_Config UART_CONFIG[CC3220S_LAUNCHXL_UARTCOUNT]={
    {
    .fxnTablePtr =&UARTCC32XXDMA_fxnTable、
    .object = uartCC3220SDmaObjects[CC3220S_LAUNCHXL_UART0]、
    hwAttrs = uartCC3220SDmaHWAttrs[CC3220S_LAUNCHXL_UART0]
    }、
    {
    .fxnTablePtr =&UARTCC32XXDMA_fxnTable、
    .object = uartCC3220SDmaObjects[CC3220S_LAUNCHXL_UART1]、
    hwAttrs = uartCC3220SDmaHWAttrs[CC3220S_LAUNCHXL_UART1]
    }
    };
    
    #else
    #include 
    
    UARTCC32XX_Object uartCC3220SObjects[CC3220S_LAUNCHXL_UARTCOUNT];
    unsigned char uartCC3220SRingBuffer[CC3220S_LAUNCHXL_UARTCOUNT][32];
    
    /* UART 配置结构*
    / const UART32XX_HWAtttrsBuffer[CC3220S_UARTCC3220S_UARTCC3220S_UARTCC32X1]= UART20UARTCC32XL_UARTCC3220S[UARTST_APT]
    {
    baseAddr = UARTA0_BASE、
    .intNum = INT_UARTA0、
    .intPriority =(~0)、
    .FlowControl = UARTCC32XX_FLOWCTRL_NONE、
    .ringBufPtr = uartCC3220SRingBuffer[CC3220S_LAUNCHXL_UART0]、
    .ringBufSize = sizeof (uartCC3220SRingBuffer[CC3220S_LAUNCHXL_UART0])、
    rxPin = UARTCC32XX_PIN_57_UART0_RX、
    txPin = UARTCC32XX_PIN_55_UART0_TX、
    ctsPin = UARTCC32XX_PIN_Unassigned、
    rtsPin = UARTCC32XX_PIN_Unassigned、
    errorFxn =空
    }、
    {
    baseAddr = UARTA1_base、
    .intNum = INT_UARTA1、
    .intPriority =(~0)、
    .FlowControl = UARTCC32XX_FLOWCTRL_NONE、
    .ringBufPtr = uartCC3220SRingBuffer[CC3220S_LAUNCHXL_UART1]、
    .ringBufSize = sizeof (uartCC3220SRingBuffer[CC3220S_LAUNCHXL_UART1])、
    rxPin = UARTCC32XX_PIN_08_UART1_RX、
    txPin = UARTCC32XX_PIN_07_UART1_TX、
    ctsPin = UARTCC32XX_PIN_Unassigned、
    rtsPin = UARTCC32XX_PIN_Unassigned、
    errorFxn =空
    }
    };
    
    const UART_Config UART_CONFIG[CC3220S_LAUNCHXL_UARTCOUNT]={
    {
    .fxnTablePtr =&UARTCC32XX_fxnTable、
    .object = uartCC3220SObjects[CC3220S_LAUNCHXL_UART0]、
    hwAttrs = uartCC3220SHWAttrs [CC3220S_LAUNCHXL_UART0]
    }、
    {
    .fxnTablePtr =&UARTCC32XX_fxnTable、
    .object = uartCC3220SObjects[CC3220S_LAUNCHXL_UART1]、
    hwAttrs = uartCC3220SHWAttrs[CC3220S_LAUNCHXL_UART1]
    }
    };
    #endif /* TI_DRIVERS_UART_DMA */
    
    const uint_least8_t UART_COUNT = CC3220S_LAUNCHXL_UARTCOUNT;
    
    /*
    ==== 看门狗=========================================
    */
    #include 
    #include 
    
    WatchdogCC32XX_Object WatchdogCC3220SObjects[CC3220S_LAUNCHXL_WATCHDOGCOUNT];
    
    const WatchdogCC32XX_HWAttrs watchdogCC3220SHWAttrs[CC3220S_LAUNCHXL_WATCHDOGCOUNT]={
    {
    baseAddr = WDT_BASE、
    .intNum = INT_WDT、
    .intPriority =(~0)、
    重新载入值= 80000000 //默认 CPU 时钟频率下的1秒周期
    
    };
    
    const Watchdog_Config Watchdog_config[CC3220S_LAUNCHXL_WATCHDOGCOUNT]={
    {
    fxnTablePtr =&WatchdogCC32XX_fxnTable、
    .object =&watchdogCC3220SObjects[CC3220S_LAUNCHXL_WATCHDOG0]、
    hwAttrs =&watchdogCC3220SHWAttrs[CC3220S_LAUNCHXL_WATCHDOG0]
    }
    };
    
    const uint_least8_t Watchdog_count = CC3220S_LAUNCHXL_WATCHDOGCOUNT;
    

    SDK 版本为1_60_00_04。  

    我使用自己的硬件(CC3220MODA)。

    谢谢、

    David

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    在快速查看您的驾驶员确认信息后、我看不到任何明显的情况。 您是否能够使用 LaunchPad 和最新 SDK 重新测试、以确保问题与硬件无关?

    1月
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jan、

    中断工作正常。 这是一个看起来使其变得混乱的单个命令 ADC_init。 再看一下、我发现了一些不确定的事情:

    /*
    回调函数指针数数数数数数数数数数数数的数组
    *注意:引脚配置的顺序必须与之前
    的顺序一致* 在 CC3220S_LAUNCHXL.h 中定义
    *注意:不用于中断的引脚可从回调数组中省略至
    * 减少内存使用(如果放置在 gpioPinConfigs 数组的末尾)。
    */
    GPIO_CallbackFxn gpioCallbackFunctions[]={
    空、// CC3220S_LAUNCHXL_GPIO_SW2 */
    空/* CC3220S_LAUNCHXL_GPIO_SW3 */
    };
    

    我没有在上面的部分中指定 GPIO6的回调函数。 我在 out_for_box.c 中指定了回调函数 这是可以的吗?

    谢谢、

    David

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 David:

    这应该是可以的、这意味着代码内 GPIO_setCallback()进行回调设置。

    1月
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1月、

    我尝试了 gpiointerrupt 简单示例,ADC_init()命令不会导致出现任何问题。 在本例中、ADC 测量函数和中断处理程序函数位于2个不同的线程中。 当我按下 GPIO6上的按钮时、程序甚至不会进入中断处理程序函数。 ADC 会冻结、直到我复位电路板。

    为了解决这个问题、我尝试将 ADC 测量和中断处理程序函数移动到一个线程中、将 ADC 调用和中断配置命令移动到另一个线程中。 这种方式起作用。 但我仍然不明白为什么它在一开始就不起作用。

    谢谢、
    David
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 David:

    如果不深入了解您的代码和代码调试、我无法确定问题的原因。 现在我不知道。 您的问题可能与操作系统有关。

    此外、我不理解您在上面的发言。 您认为线程中有中断处理程序是什么意思? 中断处理程序和任务/线程是两个不同的东西。

    1月
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Jan、

    很抱歉、我的陈述不准确。 下面是我执行的步骤:

    - ADC 读取函数被编码为一个单独的、被称为 adcTask 的专用线程
    -中断配置命令位于 controlTask 线程中
    -中断处理程序位于 out_for_box.c 中

    我更改如下:
    -已删除 adcTask 线程
    -将中断处理程序函数移到了另一个文件中
    -创建了一个独立的 ADC 读取函数、并将其放入与中断处理程序函数相同的文件中
    -从名为 sensorsTask 的现有线程调用 ADC 读取函数
    -将中断配置命令放在 sensorsTask 线程中

    非常感谢您的回复、Jan 我认为我将 ADC 读数编码为单独的线程是导致问题的原因。

    谢谢、
    David
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您似乎对任务的优先级有问题。

    如果使用了 TI-RTOS、并且您的任务具有相同的优先级、调度程序不会自动在任务之间切换。 您需要执行块任务(睡眠、同步对象等)以执行另一个具有相同优先级的任务。

    1月
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Jan、

    这正是问题的关键。 因此、如果任务 A 和任务 B 具有相同的优先级、并且任务 A 中配置了 GPIO 中断、那么如果任务 B 处于活动状态、任务 A 中的中断将不会执行任何操作。 在这种情况下、我需要为任务 A 指定"priParam.sched_priority=1;"和为任务 B 指定"priParam.sched_priority=2;"、以便任务 A 具有更高的优先级、即使程序正在执行任务 B、调度程序也会在中断发生时切换到任务 A。 我的理解是否正确?

    谢谢、
    David
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 David:

    不完全是。 中断与任务没有"内部"联系。

    有关 TI-RTOS 概念的详细说明、请访问 processors.wiki.ti.com/.../Introduction_to_the_TI-RTOS_Kernel_Workshop

    1月
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Jan、

    感谢您的链接。 我开始了这次实验课程、看起来很有趣。 我有一个一般性问题、TI 是否会因在最终产品中使用 TI-RTOS 而收取费用?

    谢谢、
    David
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 David:

    对于商业项目、TI-RTOS 是免费的。

    TI-RTOS 网页:"TI-RTOS 附带完整的源代码、无需预付或运行时许可费用。 多任务内核、设备驱动程序、多核通信、TCP/IP 网络堆栈和 示例都使用开源 BSD 型许可。 这使开发人员能够轻松地将软件传递给合作伙伴或分包商、而无需繁琐的许可限制。 与 GPL 许可证不同、BSD 许可证不要求开发人员提供其整个应用程序源代码。"

    1月