AndreyVN 0 29 февраля Опубликовано 29 февраля · Жалоба В линейке TI есть изделие CC1310 (СС13xx-CC26xx) на борту которого процессор Cortex-M3 и радиомодуль, управляемый Cortex-M0. Программирую это через CodeComposerStudio, пользуюсь TI-RTOS, пересылаю пакеты данных с одного модуля на другой. Все работает, кроме возможности анализировать статус передатчика. Это нужно чтобы запускать АЦП во время радиотишины. Отправляются пакеты вот такой командой EasyLink_transmit(&txPacket); команда ставит пакет в очередь и всегда возвращает EasyLink_Status_Success. То есть, отловить факт передачи по возвращаемому коду не получается. В составе команды, которую исполняет RF модуль есть 2 байта статуса, которые отражают именно текущий статус команды. Вроде, то, что нужно! An integer telling the status of the command. This value is updated by the radio CPU during operation and may be read by the system CPU at any time. Однако, все попытки анализировать это поле cmdStatus = ((volatile RF_Op*)RFCommand)->status; Не дают никакого результата, status всегда 0x2000 и до выполнения команды и во время и после. Что я делаю не так ??? PS: RFCommand это вот такая структура: struct __RFC_STRUCT rfc_radioOp_s { uint16_t commandNo; //!< The command ID number uint16_t status; //!< \brief An integer telling the status of the command. This value is //!< updated by the radio CPU during operation and may be read by the //!< system CPU at any time. rfc_radioOp_t *pNextOp; //!< Pointer to the next operation to run after this operation is done ratmr_t startTime; //!< Absolute or relative start time (depending on the value of <code>startTrigger</code>) struct { uint8_t triggerType:4; //!< The type of trigger uint8_t bEnaCmd:1; //!< \brief 0: No alternative trigger command<br> //!< 1: CMD_TRIGGER can be used as an alternative trigger uint8_t triggerNo:2; //!< The trigger number of the CMD_TRIGGER command that triggers this action uint8_t pastTrig:1; //!< \brief 0: A trigger in the past is never triggered, or for start of commands, give an error<br> //!< 1: A trigger in the past is triggered as soon as possible } startTrigger; //!< Identification of the trigger that starts the operation struct { uint8_t rule:4; //!< Condition for running next command: Rule for how to proceed uint8_t nSkip:4; //!< Number of skips + 1 if the rule involves skipping. 0: same, 1: next, 2: skip next, ... } condition; } __RFC_STRUCT_ATTR; Эта структура сидит в ОЗУ и поле статуса должен менять Cortex-M0 то-ли через прямой доступ к памяти, то-ли через прерывание. Я собираю это поле в массив и просматриваю в JTAG-отладчике. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 29 февраля Опубликовано 29 февраля · Жалоба 6 минут назад, AndreyVN сказал: и поле статуса должен менять Cortex-M0 то-ли через прямой доступ к памяти, то-ли через прерывание. Я не знаком с этим контроллером, но может ему надо периодически ставить в очередь команду вроде Get_status? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AndreyVN 0 29 февраля Опубликовано 29 февраля · Жалоба Мысль здравая, но нет похожей команды, посмотрел на всякий случай. Похоже, что с кодом все нормально. Передача происходит настолько быстро, что пользовательская часть программы не успевает отловить изменение статуса передатчика, CPU крутится где-то в дебрях ОС. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться