所以我有一个任务就是编写一些伪代码来编程频率合成器。我将使用三个主要端口,'启用','数据'和'时钟'
设备初始关闭,当触发启用(低电平有效)时,时钟将循环(在一些最小设置时间之后)。除了延迟,我将有一个函数SendCommand(uint32_t addr,uint16_t数据)。
我遇到的问题是,在给我的规格中,数据是" READ"在时钟下降边缘。这意味着数据在参数中定义的地址读入寄存器,一次一位,并保持读取状态,直到整个16位字写入寄存器。时钟周期约为10MHz。我的问题是:
- 如何模拟时钟以10MHz(100 ns /周期)循环?
- 如何执行"数据读取"在所述时钟的下降边缘。
现在忽略程序的写入方面,它仍然只是伪代码。
答案 0 :(得分:0)
频率合成器芯片通常使用没有MISO线的SPI接口(即只写SPI)。 SPI是一种同步通信接口,因此时钟频率并不重要;一个位将被移入(在这种情况下)CLOCK信号的下降沿,但是当该边缘发生时无关紧要 - 接收器将无限期地等待 - 它甚至不需要被修复。
10MHz规格只是支持的最大频率,或者更准确地说它反映了时钟线下降沿之间的最小周期,即1 / 10x10 6 或为100ns。你很难保持这种速度在软件中始终如一地实现SPI。大多数微控制器都包含SPI硬件,可自动输出SPI信号。问题What are the disadvantages of bit banging SPI/I2C in embedded applications可能是唯一的兴趣所在。 Here是软件SPI实现的一个示例 - 您只需要写入函数而不是读取函数,并且可以将其扩展为16位,但您可以同样发送两个字节。