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.

[参考译文] ADS7953:无法设置&观察 GPIO 警报

Guru**** 2442090 points
Other Parts Discussed in Thread: ADS7953

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1273055/ads7953-unable-to-set-observe-gpio-alarm

器件型号:ADS7953

您好!

Im 在我的项目中使用 ADS7953外部 ADC。 Im 在"手动模式"下使用它。 对警报和 GPIO 寄存器进行编程后、我无法捕获任何警报。 Im 尝试观察 GPIO0高警报、该警报的保留值设置为"0"。 这意味着我必须在每次转换后获得警报。 Im 在下面添加了我的配置。 器件上电后,我的编程顺序是报警设置-> GPIO 设置->手动模式。 Im 能够在我观察到的特殊通道上读取正确的值。  我在下面的配置中缺少什么?

提前感谢您、

EFE

ADS79xx_ConfigType* const ConfigPtr =&g_ADS79xxConfig[Inst]  //手动模式
 ADS79xx_ADS79xx* Alarm_Config const ConfigPtr2 =&A_ADS79xxConfig[Inst]//报警设置
 ADS79xx_GPIO_ConfigType* const ConfigPtr3 =&b_ADS79xxConfig[Inst]//GPIO 设置

 UINT8 I = 0

 /*---------------- ALARM SETUP--------- */
 ADS79xx_Obj[Inst].SpiSequence = ConfigPtr2->SpiSequence

 //帧1
 ADS79xx_Obj[Inst].ADS79xx_TransmitBuffer = 0x0000
 ADS79xx_Obj[Inst].ADS79xx_TransmitBuffer |= ADS79xx_operation_mode (ConfigPtr2->OperationMode);

 RetVal |= Spi_Setup (ConfigPtr2->SpiTxChannel,(Spi_Data 类型*)&ADS79xx_Obj[Inst].ADS79xx_TransmitBuffer,(Spi_Data 无线类型*)&ADS79xx_Obj[Inst].ADS79xx_ReceiveBuffer,2U);
 if (RetVal == E_OK) RetVal |= Spi_Setup (45100ConfigPtr2->SpiRxChannel,(Spi_Data核类型*)&ADS79xx_Obj[Inst].ADS79xx_TransReceivBuffer,(Spi_Data 79xx_TransmitType*)&ADS79xx_Obj[Inst.ADS79xx_ReceiveBuffer,2U);

 if (RetVal == E_OK) RetVal |= Spi_Sync 52命令((Spi_Sequence) Inst)

 //帧2
 ADS79xx_Obj[Inst].ADS79xx_TransmitBuffer = 0x0000
 ADS79xx_Obj[Inst].ADS79xx_TransmitBuffer |= ADS79xx_GRP_CH (ConfigPtr2->Alarm_GRP_CH);
 ADS79xx_Obj[Inst].ADS79xx_TransmitBuffer |= ADS79xx_alarm_type (ConfigPtr2->AlarmType);
 ADS79xx_Obj[Inst].ADS79xx_TransmitBuffer |= ADS79xx_alarm_status (ConfigPtr2->AlarmStatus);
 ADS79xx_Obj[Inst].ADS79xx_TransmitBuffer |= ADS79xx_treshold (ConfigPtr2->AlarmTreshold);
 for (i=0 ; i<9 ; i++){// 等待要编程的 treshold 寄存器-->设备需要9个 CS 信号来编程 treshold。
  if (RetVal == E_OK) RetVal |= Spi_Sync 52命令((Spi_Sequence) Inst)
 }

 ADS79xx_Obj[Inst].ADS79xx_TransmitBuffer |= ADS79xx_alarm_status (exit);
 if (RetVal == E_OK) RetVal |= Spi_Sync 52命令((Spi_Sequence) Inst)
 /*------------------ */
//char* input =(char*)(&RetVal)/*== 0? "确定\n":"不能\n"*/;
char* input = RetVal == 0"确定\n":"不能\n";
log_txt((const uint8*)input);
 /*------- GPIO SETUP------------ */
 ADS79xx_Obj[Inst].SpiSequence = ConfigPtr3->SpiSequence

 ADS79xx_Obj[Inst].ADS79xx_TransmitBuffer = 0x0000
 ADS79xx_Obj[Inst].ADS79xx_TransmitBuffer |= ADS79xx_operation_mode (ConfigPtr3->OperationMode);
 ADS79xx_Obj[Inst].ADS79xx_TransmitBuffer |= ADS79xx_GPIO_power (ConfigPtr3->powermode);
 ADS79xx_Obj[Inst].ADS79xx_TransmitBuffer |= ADS79xx_GPIO_OUT (ConfigPtr3->GPIO);
 ADS79xx_Obj[Inst].ADS79xx_TransmitBuffer |= ADS79xx_alarm_GPIO (ConfigPtr3->AlarmGPIO);

 RetVal |= Spi_Setup (ConfigPtr3->SpiTxChannel,(Spi_Data 类型*)&ADS79xx_Obj[Inst].ADS79xx_TransmitBuffer,(Spi_Data 无线类型*)&ADS79xx_Obj[Inst].ADS79xx_ReceiveBuffer,2U);
 if (RetVal == E_OK) RetVal |= Spi_Setup (45100ConfigPtr3->SpiRxChannel,(Spi_Data核类型*)&ADS79xx_Obj[Inst].ADS79xx_TransReceivBuffer,(Spi_Data 79xx_TransmitType*)&ADS79xx_Obj[Inst.ADS79xx_ReceiveBuffer,2U);

   //TODO:首先发送 STH 以验证 SPI 通信
 if (RetVal == E_OK) RetVal |= Spi_Sync 52命令((Spi_Sequence) Inst)
 /*------------------ */

/*---------------- MANUAL MODE--------- */

ADS79xx_Obj[Inst].SpiSequence = ConfigPtr->SpiSequence
  
ADS79xx_Obj[Inst].ADS79xx_TransmitBuffer = 0x0000
ADS79xx_Obj[Inst].ADS79xx_TransmitBuffer |= ADS79xx_operation_mode (ConfigPtr->OperationMode);
ADS79xx_Obj[Inst].ADS79xx_TransmitBuffer |= ADS79xx_enable_program_bits (enable);
ADS79xx_Obj[Inst].ADS79xx_TransmitBuffer |= ADS79xx_input_range (ConfigPtr->InputRange);
ADS79xx_Obj[Inst].ADS79xx_TransmitBuffer |= ADS79xx_power_mode (ConfigPtr -> powermode);
ADS79xx_Obj[Inst].ADS79xx_TransmitBuffer |= ADS79xx_CH_OR_GPIO (ConfigPtr->SendChNoOrGPIO);
ADS79xx_Obj[Inst].ADS79xx_TransmitBuffer |= ADS79xx_GPIO_OUT (ConfigPtr->GPIO);

 交换机(ConfigPtr ->工作模式)
  {
     案例手册
       ADS79xx_Obj[Inst].ADS79xx_TransmitBuffer |= ADS79xx_channel (CH0);
       中断;
     案例 AUTO1
     案例 Auto2
       ADS79xx_Obj[Inst].ADS79xx_TransmitBuffer |= ADS79xx_reset_CTR (reset);
       中断;
     默认值
       ADS79xx_Obj[Inst].ADS79xx_TransmitBuffer = 0x0000
       RetVal = E_NOT_OK
       中断;
   }
  
 RetVal |= Spi_Setup (ConfigPtr->SpiTxChannel Spi_Data,(Spi_Data 类型*)&ADS79xx_Obj[Inst].ADS79xx_TransmitBuffer,(ReceiverType*)&ADS79xx_Obj[Inst].ADS79xx_Buffer,2U);
 if (RetVal == E_OK) RetVal |=ADS79ConfigPtr->SpiRxChannel Spi_Setup,(Spi_Data 中号类型*)&ADS79xx_Obj[Inst].ADS79xx_TransmitBuffer,(Spi_Data 中号类型*)&ADS79xx_Obj[Inst].ADS79xx_ReceiveBuffer,2U);

 //TODO:首先发送 STH 以验证 SPI 通信
 if (RetVal == E_OK) RetVal |= Spi_Sync 52命令((Spi_Sequence) Inst)
  
   
/*------------------ */
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、EFE:

    欢迎来到我们的 e2e 论坛!  您能否用显示每帧传输内容的屏幕快照(逻辑分析仪或范围)来补充上面的代码?

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

    您好!

    感谢您的答复。 我可能需要一些时间来捕获传输的帧、因此在此期间您可以在下面看到我的传输帧。

    /*报警设置*/

    //帧1  

    Transmit_Buffer = 0xD000; //(1101 000 000 000 ->组1、)  

       //sync_send (Transmit_Buffer);

    //帧2

    Transmit_Buffer = 0x7000;  //(0111 xx00 0000 0000 -> ch5,高警报,退出,(Treshold = 0)//仅对组1,ch5编程高警报 以观察警报。

       //sync_send (Transmit_Buffer);

    /* GPIO 设置*/

    Transmit_Buffer = 0x402F;//(0100 0000 0010 1111 -> GPIO 编程正常操作,GPIO0高警报,gpıo μ A 输出)

      //sync_send (Transmit_Buffer);

    /*手动模式*/

    Transmit_Buffer = 0x1840;//(0001 1000 0100 0000 ->手动模式,启用编程位,下一帧中的默认通道0,2xVref 范围,正常操作。 ,输出电流通道)

    //初始化结束。

    使用上面的配置初始化设备后、我会定期调用我的"get_value"例程。 由于"手动模式"的性质、我在"get_value"例程中有"2"连续的"sync_send"。

    通过此配置、我能够为 所需通道获得正确的读数、但即使将高警报阈值设置为0、也无法发出任何警报。

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

    感谢您添加的详细信息、期待您的示波器截图。

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

    您好!  

    您可以在此邮件下方找到示波器截图。

    范围--> 绿色:SCLK,蓝色:MOSI,红色:MISO  

    这张图片是 ADS7953的"初始阶段",正如我在上一条消息中所解释的, 警报设置的 Im 传输帧-> GPIO 设置->手动模式设置。

    /*报警设置*/

    /*帧1 */

      

    /*FRAME 2*/

    /*GPIO 设置*/

    /*手动模式*/

    对于定期操作、如前所述、对于特殊通道、我可以获得正确的读数。 最后、Im 通过定期运行添加示波器屏幕截图。

    手动模式下采样到 Ch5 ->更正 MISO 数据

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

    您对 SDO 有什么类型的滤波?  这些屏幕截图是来自 MCU 端还是来自线路的 ADC 端?

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

    我没有任何 SDO 筛选器、因此两侧的输出屏幕截图是相同的。

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

    好的、我曾对 SDO 的较慢上升时间感到好奇、那里似乎有某种 RC 时间常数。  您是否仅尝试发送0xD000、0x7000、0x402E、0x1840 (每个事务1x、两者之间切换/CS)而不是发送每个命令2X?