首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用RISC-V GD32VF103CBT6开发板卸载高精度模数转换器

如何用RISC-V GD32VF103CBT6开发板卸载高精度模数转换器
EN

Stack Overflow用户
提问于 2020-07-08 15:37:19
回答 1查看 180关注 0票数 0

我希望用RISC-V GD32VF103CBT6开发委员会制作一个非常基本的音频效果设备。我设法用另一个单片机做了一些基于硬件中断的采样,但我对RISC-V板的文档感到有点困惑。用户手册第11章。我一点也不知道如何将那里的指令转换成实际的C/C++代码。可悲的是,他们的github回购几乎没有任何例子,似乎没有处理高速采样。这个github回购中也有一个数据表,但我也无法在其中找到任何具体的代码示例或显示说明。

我想做的是:

  • 执行用户手册中描述的校准,这必须在取样操作之前进行。
  • 外部引脚上收集12位音频信号电压样本,使用其过采样能力将许多12位样本以高采样率合并成单个16位样本。最终,我希望音频采样与16位在48千赫-96千赫的
  • 我需要帮助指示单片机收集这些样本使用其内置硬件功能。
  • 我想继续采样,卸载尽可能多的内置硬件功能,这样我就可以留下足够的处理开销来完成一些简单效果的信号处理。

第11.4.1节明确规定

在开始A/D转换之前,应该进行校准。校准是由软件启动的,通过设置位CLB=1,在所有校准序列中,定位位保持在1。然后,一旦校准完成,硬件就会清除它。内部模拟校准可以通过在ADC_CTL1寄存器中设置RSTCLB位来重置。

代码语言:javascript
复制
Calibration software procedure:
1) Ensure that ADCON=1.
2) Delay 14 ADCCLK to wait for ADC stability
3) Set RSTCLB (optional)
4) Set CLB=1.5.Wait until CLB=0.

问题1:如何将这些内存寄存器设置为指示的这些指令。我需要一个代码示例,而制造商没有提供任何代码示例。

delay 14 ADDCCLK 问题2:如何在C/C++中实现?似乎一个循环会非常低效。我该打电话给sleep()吗?对ADDCCLK的任何解释也有帮助。

这似乎也很重要,但我不知道它预示着什么:

时钟控制器提供的ADCCLK时钟是同步APB2时钟。RCU控制器具有用于ADC时钟的专用可编程预分频器。

我一点也不确定,但我认为这是我想要的转换模式:

连续转换模式

此模式可在常规信道组上运行。在设置ADC_CTL1寄存器中的CTN位时,将启用连续转换模式。在这种模式下,ADC对RSQ04:0中指定的通道执行转换。当ADCON设置得很高时,一旦相应的软件触发器或外部触发器激活,ADC就会对指定的通道进行采样和转换。转换数据将存储在ADC_RDATA寄存器中。

用于在常规通道上连续转换的软件过程。为了避免检查,DMA可以用来传输转换后的数据:

代码语言:javascript
复制
1.Set the CTN and DMA bit in the ADC_CTL1 register
2.Configure RSQ0 with the analog channel number
3.Configure ADC_SAMPTx register
4.Configure ETERC and ETSRC bits in the ADC_CTL1 register if in need
5.Prepare the DMA module to transfer data from the ADC_RDATA.
6.Set the SWRCST bit, or generate an external trigger for the regular group
EN

回答 1

Stack Overflow用户

发布于 2020-07-15 13:00:43

ADCCLK指模数转换器的输入时钟。可以看看你的数据表。大多数C都有C时钟结构的框图,通常有一个主系统时钟,然后不同的外围设备有一个预分频器,您可以编程,并将系统时钟除以一定的2次方。

因此,14 ADCCLK周期意味着它不是14个CPU周期,而是14个ADC输入时钟边缘.例如,如果ADC预分频器设置为64,则必须等待64*14 CPU时钟周期。

如何等待:

大多数情况下(我不知道设备上是否存在这样的东西)外围设备有一个繁忙的标志,只要当前的操作正在进行,就会设置它。因此,您可以轮询此标志(例如,while (ADC0_FLAGS & ADC_ISBUSY); )。

另一种选择可能是检查是否有一个中断指示您的操作完成。但是至少对于校准来说,最简单的事情就是开始校准,只使用一个waitdelay函数,这只会浪费一点时间。

我个人会在系统启动时开始校准,然后再做其他初始化工作。安装结束时可能会延迟几毫秒,以确保板上的所有组件都能正确启动。在此之后,ADC应该已经完成了很长时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62798494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档