Part Number:CC1310Other Parts Discussed in Thread:SYSCONFIG,
我在使用CC1310RGZ芯片时,使用了PIN的中断,然后在回调函数内使用SPI的DMA功能。在调试的时候进入SPI通信失败了,程序卡死了。在中断外部能却够使用该SPI通信。这是优先级的原因导致的吗?
Nick Sun:
您好,
感谢您的提问,我们这边希望您提供更多信息以帮助我们查找问题。
能提供一下相关使用的SDK版本号吗?以及相关示例的名字。
感谢您的支持。
,
Fu LiangDong:
你好,我使用的simplelink_cc13x0_sdk_4_20_02_07开发包,使用noRTOS中PIN中断的例程,使用了Sysconfig配置的文件,SPI使用的三线模式,片选线是通过手动GPIO控制的
,
Nick Sun:
您好,
能将您的工程文件打包发过来测试一下吗?这将对我们确定问题很有帮助。
另外,您说您使用了Sysconfig配置了文件?CC1310并不支持Sysconfig,您这是怎么操作的?
,
Fu LiangDong:
您好,我这边用的离线端的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 1UARTCC26XX_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_SS0 #define INT11/* 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_PIN00x00000016 /* Parent Signal: ADXL372 MISO, (DIO18) */ #define Board_PIN10x00000012 /* Parent Signal: ADXL372 MOSI, (DIO19) */ #define Board_PIN20x00000013 /* Parent Signal: SPI_SS GPIO Pin, (DIO21) */ #define Board_PIN30x00000015 /* Parent Signal: INT1 GPIO Pin, (DIO14) */ #define Board_PIN40x0000000e /* Parent Signal: UART0 TX, (DIO3) */ #define Board_PIN50x00000003 /* Parent Signal: UART0 RX, (DIO2) */ #define Board_PIN60x00000002/**======== SPI ========*/#define ADXL3720/**======== UART ========*/#define UART00/**======== 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 */
,
Nick Sun:
您好,
由于CC1310的SDK本身不支持SYSCONFIG,所以您这么导入有可能会造成不可预期的错误。(相关寄存器配置问题之类的)
您这边为什么需要使用sysconfig?CC1310的话还是建议直接修改文件如图:。
,
Fu LiangDong:
您好,
我当时认为这些文件是针对CC1310_LaunchPad配置的,就像CC1310_LAUNCHXL.c中配置的SPI的MISO为IOID8,而我想使用的是别的IOID。我原本希望使用SYSCONFIG按照我的电路原理图和需求进行文件配置。如果说Sysconfig会导致意外错误的话,那我需要根据需求而更改CC1310_LAUNCHXL.c中的内容吗?
,
Nick Sun:
您好,
是的,您需要修改相关文件的包括 CC1310_LAUNCHXL.c CC1310_LAUNCHXL.h Board,h 的代码(如上一条回复的图所示)。
,
Fu LiangDong:
您好,
问题已经解决了,非常感谢