工程编译没有错误,在单步调试时,每当执行到[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);
}