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.

CC1310: CC1310的DMA通信问题求助

Part Number: CC1310
Other Parts Discussed in Thread: SYSCONFIG,

我在使用CC1310RGZ芯片时,使用了PIN的中断,然后在回调函数内使用SPI的DMA功能。在调试的时候进入SPI通信失败了,程序卡死了。在中断外部能却够使用该SPI通信。这是优先级的原因导致的吗?

  • 您好,

    感谢您的提问,我们这边希望您提供更多信息以帮助我们查找问题。

    能提供一下相关使用的SDK版本号吗?以及相关示例的名字。

    感谢您的支持。

  • 你好,我使用的simplelink_cc13x0_sdk_4_20_02_07开发包,使用noRTOS中PIN中断的例程,使用了Sysconfig配置的文件,SPI使用的三线模式,片选线是通过手动GPIO控制的

  • 您好,

    能将您的工程文件打包发过来测试一下吗?这将对我们确定问题很有帮助。

    另外,您说您使用了Sysconfig配置了文件?CC1310并不支持Sysconfig,您这是怎么操作的?

  • 您好,我这边用的离线端的SYSCONFIG,通过浏览本地的SDK路径进入配置的。CC1310这边的外围电路是我自己画的,并没有使用CC1310_LaunchPad;工程文件里的三个文件CC1310_LAUNCHXL.c    CC1310_LAUNCHXL.h    CC1310_LAUNCHXL_fxns.c我删除了,使用的配置文件Board.c和Board,h。

    /*
     *  ======== Board.c ========
     *  Configured TI-Drivers module definitions
     *
     *  DO NOT EDIT - This file is generated for the CC1310RGZ
     *  by the SysConfig tool.
     */
    
    #include <stddef.h>
    
    #ifndef DeviceFamily_CC13X0
    #define DeviceFamily_CC13X0
    #endif
    
    #include <ti/devices/DeviceFamily.h>
    
    #include "Board.h"
    
    
    /*
     *  =============================== DMA ===============================
     */
    
    #include <ti/drivers/dma/UDMACC26XX.h>
    #include <ti/devices/cc13x0/driverlib/udma.h>
    #include <ti/devices/cc13x0/inc/hw_memmap.h>
    
    UDMACC26XX_Object udmaCC26XXObject;
    
    const UDMACC26XX_HWAttrs udmaCC26XXHWAttrs = {
        .baseAddr        = UDMA0_BASE,
        .powerMngrId     = PowerCC26XX_PERIPH_UDMA,
        .intNum          = INT_DMA_ERR,
        .intPriority     = 0xC0
    };
    
    const UDMACC26XX_Config UDMACC26XX_config[1] = {
        {
            .object         = &udmaCC26XXObject,
            .hwAttrs        = &udmaCC26XXHWAttrs,
        },
    };
    
    
    /*
     *  =============================== GPIO ===============================
     */
    
    #include <ti/drivers/GPIO.h>
    #include <ti/drivers/gpio/GPIOCC26XX.h>
    
    /*
     *  ======== gpioPinConfigs ========
     *  Array of Pin configurations
     */
    GPIO_PinConfig gpioPinConfigs[] = {
        /* SPI_SS */
        GPIOCC26XX_DIO_21 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_HIGH,
        /* INT1 */
        GPIOCC26XX_DIO_14 | GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_NONE,
    };
    
    /*
     *  ======== GPIOCC26XX_config ========
     */
    const GPIOCC26XX_Config GPIOCC26XX_config = {
        .pinConfigs = (GPIO_PinConfig *)gpioPinConfigs,
        .callbacks = NULL,
        .numberOfPinConfigs = 2,
        .numberOfCallbacks = 0,
        .intPriority = (~0)
    };
    
    
    /*
     *  =============================== PIN ===============================
     */
    
    #include <ti/drivers/PIN.h>
    #include <ti/drivers/pin/PINCC26XX.h>
    
    const PIN_Config BoardGpioInitTable[] = {
        /* Parent Signal: ADXL372 SCLK, (DIO22) */
        Board_PIN0 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MED,
        /* Parent Signal: ADXL372 MISO, (DIO18) */
        Board_PIN1 | PIN_INPUT_EN | PIN_NOPULL | PIN_IRQ_DIS,
        /* Parent Signal: ADXL372 MOSI, (DIO19) */
        Board_PIN2 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MED,
        /* Parent Signal: SPI_SS GPIO Pin, (DIO21) */
        Board_PIN3 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL | PIN_DRVSTR_MED,
        /* Parent Signal: INT1 GPIO Pin, (DIO14) */
        Board_PIN4 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_DIS,
        /* Parent Signal: UART0 TX, (DIO3) */
        Board_PIN5 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MED,
        /* Parent Signal: UART0 RX, (DIO2) */
        Board_PIN6 | PIN_INPUT_EN | PIN_PULLDOWN | PIN_IRQ_DIS,
    
        PIN_TERMINATE
    };
    
    const PINCC26XX_HWAttrs PINCC26XX_hwAttrs = {
        .intPriority = (~0),
        .swiPriority = 0
    };
    
    /*
     *  =============================== Power ===============================
     */
    #include <ti/drivers/Power.h>
    #include <ti/drivers/power/PowerCC26XX.h>
    #include "Board.h"
    
    extern void PowerCC26XX_standbyPolicy(void);
    extern bool PowerCC26XX_calibrate(unsigned int);
    
    const PowerCC26XX_Config PowerCC26XX_config = {
        .enablePolicy             = true,
        .policyInitFxn            = NULL,
        .policyFxn                = PowerCC26XX_standbyPolicy,
        .calibrateFxn             = PowerCC26XX_calibrate,
        .vddrRechargeMargin       = 0,
        .calibrateRCOSC_LF        = true,
        .calibrateRCOSC_HF        = true,
    };
    
    
    /*
     *  =============================== SPI DMA ===============================
     */
    #include <ti/drivers/SPI.h>
    #include <ti/drivers/spi/SPICC26XXDMA.h>
    
    #define Board_SPICOUNT 1
    
    /*
     *  ======== spiCC26XXDMAObjects ========
     */
    SPICC26XXDMA_Object spiCC26XXDMAObjects[Board_SPICOUNT];
    
    /*
     *  ======== spiCC26XXDMAHWAttrs ========
     */
    const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[Board_SPICOUNT] = {
        /* ADXL372 */
        {
            .baseAddr = SSI0_BASE,
            .intNum = INT_SSI0_COMB,
            .intPriority = 0xc0,
            .swiPriority = 1,
            .powerMngrId = PowerCC26XX_PERIPH_SSI0,
            .defaultTxBufValue = ~0,
            .rxChannelBitMask = 1<<UDMA_CHAN_SSI0_RX,
            .txChannelBitMask = 1<<UDMA_CHAN_SSI0_TX,
            .minDmaTransferSize = 10,
            .mosiPin = IOID_19,
            .misoPin = IOID_18,
            .clkPin  = IOID_22,
            .csnPin  = PIN_UNASSIGNED
        },
    };
    
    /*
     *  ======== SPI_config ========
     */
    const SPI_Config SPI_config[Board_SPICOUNT] = {
        /* ADXL372 */
        {
            .fxnTablePtr = &SPICC26XXDMA_fxnTable,
            .object = &spiCC26XXDMAObjects[ADXL372],
            .hwAttrs = &spiCC26XXDMAHWAttrs[ADXL372]
        },
    };
    
    const uint_least8_t SPI_count = Board_SPICOUNT;
    
    
    /*
     *  =============================== UART ===============================
     */
    
    #include <ti/drivers/UART.h>
    #include <ti/drivers/uart/UARTCC26XX.h>
    #include <ti/drivers/Power.h>
    #include <ti/drivers/power/PowerCC26XX.h>
    #include <ti/devices/cc13x0/inc/hw_memmap.h>
    #include <ti/devices/cc13x0/inc/hw_ints.h>
    
    #define Board_UARTCOUNT 1
    
    UARTCC26XX_Object uartCC26XXObjects[Board_UARTCOUNT];
    
    static unsigned char uartCC26XXRingBuffer0[32];
    
    static const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[Board_UARTCOUNT] = {
      {
        .baseAddr           = UART0_BASE,
        .intNum             = INT_UART0_COMB,
        .intPriority        = (~0),
        .swiPriority        = 0,
        .powerMngrId        = PowerCC26XX_PERIPH_UART0,
        .ringBufPtr         = uartCC26XXRingBuffer0,
        .ringBufSize        = sizeof(uartCC26XXRingBuffer0),
        .rxPin              = IOID_2,
        .txPin              = IOID_3,
        .ctsPin             = PIN_UNASSIGNED,
        .rtsPin             = PIN_UNASSIGNED,
        .txIntFifoThr       = UARTCC26XX_FIFO_THRESHOLD_1_8,
        .rxIntFifoThr       = UARTCC26XX_FIFO_THRESHOLD_4_8,
        .errorFxn           = NULL
      },
    };
    
    const UART_Config UART_config[Board_UARTCOUNT] = {
        {   /* UART0 */
            .fxnTablePtr = &UARTCC26XX_fxnTable,
            .object      = &uartCC26XXObjects[0],
            .hwAttrs     = &uartCC26XXHWAttrs[0]
        },
    };
    
    const uint_least8_t UART_count = Board_UARTCOUNT;
    
    
    #include <ti/drivers/Board.h>
    
    /*
     *  ======== Board_initHook ========
     *  Perform any board-specific initialization needed at startup.  This
     *  function is declared weak to allow applications to override it if needed.
     */
    #if defined(__IAR_SYSTEMS_ICC__)
    __weak void Board_initHook(void)
    #elif defined(__GNUC__) && !defined(__ti__)
    void __attribute__((weak)) Board_initHook(void)
    #else
    #pragma WEAK (Board_initHook)
    void Board_initHook(void)
    #endif
    {
    }
    
    /*
     *  ======== Board_init ========
     *  Perform any initialization needed before using any board APIs
     */
    void Board_init(void)
    {
        /* ==== /ti/drivers/Power initialization ==== */
        Power_init();
    
        /* ==== /ti/drivers/PIN initialization ==== */
        if (PIN_init(BoardGpioInitTable) != PIN_SUCCESS) {
            /* Error with PIN_init */
            while (1);
        }
    
        Board_initHook();
    }
    
    /*
     *  ======== Board.h ========
     *  Configured TI-Drivers module declarations
     *
     *  DO NOT EDIT - This file is generated for the CC1310RGZ
     *  by the SysConfig tool.
     */
    #ifndef Board_h
    #define Board_h
    
    #define Board_SYSCONFIG_PREVIEW
    
    #define Board_CC1310RGZ
    
    /* Temporary define for backwards compatibility!!! */
    #define __CC1310RGZ_BOARD_H__
    
    #ifndef DeviceFamily_CC13X0
    #define DeviceFamily_CC13X0
    #endif
    
    #include <stdint.h>
    
    /* support C++ sources */
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    
    /*
     *  ======== GPIO ========
     */
    
    #define SPI_SS                      0
    #define INT1                        1
    
    /* LEDs are active high */
    #define Board_GPIO_LED_ON  (1)
    #define Board_GPIO_LED_OFF (0)
    
    #define Board_LED_ON  (Board_GPIO_LED_ON)
    #define Board_LED_OFF (Board_GPIO_LED_OFF)
    
    
    /*
     *  ======== PIN ========
     */
    
    /* Includes */
    #include <ti/drivers/PIN.h>
    
    /* Externs */
    extern const PIN_Config BoardGpioInitTable[];
    
    /* Parent Signal: ADXL372 SCLK, (DIO22) */
    #define Board_PIN0    0x00000016
    /* Parent Signal: ADXL372 MISO, (DIO18) */
    #define Board_PIN1    0x00000012
    /* Parent Signal: ADXL372 MOSI, (DIO19) */
    #define Board_PIN2    0x00000013
    /* Parent Signal: SPI_SS GPIO Pin, (DIO21) */
    #define Board_PIN3    0x00000015
    /* Parent Signal: INT1 GPIO Pin, (DIO14) */
    #define Board_PIN4    0x0000000e
    /* Parent Signal: UART0 TX, (DIO3) */
    #define Board_PIN5    0x00000003
    /* Parent Signal: UART0 RX, (DIO2) */
    #define Board_PIN6    0x00000002
    
    
    /*
     *  ======== SPI ========
     */
    
    #define ADXL372                     0
    
    
    /*
     *  ======== UART ========
     */
    
    #define UART0                       0
    
    
    /*
     *  ======== Board_init ========
     *  Perform all required TI-Drivers initialization
     *
     *  This function should be called once at a point before any use of
     *  TI-Drivers.
     */
    extern void Board_init(void);
    
    /*
     *  ======== Board_initGeneral ========
     *  (deprecated)
     *
     *  Board_initGeneral() is defined purely for backward compatibility.
     *
     *  All new code should use Board_init() to do any required TI-Drivers
     *  initialization _and_ use <Driver>_init() for only where specific drivers
     *  are explicitly referenced by the application.  <Driver>_init() functions
     *  are idempotent.
     */
    #define Board_initGeneral Board_init
    
    #ifdef __cplusplus
    }
    #endif
    
    #endif /* include guard */
    

  • 您好,

    由于CC1310的SDK本身不支持SYSCONFIG,所以您这么导入有可能会造成不可预期的错误。(相关寄存器配置问题之类的)

    您这边为什么需要使用sysconfig?CC1310的话还是建议直接修改文件如图:

  • 您好,

    我当时认为这些文件是针对CC1310_LaunchPad配置的,就像CC1310_LAUNCHXL.c中配置的SPI的MISO为IOID8,而我想使用的是别的IOID。我原本希望使用SYSCONFIG按照我的电路原理图和需求进行文件配置。如果说Sysconfig会导致意外错误的话,那我需要根据需求而更改CC1310_LAUNCHXL.c中的内容吗?

  • 您好,

    是的,您需要修改相关文件的包括 CC1310_LAUNCHXL.c    CC1310_LAUNCHXL.h Board,h 的代码(如上一条回复的图所示)。

  • 您好,

    问题已经解决了,非常感谢