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.

[参考译文] MSP430FR6047:SDHS 中 DTC 的时钟是多少?

Guru**** 2551110 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/753078/msp430fr6047-what-is-the-clock-of-dtc-in-sdhs

器件型号:MSP430FR6047

用户手册中有以下段落

22.2.4数据传输控制器(DTC)和内部数据缓冲器
SDHS 支持高达8MSPS 的输出数据速率、这比系统 DMA 支持的更快、因此
SDHS 有一个专用数据传输控制器(DTC)和一个内部数据缓冲器、可支持多达8个
到目标存储器的 MHz 数据传输速度。
图22-14显示了输出数据路径的方框图。 数字滤波器的转换结果将变为
首先是内部数据缓冲器。 缓冲器具有64字的深度。 一旦中有新数据可用
缓冲器、数据由系统时钟锁存(称为与系统时钟同步)并被写入
SDHSDT 寄存器。 然后、DTC 从 SDHSDT 寄存器中读取数据并传输到目的地址
内存位置。

DTC 可能需要多个采样周期才能将数据传输到系统存储器。 因此、
选择缓冲深度可在系统时钟等于或时实现8MHz 数据传输速度
SDHS 输出数据速率。 选择 SDHSCTL1.OSR 位或系统时要小心
时钟频率。 系统时钟频率必须等于或大于 SDHS 输出数据速率、
或者可能发生数据溢出。
系统时钟频率≥SDHS 输出数据速率
SDHS 输出数据速率= PLL 输出频率/SDHSCTL1.OSR

问题:

如何了解系统时钟频率?

系统时钟频率表示 MCLK 或 SMCLK 或其他器件。

如果我使用 DTC 或 CPU 从 SDHSDT 寄存器读取数据、MCLK 和 SMCLK 之间的频率设置是否有任何差异?

内部数据缓冲器是否是 FIFO 缓冲器?

如果我不读取 SDHSDT 寄存器、新生成的数据是否会位于缓冲区中(当缓冲区中的数据少于64 16位时)、而不是 SDHSDT 寄存器中?

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

    系统时钟频率为 MCLK。 如果使用 DTC 或 CPU、则应使用 MCLK。

    内部数据缓冲器作为 FIFO 运行。

    有2种方法可以从缓冲区获取数据、DTC (首选)和从 SDHSDT 读取的 CPU。 图22-15有一个很好的方框图显示了这一点。 一旦在缓冲区中获得新数据、就会写入 SDHSDT 寄存器。 如果采样周期超过64个、则内部缓冲区已满、并将设置溢出中断。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    用户手册中有以下段落

    SDHSRIS.OVF

    SDHS 数据溢出原始中断状态位。 只读。 该位是
    不会由硬件自动取消置位。
    复位类型:PUC
    0h (R)=无 OVF 事件
    1h (R)=当 DTC 被启用(SDHSCTL2.DTCOFF = 0)时、DTC 有
    至少丢弃了一个样本。 这表示系统时钟
    需要增加。
    当 DTC 被禁用(SDHSCTL2.DTCOFF = 1)时、至少有一个新的
    在之前、样本已被写覆盖到 SDHSDT 寄存器
    读取上一个值。

    默认情况下、DTC 被启用、但当 SDHSCTL2.DTCOFF = 1时、DTC 可被禁用。 故障诊断码(DTC)
    禁用时、SDHSDT 寄存器中的数据必须由 CPU 准备就绪。 如果 SDHSDT 寄存器没有
    CPU 在64个采样周期内读取、内部缓冲器已满、不再需要任何新的缓冲器
    数据。 在这种情况下、新生成的数据丢失并导致溢出中断(SDHSRIS.OVF)。

    问题:

    1、导致 SDHSRIS.OVF 设置1的原因、
    在读取之前的值之前、至少有一个新的采样被写覆盖到 SDHSDT 寄存器

    SDHSDT 寄存器在64个采样周期内未被 CPU 读取、内部缓冲区已满、不再接收新数据?

    2.如果我按如下方式设置参数(SDHSCTL2.DTCOFF = 1;SDHSCTL2.SMPCTLOFF = 0;SDHSCTL2.SMPSZ = 5)并且 CPU 未读取 SDHSDT、当 SDHS 完成采样时、我在内部缓冲区中获得六个数据并且不溢出(SDHSRIS = 0)?

    如果我按如下方式设置参数(SDHSCTL2.DTCOFF = 1;SDHSCTL2.SMPCTLOFF = 0;和 SDHSCTL2.SMPSZ = 5)、采样和 CPU 读取 SDHSDT 的过程如下:
    样本1。 样本数据为10
    样本2。 采样数据为20
    样本3。 样本数据为30
    CPU 读取 SDHSDT 1次、存储在 temp[0]中
    样本4。 采样数据为40
    样本5。 采样数据为50
    样本6。 样本数据为60
    CPU 读取 SDHSDT 1次、存储在 temp[1]中
    CPU 读取 SDHSDT 1次、存储在 temp[2]中
    CPU 读取 SDHSDT 1次、存储在 temp[3]中
    CPU 读取 SDHSDT 1次、存储在 temp[4]中
    CPU 读取 SDHSDT 1次、存储在 temp[5]中。

    采样6次、小于64个采样。
    我在哪里可以看到 SDHSRIS.OVF = 1、以及什么是 temp[]内容。
    TEMP[0]= 30、TEMP[1]= 60、TEMP[2]= 10、TEMP[3]= 20、TEMP[4]= 40、 TEMP[5]= 50?