1、首先reset引脚的问题,我看引脚描述中,
所以你说的RESET设置为0x1F,应该是将reset所在寄存器的bit位设置为默认0了。
2、我想问下,您有试过么?SPI单独的读和写是OK的么? 先得保证spi是通的哦。
3、我看它电路图上,一堆的ADxxx的片子,说实话没有仔细去考究。黑白的。。。。图。。。。。
不过我看它REFIO 这个引脚官方的设计上有加1K的电阻,估计是限流的吧,还是有别的用处
中文手册page26
估计你也是用内部的基准电压源模式吧。不过这个玩意儿,内部的这种情况,好像要对寄存器操作。
4、
还有你说的时钟的问题,就你回复的帖子中,我看这个地方只是针对我红色的圈中的型号吧,你的AD9102是不适用的吧。
还有,你用PWM提供clk我不知道行不行。。。。还是用有源晶振,这个要参考下ADI的官方的设计。
5、我建议,这种带寄存器的片子,你单独新建一个H文件和C文件,H文件中,寄存器的设置用位移操作,在H文件中就像如下:
- #define DRV_CTRL_MODE_FULL_STP (u16)(0 << 3)
- #define DRV_CTRL_MODE_2_STP (u16)(1 << 3)
- #define DRV_CTRL_MODE_4_STP (u16)(2 << 3) //默认状态
- #define DRV_CTRL_MODE_8_STP (u16)(3 << 3)
在C文件中,可以如下:
- void DRV_Set_Index_Level(u16 step)
- {
- u16 temp = 0;
- temp = SPI1_ReadWriteByte(DRV_READ | DRV_CTRL_ADDR | DUMMY);
- temp &= 0x0f87; //清除高4位
- temp |= step;
- SPI1_ReadWriteByte(DRV_WRITE | DRV_CTRL_ADDR | temp);
- }
这样,在操作和配置寄存器的时候,直接调用函数就行了。这个招数,以前我没有学到,也是去年才学到的。说实话,以前我只是傻乎乎的往寄存器中写0x某某某的十六进制的方式去弄的。后来学到这样的招数后,挺管用的。
你看下我说的这种方法,对你操作和配置寄存器来说,好不好用。毕竟你如果用spi写的话,spi写的函数中的输入参数一堆的十六进制也不够直观,而且容易出错的。
以上,供参考。