主题中讨论的其他器件:HALCOGEN
我们正在尝试使用组1使用高级转换组转换24个通道。
我们以前能够在单触发模式下读取一些值。
这是一个轮询系统、不涉及中断或 DMA。
MCU 正在运行许多其他外设。 HalCoGen 用于最小值、其余的是手动编码的汇编器、因为我们需要节省代码大小和执行时间。
主要问题是、在初始化并通过设置 ADG1SEL 中的最低24位来启动转换后、转换不会启动、ADSMSTATE 寄存器显示0x0A、Lauterback Trace32将其解释为'WAIT_sw1'。 原因可能是什么?
我的初始化序列是:
ADRSTCR = 1 //开始复位
等待100us
ADRSTCR = 0 //使 ADC 退出复位状态
以专有顺序使用值0-23在0xFF3F2080 (Grp1部分)处初始化 LUT 表-调试器显示它们已正确到达
ADOPMODECR = 0x8000000001 //选择12位并启用 ADC (也尝试等待启用到更高版本)
ADCLOCKCR = 3 // VCLK 为96MHz、除以(3+1)= 24MHz ADCLK -也尝试了低得多的时钟
ADG1MODECR = 0x10012 //连续转换模式、忽略 buf.overwrite、NoAutoBufferReset
ADG1SAMP = 22 // Gp1转换时间=(22+2) ADCLK = 1us
ADBNDCR = 0x0C000C //分配(2 * 12)=结果 RAM 中事件和组1的24个缓冲区(也尝试过更高的缓冲区)
ADBNDEND = 2 //缓冲区总数= 64 (最大值)
ADG1CHNSELMODECTRL = 0x0A //为组1启用增强型通道选择模式
ADG1CURRCOUNT = 0
ADG1MAXCOUNT = 23
(可选 ADOPMODECR = 0x8000000001、如果开头未启用、请参阅上文)
然后将0x00FFFFFF 写入 ADG1SR 以开始转换(设置24位)。
观察结果:
- ADG1SR = 0x0C 意思:空、未完成、忙、未冻结
- ADG1CURRCOUNT 保持为零(根据调试器)
- ADSMSTATE = 0x0A
当通过 FIFO 读取结果时、每个值的欠载高位都会被置位。
此外、当直接读取结果 RAM 时、似乎不会发生可见的变化。
那么、什么原因会阻止 ADC 开始采样????
另外:在哪里可以找到有关 ADSMSTATE 值的更多信息-在 TRM 中被称为"保留用于 TI 调试"?
此致
Niels