如题,通过csl库提供的程序,可以正确设置和读写PAGE0页的数据,但是读取PAGE4页上的寄存器值都为0,很奇怪,数据手册好像也没有说读取PAGE4与读取其他页面上的寄存器有什么不同,不知道有没有谁遇到同样问题,在线等!!!
Jacky Wang(QD):
你好,
page4都是存放滤波器系数的寄存器,不使用时reset值是为0的,详见datasheet描述:
谢谢!
ka ka1:
回复 Jacky Wang(QD):
谢谢您的回复,芯片默认选择的是PRB_R1模块,是不是说明默认使能了FILTER A 和 First IIR滤波器?还是需要其他操作才能使能滤波器First IIR滤波器。谢谢
Jacky Wang(QD):
回复 ka ka1:
你好,
是的,但是你要使用时还需要写入对应寄存器里面相应的系数值,才能得到你想要的滤波器参数。建议你下载ADC3101的评估软件GUI,用其生成你想要的滤波器参数再写入到对应的寄存器里面去。
软件下载地址:http://www.ti.com/tool/tlv320adc3101evm-k
谢谢!
ka ka1:
回复 Jacky Wang(QD):
谢谢您的回复,我下载了GUI软件,但是该软件是针对双二阶滤波器的系数计算工具,并不是我想要的IIR滤波器系数计算工具,目前我遇到的问题是无法读取PAGE4页面上的寄存器值,所以不确定是否正确写入了滤波器系数。但是我是用同样的读写接口函数能正确读写PAGE0页的寄存器,请问这两者读写是否存在差异,datasheet好像并没有说明,或者如何验证已经正确写入了PAGE4的寄存器,谢谢!
Jacky Wang(QD):
回复 ka ka1:
你把读取Page4寄存器的代码发上来帮你看看。
ka ka1:
回复 Jacky Wang(QD):
您好:
PAGE0,PAGE1 可以正确读写,但是PAGE4好像只能读取register0,指示当前处于第4页,读取其他寄存器一直为0,下面是读写函数,底层I2C读写驱动是通过csl库
/* * * ADC3101_rget( addr, regnum, *regval ) * * Return value of codec register regnum * */Int16 ADC3101_rget( Uint16 addr, Uint16 regnum, Uint16* regval ){ Int16 retcode = 0; Uint16 cmd[2];
cmd[0] = regnum & 0x007F; // 7-bit Device Register cmd[1] = 0;
retcode |= EZDSP5535_I2C_write( addr, cmd, 1 ); retcode |= EZDSP5535_I2C_read( addr, cmd, 1 );
*regval = cmd[0]; EZDSP5535_wait( 10 ); return retcode;}
/* * * ADC3101_rset( addr, regnum, regval ) * * Set codec register regnum to value regval * */Int16 ADC3101_rset( Uint16 addr, Uint16 regnum, Uint16 regval ){ Uint16 cmd[2]; cmd[0] = regnum & 0x007F; // 7-bit Device Register cmd[1] = regval; // 8-bit Register Data
EZDSP5535_waitusec( 300 );
return EZDSP5535_I2C_write( addr, cmd, 2 );}
==========================================================
底层I2C驱动
==========================================================
* * EZDSP5535_I2C_read( i2c_addr, data, len ) * * I2C read in Master mode: Reads from I2c device with address * "i2c_addr" and stores to the location of "data" for length "len". * * Uint16 i2c_addr <- I2C slave address * Uint16* data <- I2C data ptr * Uint16 len <- # of bytes to write */Int16 EZDSP5535_I2C_read( Uint16 i2c_addr, Uint16* data, Uint16 len ){ Uint16 startStop = ((CSL_I2C_START) | (CSL_I2C_STOP)); CSL_Status status; /* I2C Read */ status = I2C_read(data, len, i2c_addr, TRUE, startStop, CSL_I2C_MAX_TIMEOUT, FALSE); return status;}
/* * EZDSP5535_I2C_write( i2c_addr, data, len ) * * I2C write in Master mode: Writes to I2c device with address * "i2c_addr" from the location of "data" for length "len". * * Uint16 i2c_addr <- I2C slave address * Uint16* data <- I2C data ptr * Uint16 len <- # of bytes to write */Int16 EZDSP5535_I2C_write( Uint16 i2c_addr, Uint16* data, Uint16 len ){ Uint16 startStop = ((CSL_I2C_START) | (CSL_I2C_STOP)); CSL_Status status; /* I2C Write */ status = I2C_write(data, len, i2c_addr, TRUE, startStop, CSL_I2C_MAX_TIMEOUT);
return status;}
Jacky Wang(QD):
回复 ka ka1:
你好,
Page4上电后默认寄存器值如附件表所示:
你在操作Page4时都做了哪些设置?
ka ka1:
回复 Jacky Wang(QD):
您好,
我并没有做什么操作,只是先设置当前页为PAGE4,之后就读取reg8到reg13这几个寄存器的值,但都为零。
你刚才发的手册和datasheet上的默认值相同
Jacky Wang(QD):
回复 ka ka1:
你设置0x00寄存器为0x04,选择Page4后,再回读一下该寄存器,看看是否是写入的值?
ka ka1:
回复 Jacky Wang(QD):
您好,是该寄存器的值,所以确认当前状态是在第4页,之后的读写操作就无法验证,因为读取的都是0.