⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
3个帖子/ 0新
最后一篇
烟鸽
离线
最后一次露面:2年2个月前
加入:2017-07-19 09:37
关于GP_ADC 3.3MSPS采样率

根据数据表:
“转换本身快速,需要大约一个16 MHz的时钟周期,尽管数据处理需要几个额外的时钟周期,具体取决于软件代码样式。最快的代码可以在16 MHz的四个时钟周期中处理数据,导致的四个时钟周期。以16 MHz / 5 = 3.3 msample / s的最高采样率。“


注册INT I,J,K;
k = gp_adc_result_reg;
j = 0x4c03;
i = gp_adc_ctrl_reg;

*(volatile uint16 *)(i)= j;
__nop();
__nop();
__nop();
__nop();
K = *(易失性UINT16 *)(k);

我正在使用上面的代码来获取最简单的ASM代码,也许是最快的代码。
但是在写入gp_adc_ctrl_reg以获得正确的adc_result后,我必须等待4个nop。
有谁可以告诉我CPU空闲4个HCLK周期时发生了什么?
而且,什么样的代码风格可以超过内部ADC的最重要表现?

设备:
PM_DIALOG.
离线
最后一次露面:1天21小时前
职员
加入:2018-02-08 11:03
嗨班莫呼,

嗨班莫呼,

ADC包括持有和采样阶段。这意味着ADC应该等待源的一定时间,以便进行正确的电压估计。转换阶段将需要1个时钟周期,但他的采样取决于您尝试采样的内容。您应该等待更多1个时钟周期进行采样。添加4 NOP时,您是否得到了正确的结果?在空闲的stste中,CPU没有什么,才等待。

谢谢,PM_DIALOG.

烟鸽
离线
最后一次露面:2年2个月前
加入:2017-07-19 09:37
嗨PM,

嗨PM,
谢谢你的详细答案。
我研究了Amba巴士系统几天,并猜测。
根据数据表,Cortex M核心作为主机连接到AHB总线,ADC作为外设连接到APB总线,可以通过APB桥接通信。因此,当我们使用LDRH或STRH指令读取或写入ADC控制/结果寄存器时,核心必须执行AHB总线协议定时,间接使APB桥接桥接作用。整个序列是这样的(步骤通过HCLK同步):
对于strh:
1.核心集Haddr和Hwrite。APB桥处于空闲状态。
2.核心集HWDATA。APB Bridge转到写等待状态。
3.核心等待。APB Bridge Goto写状态。
4.核心等待。APB Bridge Goto写启用状态
对于LDRH:
1.核心设置HADDR并重置HWRITE。APB桥处于空闲状态。
核心等待。APB Bridge转到读取州。
3.核心等待。APB Bridge Goto读取启用状态。

我将所有相应的项目放在一个表中:


HCLK = 16MHz;一个周期= 62.5ns。
指导:Strh Nop Nop Nop Nop Ldrh ...... ......
AHB总线状态:ADDR数据等待等待等待ADDR数据等待
APB桥式状态:空闲W_WAIT编写W_ENABLE IDLE空闲读取r_enable idle
GP_ADC_CTRL_REG:4C01 4C01 4C01 4C01 4C03 4C03 4C11 4C11 4C11
ADC状态:跟踪跟踪跟踪跟踪转换(65ns)跟踪跟踪跟踪

我想这就是我们需要4 NOP获得正确结果的原因。
我不知道代码标签不起作用,表看起来不可读,所以我附加了它。

附件: