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.

[参考译文] RTOS/LAUNCHXL-CC2640R2:如何在 RTOS 条件下捕获来自 AFE4404的240nS 脉冲?

Guru**** 2595805 points
Other Parts Discussed in Thread: AFE4404

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/609483/rtos-launchxl-cc2640r2-how-can-i-capture-240ns-pulse-which-comes-from-afe4404-using-cc2640r2-under-rtos-condition

器件型号:LAUNCHXL-CC2640R2
主题中讨论的其他器件:AFE4404

工具/软件:TI-RTOS

你好。

现在、我在 RTOS 环境下遇到一些中断问题。

问题与 AFE4404的 ADC_RDY 信号有关。

在我问问问问问问问问问题之前

我将首先添加我的代码。

--------------------------------------------------------------------

1.我先定义 EVT :

定义 SBC_KEY_CHANGE_EVT                   0x0003

2.添加 EvtHdr :

//从配置文件传递的应用程序事件。
typedef 结构

 appEvtHdr_t HDR;//事件标头
 uint8_t *pData; //事件数据
}sbcEvt_t;

3.关于中断处理程序的声明函数 :

静态空 SimpleBLECentral_handleKeys (uint8_t shift、uint8_t keys);
void SimpleBLECentral_keyChangeHandler (uint8密钥);
静态 uint8_t SimpleBLECentral_enqueueMsg (uint8_t 事件、uint8_t 状态、uint8_t * pData);

4.并将中断设置为静态空 SimpleBLEPeripheral_init (void) :

     Board_initKeys (SimpleBLECentral_keyChangeHandler);

5.将 SBC_KEY_CHANGE_EVT 添加到静态空 SimpleBLEPeripheral_processAppMsg (sbpEvt_t *pMsg)。

6.这是我在接口中所做的。  :

/*********
 *@fn     SimpleBLECentral_handleKeys
 *
 *@brief  会处理此设备的所有重要事件。
 *
 *@param  shift -如果在 shift/alt 中、则为 true。
 *@param  keys -密钥事件的位字段。 有效条目:
 *                HAL_KEY_SW_2
 *                HAL_KEY_SW_1
 *
 *@返回 无
 *
静态空 SimpleBLECentral_handleKeys (uint8_t shift、uint8_t keys)

   (void) shift; //有意未引用参数

   IF (键和键_左)
   {
       BTN_CNT++;
       I2C_GET_Data (acc、txBuffer、rxBuffer、i2c、&i2cTransaction、dispHandle);
       I2C_GET_Data (AFE、txBuffer、rxBuffer、i2c、&i2cTransaction、dispHandle);
   }


   IF (键和键_右键)
   {
     BTN_CNT++;
     //PIN_setOutputValue (ledPinHandle、Board_RLED、0);
           I2C_GET_Data (acc、txBuffer、rxBuffer、i2c、&i2cTransaction、dispHandle);
   }

/*********
 *@fn     SimpleBLECentral_enqueueMsg
 *
 *@brief  会创建一条消息并将该消息放入 RTOS 队列中。
 *
 *@参数  事件-消息事件。
 *@参数  状态-消息状态。
 *@param  pData -消息数据指针。
 *
 *@返回 true 或 false
 *
静态 uint8_t SimpleBLECentral_enqueueMsg (uint8_t 事件、uint8_t 状态、
                                          uint8_t *pData)

 sbcEvt_t * pMsg = iCall_malloc (sizeof (sbcEvt_t));

 //创建消息的动态指针。
 if (pMsg)
 {
   pMsg->HDR.EVENT =事件;
   pMsg->HDR.state = state;
   pMsg->pData = pData;

   //将消息排队。
   返回 Util_enqueueMsg (appMsgQueue、syncdEvent、(uint8_t *) pMsg);
 }

 返回 false;

/*********
 *@fn     SimpleBLECentral_keyChangeHandler
 *
 *@  简单的关键事件处理程序函数
 *
 *@param  a0 -忽略
 *
 *@返回 无
 *
void SimpleBLECentral_keyChangeHandler (uint8密钥)

   SimpleBLECentral_enqueueMsg (SBC_KEY_CHANGE_EVT、KEY、NULL);

--------------------------------------------------------------------

但是问题是…

该中断线程可以捕获 Launchpad 上的按钮按压操作。

但是、在我连接到 AFE 的 ADC_RDY 信号以使 AFE 数据与 AFE 转换时间同步后、该线程无法从 AFE 的 ADC_RDY 引脚捕获240ns 脉冲。

是否有任何方法可以捕获此短信号?

此外、为了初始化 AFE、我需要使25~50uS 的低输出状态用于初始化 AFE (使用 RESETZ 引脚)。

但在 RTOS 环境 sm 中、我 无法实现适当 的延时时间。

此 延迟处理已与我当地 的分销商技术 支持团队有关。

我需要 帮助。

谢谢阅读我的问题

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    其他信息。

    相同的方法。

    第一个问题是

    240nS 信号可以在"Board_keyCallback"函数中捕获、该函数使用"PIN_registerIntCb (hKeyPins、Board_keyCallback);"在 void Board_initKeys (keysPresedCB_t appKeyCB)中注册。

    但是
    "SimpleBLECentral_handleKeys (0、pMsg->HDR.state);"通过"static void SimpleBLEPeripheral_processAppMsg (sbpEvt_t *pMsg)"连接的"无法正常工作。
    ------------------------
    第二个问题是

    我需要使用 I2C 从 AFE4404获取 ADC 数据。

    在"SimpleBLECentral_handleKeys (0、pMsg->HDR.state);"函数中、"I2C_transfer ()"工作正常、但"I2C_transfer ()"在"Board_keyCallback"函数中不工作。
    (实际上它可以正常工作、但只有一次、所有过程都是停止的晶圆传输、我认为这是关于中断问题、但我不知道具体原因。)

    有人能帮我解决这个问题吗?

    谢谢你
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好、Joon、
    1。
    SimpleBLECentral_handleKeys 实现使用去抖、因为它专为按钮而设计。 实现自己的版本、以处理输入转换而不进行去抖。
    2.
    请勿从 Board_keyCallback 调用 I2C_transfer、因为后者在 SWI 上下文中运行。 从应用程序任务线程发出呼叫。