DS1302是比较经典的时钟芯片,刚好开发板上有这一个芯片。然后去准备用verilog去控制控制。
以下是DS1302的封装和管脚说明。
其中,主要就是控制CE,I/O,SCLK这三个信号。。其他都是电路固定接好的。不需要控制。这里要注意一下I/O这个管脚是双向口。所以在FPGA中要用inout端口表示。
然后就是时序。
以上就是读和写的时序。
无论是写还是读,都是在CE为高的时候操作,当CE为低的时候,读和写都不可操作。所以在读和写之前,首先要将CE拉高,并保持到操作结束。
另外要注意,在CE拉高之前,SCLK都是要保持低电平的。
写操作:
拉高CE,保持一段时间,然后SCLK开始产生固定周期的15个脉冲信号。在SCLK的上升沿,将I/O数据写入到DS1302中。前面8位是控制字,后面8位是数据。写是以LSB先行,即先发地位,再发高位。写完数据后,保持一段时间,在将CE拉低。结束一次写数据。这里要注意,要继续写的话,是要等CE拉低一段时间之后,才能继续写的。这个是时序规定的。
读操作:
拉高CE,保持一段时间,然后SCLK开始产生固定周期的16个脉冲信号。前8个脉冲式写数据,在SCLK的上升沿将数据写入到DS1302中。后8个脉冲式读数据,在SCLK的下降沿,I/O上产生读取的数据。所以在这个时候,要将数据进行读取。这里要注意,读的第一个数据,是在第8个时钟脉冲的下降沿的时候产生的.
总体来说,时序是比较简单的。只要注意到datasheet中规定的时序。
比如规定,SCLK的高电平和低电平的时间最小是250ns(5V供电下),那么设计的时候,就要保证SCLK的高电平和低电平的持续时间至少是250ns。不过一般要留一些余量。比如可以设置时间为1us。毕竟对于实时时钟,不需要这么快的操作速度。
然后是控制字的说明:
前面的8位就是控制寄存器,后面是表示这个寄存器的每一位表示的意思。主要用到的前8个。
这里有特殊的位:
秒寄存器的BIT7 定义为时间暂停位,当BIT7 为1 时,时钟振荡器停止工作,DS1302 进入低功耗模式,电源消耗小于100 微安,当BIT7 为0 时,时钟振荡器启动,DS1302 正常工作。所以如果要使DS1302正常工作,需要将最高位写0。
小时寄存器的BIT7 定义为12 或24 小时工作模式选择位,当BIT7 为高时,为12 小时工作模式,此时BIT5 为AM/PM 位,低电平标示AM,高电平标示PM,在24 小时模式下,BIT5 为第二个10 小时位标示(20~23 时)。
写保护寄存器的BIT7:WP 是写保护位,工作时,出WP 外的其他位都置为0,对时钟日历寄存器或RAM 进行写操作之前,WP 必须为0,当WP 为高电平的时候,不能对任何时钟/日历寄存器或RAM 进行写操作。
然后就开始设计程序了。
首先是信号列表:
注释也比较清楚,至于最后一个信号,是用来chipscope调试用的。因为chipscope不能直接看inout信号,需要将inout信号分解成输入和输出。