您好!
我在调试AD2S1210时,使用并行接口进行读写。
全部工作在配置模式下时,代码如下,读取的速度,位置和错误寄存器值均正确。在电机不转的情况下速度和角度值均为一条直线。
ReadRegFromAD2S1210(CONFIG, POSItiONMSB, &buf_data); |
Position[0] = buf_data; |
ReadRegFromAD2S1210(CONFIG, POSITIONLSB, &buf_data); |
Position[1] = buf_data; |
ReadRegFromAD2S1210(CONFIG, VELOCITYLSB, &buf_data); |
Speed[1] = buf_data; |
ReadRegFromAD2S1210(CONFIG, VELOCITYMSB, &buf_data); |
Speed[0] = buf_data; |
ReadRegFromAD2S1210(CONFIG, FAULT, &fault); |
工作在普通模式下,只读取速度和位置时值是对的,代码如下。
ReadPFromAD2S1210(POSITION,&Pos); |
Position[1]=Pos&0x00ff; |
Position[0]=(Pos>>8)&0x00ff; |
ReadPFromAD2S1210(VELOCITY,&Vel); |
Speed[1]=Vel&0x00ff; |
Speed[0]=(Vel>>8)&0x00ff; |

当在上边代码后边加入切换到配置模式,读取错误寄存器的代码后,
即加入
ReadRegFromAD2S1210(CONFIG, FAULT, &fault);
读出的值会有大概率出错现象。即度回来的值不是一条直线 。
此外,我按照手册上的波形图,在读取完位置和速度值后立刻读取错误寄存器。(读取循环前已经向地址寄存器写入0xFF)得到的结果同前面一样,也是有错误的数据。

经调试,我发现只要在读取过程中存在普通模式与配置模式的切换,读到的值就会出现问题。
请问是我对读取操作的哪个地方理解有误呢?
硬件上,采用2812控制,WR使用总线功能的WR,RD采用IO口控制,CS采用IO口控制。下面是读写函数的定义。

多谢百忙之中的解答。