花了正好一个星期的时间,终于基本上调通了,当然,不仅是指可以正确通过SPI和片子交互,而且采集氧量信号的精度也是非常高,至少在mv级别了。
过程中遇到了一系列问题,搞的人也是很崩溃。
先是SPI通讯的问题,ADI官方给的开发板的代码,用的并不是keil,spi的读写函数我根本没法用,因此只好自己来写。
我的spi代码从5420移植而来,但7124和5420有很大的不同,而且复杂了很多。
5420的读写是两函数,而7124的读写需要整合为一个.
在读写count个字节时,5420的for是从count开始,而7124是从0开始,因为刚开始时没有搞对,所以导致读出的数据都是反的,
比如读id,正确的是0x04,但我读出的却是0x20
还有,在5420中是CLR_SCL之后才给SDIN上放数据,但对于7124却需要在CLR_SCL之前放数据。
因为手册中描述:SCL下降沿驱动数据,上升沿锁存数据。
接着,遇到的问题是,读出的数据最后一位数据总是为0,比如 AD7124_Channel_0 手册上说读出来应该是0x8001,但我读出来却是0x8000,
又仔细研究了手册,手册上说,似乎在转换完成后DOUT/RDY脚会切换为RDY功能且为0表示数据有效可以被读取,而在读取之后才被重新置为1。
所以,怀疑是我读最后一位的时机不对(太晚了,以致于DOUT/RDY脚处于RDY功能且为0)
程序调整后(把从SDOUT读取数据的操作放在了SET_SCL之前),读取正确。
然后测试20mv标准信号,但始终得到的结果是18mv,尝试了各种校准,但都么有卵用。在崩溃,好心网友提示说可以测下内部2.5V,测量后竟然非常准确。
惊喜之余,又直接测了氧量信号(用信号源模拟),结果也非常精确。
我晕!难道是我对20mv标准信号的理解不对!!!