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/CC1350:与器件连接时重复中断

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/628734/rtos-cc1350-repeated-interrupt-when-interfacing-with-a-part

器件型号:CC1350

工具/软件:TI-RTOS

我一直在尝试中断 HX711 称重传感器放大器、并设法从它获取数据、但只有一个真正的问题...

对于该器件、数据线(DOUT)通过从高电平变为低电平来指示数据何时存在、因此我在该线上设置了一个负边沿中断、该中断触发良好并提示 PDClk 线路开始计时数据。 数据来自时钟的每个脉冲的同一个 DOUT 线路。 但是、在示波器上、我看到 PDClk 线路将在初始数据被读取后执行另一个时钟脉冲序列、这意味着中断已经被再次触发。

当输出全部为高电平(0xFFFFFFF)时、我不会看到相同的行为、大概是因为没有其他下降沿可重新触发中断。

在我的 adcReadData()函数调用结束时,我尝试清除引脚句柄上的挂起中断,但至今没有成功。

下面是一些示波器跟踪、用于说明行为:

重复中断

无重复中断:

部分固件:

PIN_Config hx711PinTable[]={
BOARD_PIN_PDCLK | PIN_GPIO_OUTP_EN | PIN_GPIO_HIGH | PIN_PushPull | PIN_DRVSTR_MAX、
Board_PIN_DOUT | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_NEGEDGE、
PIN_TERMINATE
};

void adcDataReadyCallbackFxn (PIN_Handle handle、PIN_ID pinId){

//if (PIN_getInputValue (Board_PIN_DOUT))
if (pinId == Board_PIN_DOUT)
readAdcData (0);
其他
while (1);

} 

void readAdcData (uint8_t nextRes){

//设置索引
uint8_t i=0;
int32_t adcData=0;

//读取24b 数据
for (i=0;i<24;i++){

PDCLK_HI ();

PDCLK_LO();

uint8_t x = PIN_getInputValue (Board_PIN_DOUT);
//将 MSB 对齐存储在 signed int 中以保留该符号。
adcData |=(x<<31-I);

}

//执行位移(有符号)以显示有符号24位值
//adcData = adcData >> 8;

//最后切换以设置下一个数据包的分辨率
对于(i=0;i 


main()中的设置:

/*设置 hx711引脚和回调函数*/
hx711PinHandle= PIN_OPEN (&hx711PinState、hx711PinTable);
if (!hx711PinHandle){
while (1);
}

if (PIN_registerIntCb (hx711PinHandle、&adcDataReadyCallbackFxn)!= 0){
while (1);
} 

此外、通常需要~80us 才能为 HWI 提供服务吗?

我注意到的另一件奇怪的事情是、当 DOUT 输入为低电平时、通过中断运行似乎需要更长的时间。 不知道是什么导致了这种情况、即使我不读取该引脚、也会发生这种情况。

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

    有人想知道吗? 我仍然无法自己破解。 TI 员工/来自 RTOS 团队的人员能否帮助我解决问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    仍然没有任何人答复。 是否真的没有人知道这里发生了什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    遗憾的是、当我们不知道或没有您尝试通信的器件时、很难支持这样的情况。

    从数据表中:
    输出电压
    低电平表示数据已准备好检索。 作者
    在上施加25~27 μ s 正时钟脉冲
    PD_SCK 引脚、数据从 DOUT 移出
    输出引脚。 每个 PD_SCK 脉冲移出一个位、
    从 MSB 位开始、直到所有24位都是
    移出。 PD_SCK 输入端的第25个脉冲将会出现
    将 DOUT 引脚拉回高电平(图2)。

    从您的图中看、在开始计时之前、数据输出看起来会变高?
    -您是否应用了正确数量的时钟脉冲?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、感谢您查看此内容。

    很难从显示的缩放级别和分辨率下的迹线中辨别出来、但 DOUT 在 PD_SCK 的上升沿发生变化、正如我在数据表中所预期的那样:

    我也进行了多次计数、我肯定会应用正确的脉冲数。  

    无论采用哪种方法、它仍然不会解释重复中断、因为计时完成后没有记录下降沿。 我认为这可能与引脚配置有关,也可能与我在回调中调用的 readAdcData()函数中时正在注册的另一个中断有关,但清除中断似乎也没有效果。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在发送27个时钟脉冲以避免重新触发中断之前、您是否需要在第一次触发后清除和禁用中断?