TI中文支持网
TI专业的中文技术问题搜集分享网站

求助,CC2640程序通过SPI访问传感器时程序跑飞

我的一个程序,基于CC2640F128RHB(5×5)开发,使用TI的simpleBLEPeripheral工程,程序通过SPI总线访问一个传感器。

现在发现了这样的一个问题:

正常情况下访问传感器并无异常,SPI使用的是阻塞模式。

但是,在使用按键时,程序会意外跑飞,跑飞后在线调试显示程序指针位于以下位置:

同时,Debug log中出现提示:

The stack pointer for stack 'CSTACK'(currently 0x20001F48) is outside the stack range (0x20003FE0 to 0x200043E0)

通过多次尝试后发现,如果在进行大量SPI操作时发生按键操作,程序跑飞的概率大大增加,而如果降低SPI的操作量,则程序跑飞的概率也降低。

不使用按键时,对SPI进行操作没有异常,连续快速数千次的传输都没问题;而一旦有按键操作,有时候按个两三次就挂了;由此推断,似乎是在SPI传输过程中出现按键操作时会导致程序跑飞(目前尚无直接证据证明是这么回事,只是通过现象推断)。

下面是SPI的初始化代码(蓝色部分):

void SPI_Init()
{
/*if(*** == NULL)
*** = PIN_open(&***,***);*/
SPI_Params_init(&SPI_AccSpdParams);
SPI_AccSpdParams.transferMode = /*SPI_MODE_CALLBACK*/SPI_MODE_BLOCKING;//回调模式
SPI_AccSpdParams.transferCallbackFxn = SPI_Callback;//回调函数
SPI_AccSpdParams.mode = SPI_MASTER;//主机模式
SPI_AccSpdParams.bitRate = 50000;//波特率50kbps
SPI_AccSpdParams.dataSize = 8;//数据长度
SPI_AccSpdParams.frameFormat = SPI_POL0_PHA0;//配置极性和相位
SPI_init();//初始化SPI
MainSPI_Handle = SPI_open(Board_SPI0,&SPI_AccSpdParams);//开启SPI
}

已经卡在这个问题上好几天了,希望有人帮助指点,谢谢~

Viki Shi:

1、The stack pointer for stack 'CSTACK'(currently 0x20001F48) is outside the stack range (0x20003FE0 to 0x200043E0)
以上这个报错是否每次都在同一位置?其他版本的编译器上是否试过?

2、simpleBLEPeripheral工程中添加SPI,建议按照官方指导:processors.wiki.ti.com/…/Cc2640_Adding_a_UART_or_SPI_driver_to_a_Sample_Project

Alvin Chen:

回复 Viki Shi:

#include "board.h"
#include <ti/drivers/SPI.h>
#include <ti/drivers/spi/***.h>
SPI_HandleSPIHandle;
SPI_ParamsSPIparams;

void HwSPIInit(void)
{SPI_init();SPI_Params_init(&SPIparams);SPIparams.bitRate= 1000000;//1MHzSPIparams.dataSize = 8; SPIparams.frameFormat = SPI_POL0_PHA0;//相位0极性0SPIparams.mode = SPI_MASTER;//SPI主从模式SPIparams.transferCallbackFxn = NULL;SPIparams.transferMode = SPI_MODE_BLOCKING;//阻塞SPIparams.transferTimeout = SPI_WAIT_FOREVER;
}
void HwSPITrans(uint8_t csnPin, uint8_t *txbuf, uint8_t *rxbuf ,uint16_t len)
{SPI_Transaction spiTransaction;spiTransaction.arg = NULL;spiTransaction.count = len;spiTransaction.txBuf = txbuf;spiTransaction.rxBuf = rxbuf;
SPIHandle = SPI_open(CC2640R2_LAUNCHXL_SPI0, &SPIparams);int csnFlag;csnFlag = SPI_control(SPIHandle, ***, &csnPin);//选择CSN片选引脚if(csnFlag == SPI_STATUS_SUCCESS){SPI_transfer(SPIHandle, &spiTransaction);}HwUARTWrite(rxbuf, 4);SPI_transferCancel(SPIHandle);SPI_close(SPIHandle);
}

user5207162:

请问问题解决了么?我遇到一个相似的问题,我的SPI在传输结束时(即将退出SPI_transfer函数时,此时发送已经结束)程序运行到了这个位置,请问您当时是怎么解决这个问题的?

赞(0)
未经允许不得转载:TI中文支持网 » 求助,CC2640程序通过SPI访问传感器时程序跑飞
分享到: 更多 (0)