Проблема RSL10 с SPI

#embedded #spi

#встроенный #spi

Вопрос:

Я работаю над проектом, в котором мне нужно подключить датчик к rsl10 с SPI. Я смог настроить правильные контакты с помощью драйвера CMSIS и подумал, что инициализация работает. Чтобы проверить соединение, я подключил CS-сигнал к осциллографу: перед инициализацией сигнал плавающий, затем при инициализации сигнал высокий (SPI неактивен). После инициализации я установил в коде соединение SPI на «активное», и сигнал, соответственно, становится низким.

Но вот тут-то и начинаются проблемы: затем я пытаюсь получать данные с spi0-gt;Receive(sensor_data, 12); помощью . Это должно считывать данные из SPI0, затем входить в определенную функцию обратного вызова и возвращать CS в высокое значение. Но похоже, что он никогда не входит в функцию обратного вызова и, следовательно, также не может вернуть CS на высокий уровень. Я разговаривал с экспертами из моего университета, но мы не смогли понять, почему это не работает должным образом. Теперь я действительно надеюсь, что кто-то, кто является экспертом по работе с rsl10, сможет помочь мне запустить интерфейс SPI.

Чтобы по-настоящему увидеть, как я это реализовал, я прикрепил фрагменты моего основного файла приложения.

Я надеюсь, что я понятно сформулировал свою проблему, с радостью отвечу на вопросы, чтобы прояснить ситуацию, и действительно надеюсь, что кто-то там может мне помочь.

Инициализация:

 /* Initialize spi0 driver structure */ spi0 = amp;Driver_SPI0; /* Initialize spi0, register callback function */ spi0-gt;Initialize(SPI0_Master_CallBack); /* Power up the SPI peripheral */ spi0-gt;PowerControl(ARM_POWER_FULL); /* Configure the SPI to Master, 8-bit mode @10000 kBits/sec */ spi0-gt;Control(ARM_SPI_MODE_MASTER | ARM_SPI_CPOL1_CPHA1 | ARM_SPI_MSB_LSB | ARM_SPI_SS_MASTER_SW | ARM_SPI_DATA_BITS(8), 10000000); /* SS line = INACTIVE = HIGH */ spi0-gt;Control(ARM_SPI_CONTROL_SS, ARM_SPI_SS_INACTIVE); // Set default TX Value for reading spi0-gt;Control(ARM_SPI_SET_DEFAULT_TX_VALUE, 0x80);  

Обратный звонок:

 /* Check event */ switch (event) {  /* Transfer complete event */  case ARM_SPI_EVENT_TRANSFER_COMPLETE:  {  PRINTF("TRANSFER COMPLETEn");  /* Deactivate SSEL line */  spi0-gt;Control(ARM_SPI_CONTROL_SS, ARM_SPI_SS_INACTIVE);  }  break;   /* Data lost event */  case ARM_SPI_EVENT_DATA_LOST:  {  PRINTF("MASTER_ARM_SPI_EVENT_DATA_LOSTn");  /* Abort current transfer */  spi0-gt;Control(ARM_SPI_ABORT_TRANSFER, 0);  }  break; }  

Receive:

 /* Create an instance of sensor data structure. */ uint8_t sensor_data[12] = {0};   spi0-gt;Control(ARM_SPI_CONTROL_SS, ARM_SPI_SS_ACTIVE); spi0-gt;Receive(sensor_data, 12);  PRINTF("DATA: %d %d %dn", sensor_data[0], sensor_data[1], sensor_data[2]);