我使用pcm1862 作为Slave,通过配置 ADCX1_INPUT_SEL_X,使用VIN2作为input,可以正常播放并且有声音出来。
但是停止播放之后,始终获取不到 Signal Loss的INT(通过查询INT_STAT寄存器),请问下还需要在哪里进行相应的配置吗?
user151383853:
这个 INT 是个高有效的信号,
9.3.11.1 Energysense Signal Loss Flag
The main ADC constantly monitors the input signal level while in ACTIVE mode. Should the input level remain below a register defined threshold (for example –60 dB – Virtual Coefficient 0x2C, programmable through Page 1.) for a register defined amount of time (for example 1 minute – set by SIGDET_LOSS_TIME (Page.0, 0x33) ), an interrupt can be generated.
If the system MCU decides to move to sleep mode, the PCM186x can be moved to SLEEP by stopping BCK/LRCK or using PWRDN_CTRL (Page.0, 0x70); see Table 17 for details.
If BCK and LRCK are stopped by the host after the interrupt, the device goes to the sleep state as shown in Figure 37. Otherwise, the interrupt continues for a few seconds, defined by SIGDET_INT_INTVL (Page.0, 0x36) unless the interrupt and timeout counter is reset.
user6102089:
回复 user151383853:
你好,这段我有看到,我的理解是在Active Mode下,当input level低于阈值的时候1min(Default)之后会产生INT。但是我目前获取不到,所以我怀疑是否需要配置另一个Channel去监控EnergySense?
xiong ding:
回复 user151383853:
您好,我也遇到了和他一样的问题。我怀疑是由于loss threshold 和 resume threshold 设置不正确导致的。
1.目前按照如下代码设置后,读取device state(0x72) 一直是0x00.
2.如果我不设置loss threshold 和 resume threshold 读取device state(0x72) 一直是0x0f.
3..无论我是否设置loss threshold 和 resume threshold 读取eINT_STAT(0x61) eSIGDET_STAT(0x32)一直是0x00.我有如下疑问:
1. 如果loss threshold 和 resume threshold不设置的话,是不是中断就一定不会出来?
2. loss threshold 和 resume threshold有没有默认值,或者什么参考值?
3. 官方能不能给出一个可以出中断的参考配置文件?//Write 0x00 0x01 ; # change to register bank 1nCmd = 0x01;nRet = ee_WriteBytes(&nCmd,0x00,1);
//Read Register 0x01 # if value is 0x00 then continue (check if system is still writing/reading).//Otherwise, do another dummy write and check againnRet = ee_ReadBytes(&nResult,0x01,1);if(nRet){while(nResult){nRet = ee_ReadBytes(&nResult,0x01,1);}}//Write 0x02 0x2D ; # write the memory address of resume thresholdnCmd = 0x2D;nRet = ee_WriteBytes(&nCmd,0x02,1);
//Write 0x04 0x01 ; # bit[23:15]nCmd = 0x01;nRet = ee_WriteBytes(&nCmd,0x04,1);
//Write 0x05 0x47 ; # bit[15:8]nCmd = 0x47;nRet = ee_WriteBytes(&nCmd,0x05,1);
//Write 0x06 0xAE ; # bit[7:0]nCmd = 0xAE;nRet = ee_WriteBytes(&nCmd,0x06,1);
//Write 0x01 0x01 ; # execute write operationnCmd = 0x01;nRet = ee_WriteBytes(&nCmd,0x01,1);