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.

[参考译文] TMS320F280049:与 tms320f280049连接时、ADS1248的时钟极性和时钟相位

Guru**** 2540720 points
Other Parts Discussed in Thread: TMS320F280049, ADS1248

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/910553/tms320f280049-clock-polarity-and-clock-phase-for-ads1248-when-interfacing-with-tms320f280049

器件型号:TMS320F280049
主题中讨论的其他器件: ADS1248

大家好、

我使用以下代码将 ADC ADS1248与 tms320f280049微控制器连接。 在浏览 ADS1248的数据表时、我发现时钟极性和时钟相位分别应为0和1。 下图是 ADS1248数据表中提供的伪代码的片段。

但是、当我n`t 上述配置时、当我使用 RREG 命令执行寄存器回读操作时、我获得了预期的输出。 当我使用时钟极性和时钟相位值都为零时、我得到了预期的结果。 是否有任何原因出现此类问题、或者我是否意外获得了正确的回读值。 它是否会影响我将来的读数? 在使用 ADC 的同时、是否有任何方法可以使 ADC 完成单次转换、否则、在不影响已设置的配置寄存器值的情况下将其保持关闭或处于非工作模式。  

void main (void)

//初始化系统控制、GPIO 引脚

uint16_t R1 = 0x0000;
uint16_t R2 = 0x0000;

InitSysCtrl();
InitGpio();

EALLOW;

GpioCtrlRegs.GPAGMUX1.bit.GPIO9=1;
GpioCtrlRegs.GPAMUX1.bit.GPIO9 = 3;//将 GPIO 引脚9设置为 SPI 时钟引脚
GpioCtrlRegs.GPAPUD.bit.GPIO9 = 0;//上拉使能
GpioCtrlRegs.GPAQSEL1.bit.GPIO9 = 3;//限定器选择

GpioCtrlRegs.GPAGMUX1.bit.GPIO8=1;
GpioCtrlRegs.GPAMUX1.bit.GPIO8 = 3;//将 GPIO 引脚8设置为 SPI SIMO 引脚
GpioCtrlRegs.GPAPUD.bit.GPIO8 = 0;//上拉使能
GpioCtrlRegs.GPAQSEL1.bit.GPIO8 = 3;//限定器选择

GpioCtrlRegs.GPAGMUX1.bit.GPIO10=1;
GpioCtrlRegs.GPAMUX1.bit.GPIO10 = 3;//将 GPIO 引脚10设置为 SPI SOMI 引脚
GpioCtrlRegs.GPAPUD.bit.GPIO10 = 0;//上拉使能
GpioCtrlRegs.GPAQSEL1.bit.GPIO10 = 3;//限定器选择

GpioCtrlRegs.GPAGMUX1.bit.GPIO14 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 0;//将 GPIO 引脚14设置为 GPIO 输出引脚(CS/)
GpioCtrlRegs.GPADIR.bit.GPIO14 = 1;//将方向设置为输出

GpioCtrlRegs.GPAGMUX1.bit.GPIO15 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 0;//将 GPIO 引脚15设置为 GPIO 输出引脚(START)
GpioCtrlRegs.GPADIR.bit.GPIO15 = 1;//将方向设置为输出

GpioCtrlRegs.GPBGMUX1.bit.GPIO34 = 0;
GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0;//将 GPIO 引脚34设置为 GPIO 输出引脚(ADC_RST)
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1;//将方向设置为输出(ADC_RST)

GpioCtrlRegs.GPAGMUX1.bit.GPIO6 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0;//将 GPIO 引脚6设置为 GPIO 输入引脚(IRQ_3)

InputXbarRegs.INPUT4SELECT = 0x6;// GPIO6被选为中断1输入

EDIS;

GpioDataRegs.GPASET.bit.GPIO14 = 1;//将 CS/引脚清零为高电平
GpioDataRegs.GPACLEAR.bit.GPIO15 = 1;// ADC_RST 保持低电平
GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1;//起始引脚保持低电平

SpiaRegs.SPICCR.bit.SPISWRESET = 0;//清除软件复位位位
SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1;//选择主模式
SpiaRegs.SPICTL.bit.CLK_PHASE = 0;//时钟相位选择
SpiaRegs.SPICCR.bit.CLKPOLARITY = 0;//时钟极性
SpiaRegs.SPIBRR.bit.SPI_BIT_RATE = 24;//(25MHz/25 = 1MHz)
SpiaRegs.SPICCR.bit.SPICHAR = 15;//每次传输的字符数
SpiaRegs.SPISTS.bit.INT_FLAG = 0;//清除中断标志
SpiaRegs.SPISTS.bit.overoverrun_FLAG = 0;//清除过运行标志

SpiaRegs.SPIPRI.bit.FREE = 1;

SpiaRegs.SPICCR.bit.SPILBK = 0;//回路启用
SpiaRegs.SPICTL.bit.TALK = 1;//从设备通话被启用
SpiaRegs.SPICTL.bit.SPIINTENA=0;//中断使能


SpiaRegs.SPICCR.bit.SPISWRESET = 1;//软件复位被禁用

GpioDataRegs.GPACLEAR.bit.GPIO14 = 1;//将 CS/引脚清零为低电平
GpioDataRegs.GPBSET.BIO34 = 1;// ADC_RST 被禁用
GpioDataRegs.GPASET.bit.GPIO15 = 1;//通过将 START 引脚设置为高电平来启用器件

SpiaRegs.SPITXBUF = 0xFF06;//发送 RESET 命令并等待0.6ms

DELAY_US (600);

SpiaRegs.SPITXBUF = 0x1640;//发送 SDATAC 命令和 WREG 命令第一个字节
SpiaRegs.SPITXBUF = 0x030A;// WREG 命令第二个字节和 MUX0寄存器值
SpiaRegs.SPITXBUF = 0x0020;// VBIAS 寄存器值和 MUX1寄存器值
SpiaRegs.SPITXBUF = 0x404A;// SYS0寄存器和 WREG 的第一个命令字节
SpiaRegs.SPITXBUF = 0x0105;// WREG 第二个命令字节和 IDAC0寄存器值
SpiaRegs.SPITXBUF = 0x03FF;// IDAC1寄存器值和 ADC 同步命令
SpiaRegs.SPITXBUF = 0x2003;// RREG 第一个字节和 RREG 第二个字节
SpiaRegs.SPITXBUF = 0xFFFF;// RREG 第一个字节和 RREG 第二个字节
SpiaRegs.SPITXBUF = 0xFF02;// NOP 命令

DELAY_US (500);

SpiaRegs.SPITXBUF = 0x0004;// NOP 命令和 SYNC 命令启动新的转换


while (GpioDataRegs.GPADD.bit.GPIO6!= 0)//检查 DRDY 中的低值

DELAY_US (1);

SpiaRegs.SPITXBUF = 0xFF12;// NOP 和 RDATA
SpiaRegs.SPITXBUF = 0xFFFF;// NOP 命令
R1 = SpiaRegs.SPIRXBUF;//转换的前16位结果 MSB 在前
SpiaRegs.SPITXBUF = 0xFF02;// NOP 和 SLEEP 命令
R2 = SpiaRegs.SPIRXBUF;//转换结果的第二个8位和剩余的8位垃圾值

for (;;)

 

此致、

葡萄园  

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

    您好、Vineyeth、

    很抱歉错过了这个主题、因为它被命名为"TMS..." 我在我的滤波器中错过了它。 我假设由于我们一直在聊天您的另一个线程中收到的数据、此问题已解决? 问题是什么?  

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

    尊敬的 Alex:

    是的、我们已经聊天了一段时间、谢谢您。 我能够从从从从器件成功读取数据。 但这里的问题是、当 CPOL = 0且 CPHA = 0 (如 代码中所写)而不是 CPOL =0和 CPHA = 1 (如伪代码中所述)时、我只能与 ADS1248通信。 为什么会发生这种情况?

    谢谢、

    葡萄园

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

    您好、Vineyeth、

    可能是由于某种计时问题导致了这种情况。  

    本视频提供了一些我们应该确认的时序示例: https://training.ti.com/ti-precision-labs-adcs-timing?context=1139747-1140267-1128375-1146616-1146900

    您能否提供显示/CS、/SCLK、/DIN 和/DOUT 的示波器捕获?

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

    尊敬的 Alex:

    感谢您提供视频链接。 我希望、我在前面找到了这些视频。  

    我正在附上您要求的示波器照片。 我不包括 CS/、因为很难找到它。 如果您在完成我现在提供的内容后需要、我会尽快为您提供。

    我在附件中同时附上数字和正常示波器截图和测试代码。 当我使用数字探头时、为了获得 SOMI 上的数据、我必须将触发电平降低至180 - 200mV。 还可以观察到实际数据之间存在一些短峰值,我认为是因为触发电平很低? 如果是这种情况,我需要使用如此低的触发值,即使我的 SOMI 和 SIMO 线路被上拉。

    我在代码中使用了时钟极性和零相位、而不是 ADS1248所需的零和一个。

    请查找附件

    e2e.ti.com/.../attachments-.zip

    谢谢你

    葡萄园

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

    您好、Vineyeth、

    在我看来、这些示波器捕获使用的是 ADS1248所要求的 CPOL = 0和 CPHASE = 1、解释了它的工作原因。 将您的示波器截图与基础视频中的幻灯片14进行比较。 您可以看到、数据是在 SCLK 的前一个边沿(CPHA = 1)上设置的、并且在 SCLK 的下降边沿(CPOL = 0)上计时输入/输出。  

    我与我团队的另一位成员交谈、他指出一些微控制器改变了 CPHA 命名规则、此处似乎就是这样。 您对器件进行编程的方式以及发送到 ADS1248的内容是正确的。  

    额外的尖峰很可能是由 SCLK 迹线的串扰引起的。 我同意您只是在触发噪声。 由于带宽限制、有时探针很难在高/低电平上正确触发。  

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

    尊敬的 Alex:

    [引用 user="Alexander Smith">您可以看到数据是在 SCLK 的前一个边沿(CPHA = 1)设置的、并且在 SCLK 的下降边沿(CPOL = 0)计时输入/输出。  [/报价]  

    我昨天注意到了这一点、我忘记了。 在该培训视频中、了解范围非常方便。 我很高兴从 ADC 获得读数。 那么,我是否可以继续这样做,以后是否会引起任何问题?你的建议是什么?

    是否有任何有关 i2c 通信的培训视频? 如果是、请告诉我在哪里可以找到它们。

    谢谢、

    葡萄园

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

    您好、Vineyeth、

    我们刚刚完成了视频的在线制作、因此我很高兴听到它非常有帮助! 它不应在稍后引起问题、这只是命名规则的一个区别。  

    还没有、但我们正在研究2个视频、它们的格式与 SPI 视频类似。   

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

    尊敬的 Alex:

    视频真的很有帮助!因为没有太多关于 Piccolo 系列微控制器编程和其他方面的内容。 即使有东西、解释也不像视频中那么容易。 尤其是在了解 SPI 时钟方案的情况下、没有比我在视频中在线找到的任何内容更好的说明了。 我要说,这是一件很棒的事情,我们从创客本身学习的效果要好得多。  

    我希望 i2c 视频很快就能进入平台。  

    感谢您和您的团队。

    此致、

    葡萄园