工具/软件: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;imain()中的设置:
/*设置 hx711引脚和回调函数*/ hx711PinHandle= PIN_OPEN (&hx711PinState、hx711PinTable); if (!hx711PinHandle){ while (1); } if (PIN_registerIntCb (hx711PinHandle、&adcDataReadyCallbackFxn)!= 0){ while (1); }此外、通常需要~80us 才能为 HWI 提供服务吗?
我注意到的另一件奇怪的事情是、当 DOUT 输入为低电平时、通过中断运行似乎需要更长的时间。 不知道是什么导致了这种情况、即使我不读取该引脚、也会发生这种情况。