This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC2640R2F SPI通信

Other Parts Discussed in Thread: ADS8331, CC2640R2F

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