TI中文支持网
TI专业的中文技术问题咨询交流网站

CC2640R2F SPI通信

工程编译没有错误,在单步调试时,每当执行到[SPI.c]SPI_transfer()→[***.c]***()→[HwiP.tirtos.c]HwiP_disable()下的“key = Hwi_disable();”这句,程序就会卡住,不往下进行  

这个问题困扰我好久了,请大神们帮忙解惑!(初学硬件编程 请尽量直白回答我的问题 感谢感谢~)下述程序已尽量省略至概要部分:

ADS8331_Handle ADS833X_Open(void)
{ADS8331_Handle handle;uint32_t key;handle = &ads8331Cfg;/* Disable preemption while checking if the LCD is open. */key = Hwi_disable();if(handle->obj->isOpen == true){Hwi_restore(key);return NULL;}handle->obj->isOpen = true;Hwi_restore(key);handle->obj->buffers.bufSize = 8; //ARRAY_SIZE(ads833xBuf);handle->obj->buffers.pcBuffer = ads833xBuf;/** 初始化spi*/SPI_Params spiParams;SPI_Params_init(&spiParams);//spiParams.bitRate = SPI_BIT_RATE;spiParams.frameFormat = SPI_FRAME_FORMATE;spiParams.dataSize = 16;/* Try open the SPI */SPI_init();handle->obj->spiHandle = SPI_open(handle->hwAttrs->spiIndex, &spiParams);if(!handle->obj->spiHandle){return NULL;}return handle;
}

/*@brief Read ADS833X config register*/
void ADS8331X_ReadReg(ADS8331_Handle handle)
{ads833xBuf[0] = ADS833X_READ_CFR_CMD;_SPI_sendArray(handle->obj->spiHandle,ads833xBuf,1);Task_sleep(1);_SPI_receArray(handle->obj->spiHandle,&ads833xBuf[1],1);
}


/** @brief send some data with spi*/
static bool _SPI_sendArray(SPI_Handle spiHandle, uint16_t * pData, uint8_t len)
{/* Do SPI transfer */SPI_Transaction spiTransaction;spiTransaction.arg = NULL;spiTransaction.count = len;spiTransaction.txBuf = (Ptr)pData;spiTransaction.rxBuf = NULL;bool ret = SPI_transfer(spiHandle, &spiTransaction);return ret;
}

/** rece some datas */
static bool _SPI_receArray(SPI_Handle spiHandle, uint16_t * pData, uint8_t len)
{/* Do SPI transfer */SPI_Transaction spiTransaction;spiTransaction.arg = NULL;spiTransaction.count = len;spiTransaction.txBuf = NULL;spiTransaction.rxBuf = pData;bool ret =SPI_transfer(spiHandle, &spiTransaction);return ret;
}

int main(void)
{/* Initialize pins and peripherals */Board_initGeneral();ads833xHandle = ADS833X_Open();ADS8331X_ReadReg(ads833xHandle);BIOS_start();return (0);
}

Kevin Qiu1:

看不太明白你的代码,你这是自己写的?用到LCD了,具体什么现象

user6495349:

回复 Kevin Qiu1:

忘记删除了 没有用到LCD,那段执行后没有现象,程序是自己写的执行流程和例程差不多 先是SPI_Params_initspi_init 然后spi_open() 句柄传递给spi_transfer()

user6495349:

回复 Kevin Qiu1:

主要是做CC2640R2F和ADS8331之间的spi通信SPI发送C000 读8331配置的指令,这段程序在IAR的工程中测试过,能够读回FFFF,但是在CCS 我写的这个程序里 发送指令时就卡住了

YiKai Chen:

你SPI相關的操作應該要開一個新的task去執行,不要直接在main里

user6495349:

回复 YiKai Chen:

这个已经试过的 刚开始就是在task任务下调用的 也是卡在这句程序上,所以单独拿出来放在main里测试 依旧没有执行过去

YiKai Chen:

回复 user6495349:

你有調適看看是不是spiHandle為NULL嗎?

user6495349:

回复 YiKai Chen:

不为空 调试时一直追踪spiHandle 有数值 传递给前后的函数时 句柄值也是一致的

YiKai Chen:

回复 user6495349:

你卡在你程序的哪一行?

user6495349:

回复 YiKai Chen:

_SPI_sendArray() 的 bool ret =SPI_transfer(spiHandle, &spiTransaction),这一句单步调试 一直走到它对应的底层文件HwiP_disable(void)里的key = Hwi_disable();便卡住了

YiKai Chen:

回复 user6495349:

SPI_transfer卡住通常跟你的硬件比要有關聯,建議你用procotocol analyzer或是scope先查看一下SPI的信號

赞(0)
未经允许不得转载:TI中文支持网 » CC2640R2F SPI通信
分享到: 更多 (0)