本帖最后由 武器哈12 于 2020-8-16 10:37 编辑
最近两周比较忙,没有更新试用贴,今天来做一下RTC实时时钟实验,这块开发板上带了一片DA1338芯片,原理图如下图所示:
DS1338采用IIC协议通信,具体读写时序如下图所示:
通过分析 DS1338 读写时序,ds1338_i2c 模块用于读写单个 DS338 寄存器的数据,而数据的获取通过调用 I2C 总线模块 i2c_master_top;ds1338 模块的作用是用于设置或读取秒、分、时、周、日、月、年等寄寄存器的值;ds1338_test 模块完成时间的设置和读取;顶层 top 模块作用是调用 uart_send 模块把 RTC 的时间通过串口显示出来。
ds1338_i2c 模块完成 DS1338 寄存器读写控制。
ds1338 模块主要完成时间寄存器的读写控制,状态机状态较为简单。
ds1338 模块状态机
信号名称 | | | | | | | | | | | | | | | | | DS1338 写时间请求,请求发出时,时间数据write_second 、 write_minute 、 write_hour 、 write_date、write_month、write_week、write_year 要 有效 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
DS1338 模块端口 DS1338_test 模块主要 CH 状态检测,CH 位于秒寄存器的 BIT7 位,上电后首先读取时间,判 断秒寄存器的 CH 状态,如果为高,表示 DS1338 暂停,状态机进入“S_WRITE_CH”,将 CH 写 0, 并将一个初始时间写入,然后循环不断的读取时间寄存器。
DS1338_test 状态机
DS1338_test 端口 下载程序后观察结果:
|