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