Other Parts Discussed in Thread: PCM1863, PUREPATHCONSOLE
器件型号: PCM1863
尊敬的专家:
您能帮助解决以下问题吗?
对于我的项目 、必须能够在不同的输入端口之间切换。 当我尝试按照数据表中描述的编程序列更改 DSP 寄存器配置时、W_REQ 位不会复位。 该标志只能通过关闭器件电源来重置。
我尝试在初始化阶段结束时配置 DSP 寄存器。 在写入 DSP 寄存器之前、是否必须先配置一些软件或硬件依赖项?
此致、
Marvin
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.
Other Parts Discussed in Thread: PCM1863, PUREPATHCONSOLE
器件型号: PCM1863
尊敬的专家:
您能帮助解决以下问题吗?
对于我的项目 、必须能够在不同的输入端口之间切换。 当我尝试按照数据表中描述的编程序列更改 DSP 寄存器配置时、W_REQ 位不会复位。 该标志只能通过关闭器件电源来重置。
我尝试在初始化阶段结束时配置 DSP 寄存器。 在写入 DSP 寄存器之前、是否必须先配置一些软件或硬件依赖项?
此致、
Marvin
尊敬的 Mir:
下面是编程序列
AudioADC_Status pcm186x_writeDspCoefficient (uint8_t deviceAddress、AudioAdc_PCM186x_DspRegisterMap reg reg、uint32_t newValue)
if (pcm186x_checkDspReady (deviceAddress)== true)
{
//设置地址
DATA[0]=(uint8_t) reg & 0x7F;
State = pcm186x_sendDataRaw (deviceAddress、(uint8_t) MEM_ADDR、DATA、1);
//设置新数据
DATA[0]=(uint8_t)(((newValue & 0x00FF0000)>> 16);
DATA[1]=(uint8_t)(((newValue & 0x0000FF00)>> 8);
DATA[2]=(uint8_t)(newValue & 0x000000FF);
STATE |= pcm186x_sendDataRaw (deviceAddress、(uint8_t) MEM_WDATA0、DATA、3);
//执行写命令
DATA[0]= AUDIO_ADC_PCM186X_COM_STAT_W_REQ_MSK;
State |= pcm186x_sendDataRaw (deviceAddress、(uint8_t) COM_STAT、DATA、1);
}
一方
bool pcm186x_checkDspReady (uint8_t deviceAddress)
{
uint8_t comStat = 0xFF;
while (comStat!= 0)
{
pcm186x_changePage (deviceAddress、Page1); //发送 0x00 0x01
pcm186x_changePage (deviceAddress、Page1); //发送 0x00 0x01
pcm186x_changePage (deviceAddress、Page1); //发送 0x00 0x01
State = pcm186x_readDataRaw (deviceAddress、(uint8_t) COM_STAT、&comStat、1); //读取 0x01
}
返回 true;
}
我已经测试了很多变化的序列,添加虚拟字节,等等.
此致
Hendrik
尊敬的 Hendrik:
该寄存器 0x02 用于设置虚拟 DSP 系数寄存器的存储器地址。 因此、0x2D“地址“是告知虚拟 DSP 您即将写入 energysense 恢复阈值的命令。 数据表中的此表显示了您要写入寄存器 0x02 以切换 DSP 系数模式的所有可能地址、以便在寄存器 0x04-0x07 中给出的下一个系数。


我不确定您的代码尝试实现的目标、但如果您需要更多帮助以及是否可以提供更多有关您要编程的 DSP 的详细信息、请告诉我。
此致、
Mir
尊敬的 Mir:
好的、我使用 PCM1863 检查了通信序列。 当我尝试写入 DSP 寄存器 0x0 (Mix1_Ch1L) 时、请参阅下面的
W 0x00 0x01
W 0x00 0x01
W 0x00 0x01
R 0x01 0x00(PCM1863 不忙)
W 0x02 0x00 -->寄存器 0、新值= 0x100000
W 0x04 0x10
W 0x05 0x00
W 0x06 0x00
W 0x01 0x01 0x01 -->写入命令
执行此命令之后、寄存器 0x01 0x01 中的写入标志每次都为“1",“,不再、不再复位。 仅当我重置电源时、标志才会再次为“0"。“。
在为 DSP 寄存器执行写入命令之前、请使用以下值使所有通道静音
W 0x00 0x00
R 0x71 0x1F ->所有通道均静音
W 0x00 0x00
R 0x06 0x40 0x40 ->0x40 左侧和右侧通道 1 无输入
W 0x00 0x00
R 0x08 0x40 0x40 -->左侧和右侧通道 2 无输入
R 0x0A 0x00 ->使辅助通道静音
我的设置可能有问题、因为写入序列与数据表中所述的序列类似。
此致
Hendrik
尊敬的 Hendrik:
可在以下位置访问混频器系数计算器工具: https://www.ti.com/tool/download/SLAC663
我们看到您需要读取寄存器 01 两次、是否执行此操作?

时钟等待 1 个采样、因此这将比 16MHz 慢得多。 它将是 48kHz 或您的采样率是多少。
此致、
Mir
尊敬的 Mir:
不幸的是,这没有影响。 您能给我一个适用于 DSP 寄存器写入和读取的寄存器配置设置吗? 然后、我可以将我的设置与您的默认设置进行比较。 也许我做的一些寄存器设置 阻止我进行这些设置。
我附上了与 PCM1863 的来文。
此致
Hendrik
状态寄存器读取和静音命令:

写入操作:

读取状态标志:

在这种情况下、我每次访问寄存器之前选择正确的页面(写入命令 0x00 0x01)。 我也测试了它没有这个“页面更改“,它也不起作用。 最后一个读取序列会一直重复。 在写入操作和读取状态标志之间、等待大约 2ms 的时间、总线上没有通信。 最后是 1ms 的暂停时间、这两条读取命令之间的间隔。
在研究此器件的一些示例时、我找到了这个旧的 e2e 帖子、可能会有所帮助: 关于 PCM1863:I2C 读取不起作用、例如 e) I2C 未读取 PCM1863 中的寄存器值
他们在重复启动条件后增加了一个延迟、并帮助您解决了似乎是类似的问题。 您可以尝试一下吗?
此致、
Mir