周立功教授新書(shū)《面向AMetal框架與接口的編程(上)》,對(duì)AMetal框架進(jìn)行了詳細(xì)介紹,通過(guò)閱讀這本書(shū),你可以學(xué)到高度復(fù)用的軟件設(shè)計(jì)原則和面向接口編程的開(kāi)發(fā)思想,聚焦自己的“核心域”,改變自己的編程思維,實(shí)現(xiàn)企業(yè)和個(gè)人的共同進(jìn)步。經(jīng)周立功教授授權(quán),即日起,致遠(yuǎn)電子公眾號(hào)將對(duì)該書(shū)內(nèi)容進(jìn)行連載,愿共勉之。
第六章為重用外設(shè)驅(qū)動(dòng)代碼,本文內(nèi)容包含6.3 RTC 實(shí)時(shí)時(shí)鐘中的后兩個(gè)小節(jié):
6.3.6 RX8025T
6.3.7 DS1302
6.3 RTC 實(shí)時(shí)時(shí)鐘
>>> 6.3.6 RX8025T
在MicroPort 系列擴(kuò)展模塊中,除主芯片為PCF85063 的RTC 模塊外,還有RX8025T模塊和DS1302 模塊,它們都是RTC 擴(kuò)展模塊,其主要區(qū)別詳見(jiàn)表6.14。
表6.14 RTC 芯片對(duì)比
表中,“√”表示對(duì)應(yīng)器件支持該功能,“×”表示對(duì)應(yīng)器件不支持該功能。
1. 器件簡(jiǎn)介
RX8025T 是一款內(nèi)置高穩(wěn)定度的32.768KHz 的 DTCXO(數(shù)字溫度補(bǔ)償晶體振蕩器)的I2C總線接口方式的實(shí)時(shí)時(shí)鐘芯片,它提供了時(shí)間日期的設(shè)置與獲取、鬧鐘中斷、時(shí)間更新中斷、固定周期中斷、溫度補(bǔ)償?shù)裙δ?。所有地址和?shù)據(jù)通過(guò)I2C總線來(lái)傳輸,最大總線速率可達(dá)到400kbps。
RX8025T 引腳封裝詳見(jiàn)圖6.6,其中的SCL 和SDA 為I2C接口引腳,VDD 和VSS 分別為電源和地;CLKOUT 為時(shí)鐘輸出引腳,可用于輸出時(shí)鐘信號(hào);T1(CE)、TEST、T2(Vpp)引腳僅供廠家測(cè)試使用,NC 為無(wú)需連接的引腳,實(shí)際使用時(shí),這些引腳直接懸空即可;INT 為中斷引腳,主要用于鬧鐘等功能;CLK_EN 為時(shí)鐘輸出使能引腳, 用于控制CLKOUT 時(shí)鐘的輸出。
圖6.6 RX8025T 引腳定義
RX8025T 的7 位I2C從機(jī)地址為0x32,模塊原理圖詳見(jiàn)圖6.7。若將MicroPort-RX8025T模塊通過(guò)MicroPort 接口與AM824-Core 相連,則SCL 和SDA 分別與PIO0_16 和PIO0_18連接,INT 引腳與PIO0_1 連接,F(xiàn)OE 與PIO0_10 連接。
圖6.7 RX8025T 模塊電路
2. 器件初始化
在使用RX8025T 前,必須完成RX8025T 的初始化操作,以獲取對(duì)應(yīng)的操作句柄,進(jìn)而才能使用RX8025T 的各種功能,初始化函數(shù)(am_rx8025t.h)的原型為:
該函數(shù)意在獲取RX8025T 器件的實(shí)例句柄,其中,p_dev 為指向am_rx8025t_dev_t 類型實(shí)例的指針,p_devinfo 為指向am_rx8025t_devinfo_t 類型的實(shí)例信息的指針。
(1)實(shí)例
定義am_rx8025t_dev_t 類型(am_rx8025t.h)實(shí)例如下:
其中,g_rx8025t_dev 為用戶自定義的實(shí)例,其地址作為p_dev 的實(shí)參傳遞。
(2)實(shí)例信息
實(shí)例信息主要描述了具體器件的固有信息,即RX8025T 的CLK_EN、INT 引腳與微處理器引腳的連接信息。其類型am_rx8025t_devinfo_t 的定義(am_rx8025t.h)如下:
當(dāng)MicroPort-RX8025T 模塊通過(guò)MicroPort 接口與AM824-Core 相連時(shí), INT和CLK_EN和分別與PIO0_1 和PIO0_10 連接。其實(shí)例信息定義如下:
其中,g_rx8025t_devinfo 為用戶自定義的實(shí)例信息,其地址作為p_devinfo 的實(shí)參傳遞。
(3)I2C句柄i2c_handle
以I2C1 為例,其實(shí)例初始化函數(shù)am_lpc82x_i2c1_inst_init ()的返回值將作為實(shí)參傳遞給i2c_handle。即:
(4)實(shí)例句柄
RX8025T 初始化函數(shù)am_rx8025t_init ()的返回值,作為實(shí)參傳遞給其它功能接口函數(shù)的第一個(gè)參數(shù)(handle)。am_rx8025t_handle_t 類型的定義(am_rx8025t.h)如下:
若返回值為NULL,說(shuō)明初始化失??;若返回值不為NULL,說(shuō)明返回值handle 有效。
基于模塊化編程思想,將初始化相關(guān)的實(shí)例、實(shí)例信息等的定義存放到對(duì)應(yīng)的配置文件中,通過(guò)頭文件引出實(shí)例初始化函數(shù)接口,源文件和頭文件的程序范例分別詳見(jiàn)程序清單6.39 和程序清單6.40。
程序清單6.71 實(shí)例初始化函數(shù)實(shí)現(xiàn)(am_hwconf_rx8025t.c)
程序清單6.72 實(shí)例初始化函數(shù)聲明(am_hwconf_rx8025t.h)
后續(xù)只需要使用無(wú)參數(shù)的實(shí)例初始化函數(shù),即可獲取到RX8025T 的實(shí)例句柄。即:
3. 使用RTC 功能
使用RTC 功能即使用RTC 通用接口操作RX8025T 進(jìn)行時(shí)間的設(shè)置和獲取,在使用RTC通用接口前,需要獲取一個(gè)am_rtc_handle_t 類型的RTC 句柄。RX8025T 的驅(qū)動(dòng)提供了相應(yīng)的接口用于獲取RX8025T 的RTC 句柄,以便用戶通過(guò)RTC 通用接口操作RX8025T,其函數(shù)原型為:
該函數(shù)意在獲取RTC 句柄,其中,RX8025T 實(shí)例的句柄(rx8025t_handle)作為實(shí)參傳遞給handle,p_rtc 為指向am_rtc_serv_t 類型實(shí)例的指針,無(wú)實(shí)例信息。定義am_rtc_serv_t類型(am_rtc.h)實(shí)例如下
其中,g_rx8025t_rtc 為用戶自定義的實(shí)例,其地址作為p_rtc 的實(shí)參傳遞。
基于模塊化編程思想,將初始化相關(guān)的實(shí)例定義存放到對(duì)應(yīng)的配置文件中,通過(guò)頭文件引出實(shí)例初始化函數(shù)接口,源文件和頭文件分別詳見(jiàn)程序清單6.73 和程序清單6.74。
程序清單6.73 新增RX8025T 的RTC 實(shí)例初始化函數(shù)(am_hwconf_rx8025t.c)
程序清單6.74 am_hwconf_rx8025t.h 文件內(nèi)容更新(1)
后續(xù)只需要使用無(wú)參數(shù)的RTC 實(shí)例初始化函數(shù),即可獲取RTC 實(shí)例句柄。即:
獲取到handle 后,由于基于RTC 通用接口編寫(xiě)的應(yīng)用程序是可以跨平臺(tái)復(fù)用的,因此可以直接基于RX8025T 啟動(dòng)如程序清單6.45 所示的RTC 時(shí)間顯示應(yīng)用程序,詳見(jiàn)程序清單6.75。
程序清單6.75 啟動(dòng)RTC 應(yīng)用程序(基于RX8025T)
顯然,若將RTC 模塊由PCF85063 更換為RX8025T,應(yīng)用程序核心代碼無(wú)需修改。
4. 使用鬧鐘功能
使用鬧鐘功能即使用鬧鐘通用接口操作RX8025T。在使用鬧鐘通用接口前,需要獲取到一個(gè)am_alarm_clk_handle_t 類型的鬧鐘句柄。RX8025T 的驅(qū)動(dòng)提供了相應(yīng)的接口用于獲取RX8025T 的鬧鐘句柄,便于用戶通過(guò)鬧鐘通用接口操作RX8025T,其函數(shù)原型為:
該函數(shù)意在獲取鬧鐘句柄,其中,RX8025T 實(shí)例的句柄(rx8025t_handle)作為實(shí)參傳遞給handle,p_alarm_clk 為指向am_alarm_clk_serv_t 類型實(shí)例的指針,無(wú)實(shí)例信息。定義am_alarm_clk_serv_t 類型(am_alarm_clk.h)實(shí)例如下:
其中,g_rx8025t_alarm_clk 為用戶自定義的實(shí)例,其地址作為p_alarm_clk 的實(shí)參傳遞。
基于模塊化編程思想,將初始化相關(guān)的實(shí)例定義存放到對(duì)應(yīng)的配置文件中,通過(guò)頭文件引出實(shí)例初始化函數(shù)接口,源文件和頭文件分別詳見(jiàn)程序清單6.76 和程序清單6.77。
程序清單6.76 新增RX8025T 的鬧鐘實(shí)例初始化函數(shù)(am_hwconf_rx8025t.c)
程序清單6.77 am_hwconf_rx8025t.h 文件內(nèi)容更新(2)
后續(xù)只需要使用無(wú)參數(shù)的鬧鐘實(shí)例初始化函數(shù),即可獲取鬧鐘實(shí)例句柄。即:
獲取到handle 后,由于基于鬧鐘通用接口編寫(xiě)的應(yīng)用程序是可以跨平臺(tái)復(fù)用的,因此可以直接基于RX8025T 啟動(dòng)如程序清單6.54 所示的鬧鐘測(cè)試應(yīng)用程序,詳見(jiàn)程序清單6.78。
程序清單6.78 啟動(dòng)鬧鐘測(cè)試應(yīng)用程序(基于RX8025T)
顯然,若將RTC 模塊由PCF85063 更換為RX8025T,鬧鐘應(yīng)用程序核心代碼無(wú)需修改。
5. 為系統(tǒng)時(shí)間提供RTC 服務(wù)
若需要使用RX8025T 為系統(tǒng)時(shí)間提供RTC 服務(wù),只需要在初始化系統(tǒng)時(shí)間時(shí),將從RX8025T 中獲取的RTC 句柄作為系統(tǒng)時(shí)間初始化函數(shù)的rtc_handle 參數(shù)。即:
為方便使用,將初始化函數(shù)的調(diào)用添加到配置文件中,通過(guò)頭文件引出系統(tǒng)時(shí)間的實(shí)例初始化函數(shù)接口,詳見(jiàn)程序清單6.79 和程序清單6.80。
程序清單6.79 RX8025T 用作系統(tǒng)時(shí)間的實(shí)例初始化(am_hwconf_rx8025t.c)
程序清單6.80 am_hwconf_rx8025t.h 文件內(nèi)容更新(3)
后續(xù)只需要簡(jiǎn)單的調(diào)用該無(wú)參函數(shù),即可完成系統(tǒng)時(shí)間的初始化。即:
系統(tǒng)時(shí)間初始化后,由于基于系統(tǒng)時(shí)間通用接口編寫(xiě)的應(yīng)用程序是可以跨平臺(tái)復(fù)用的,因此可以直接基于RX8025T 啟動(dòng)如程序清單6.65 所示的系統(tǒng)時(shí)間測(cè)試應(yīng)用程序,詳見(jiàn)程序清單6.81。
程序清單6.81 啟動(dòng)系統(tǒng)時(shí)間測(cè)試應(yīng)用程序(基于RX8025T)
顯然,若將RTC 模塊由PCF85063 更換為RX8025T,使用系統(tǒng)時(shí)間的應(yīng)用程序無(wú)需修改。
6. 特殊功能控制接口
對(duì)于RX8025T,除典型的時(shí)鐘和鬧鐘功能外,還具有一些特殊功能,比如,定時(shí)器、時(shí)鐘輸出、1 字節(jié)RAM 等。這些功能由于不是通用功能,只能使用RX8025T 相應(yīng)的接口進(jìn)行操作。以讀寫(xiě)1 字節(jié)RAM 為例,其相應(yīng)的接口函數(shù)詳見(jiàn)表6.15。
表6.15 讀寫(xiě)RAM 接口函數(shù)(am_rx8025t.h)
(1)寫(xiě)入RAM
該函數(shù)用于寫(xiě)入1 字節(jié)數(shù)據(jù)到RX8025T 的RAM 中,其函數(shù)原型為:
其中,handle 為RX8025T 實(shí)例句柄,data 為寫(xiě)入的單字節(jié)數(shù)據(jù)。若返回AM_OK,表示數(shù)據(jù)寫(xiě)入成功,反之失敗,寫(xiě)入0x55 至RAM 中的范例程序詳見(jiàn)程序清單6.82。
程序清單6.82 寫(xiě)入RAM 范例程序
(2)讀取RAM
該函數(shù)用于讀取存于RX8025T 的單字節(jié)RAM 中的數(shù)據(jù),其函數(shù)原型為:
其中,handle 為RX8025T 實(shí)例句柄,p_data 為輸出參數(shù),用于返回讀取的單字節(jié)數(shù)據(jù)。
返回AM_OK,表示讀取成功,反之失敗,范例程序詳見(jiàn)程序清單6.83。
程序清單6.83 讀取RAM 范例程序
可以使用讀寫(xiě)RAM 接口簡(jiǎn)單驗(yàn)證RX8025T 是否正常,詳見(jiàn)程序清單6.84。
程序清單6.84 讀寫(xiě)RAM 數(shù)據(jù)范例程序
若讀寫(xiě)數(shù)據(jù)出錯(cuò),則點(diǎn)亮LED0。由此可見(jiàn),雖然該程序的邏輯與程序清單6.70 所示的應(yīng)用程序基本一致,但由于使用的接口是特殊功能控制接口,與具體芯片相關(guān),因此并不能直接像RTC 應(yīng)用程序和鬧鐘應(yīng)用程序那樣直接跨平臺(tái)復(fù)用。
>>> 6.3.7 DS1302
1. 器件簡(jiǎn)介
DS1302 是一款涓流充電計(jì)時(shí)芯片,它包含一個(gè)實(shí)時(shí)時(shí)鐘和31 字節(jié)的靜態(tài) RAM,能夠提供年、月、日、時(shí)、分、秒等信息,具有閏年校正功能。
DS1302 被設(shè)計(jì)工作在非常低的電能下,在低于1μW 時(shí)還能保持?jǐn)?shù)據(jù)和時(shí)鐘信息。除了基本計(jì)時(shí)功能以外,DS1302 還具有其它一些特點(diǎn),比如,雙管腳主電源和備用電源,可編程涓流充電器VCC1。
DS1302 通過(guò)簡(jiǎn)單的串行接口與微處理器通訊,使用同步串行通訊簡(jiǎn)化了 DS1302 與微處理器的接口,通訊只需要三根線:CE、I/O(數(shù)據(jù)線)、SCLK(串行時(shí)鐘)。DS1302 的引腳封裝圖詳見(jiàn)圖6.8。
圖6.8 DS1302 引腳定義
其中,X1 和X2 為外接晶振的引腳,需要連接標(biāo)準(zhǔn)的32.768kHz 的石英晶體。SCLK、CE、I/O 為與微處理器的串行通信引腳。GND 為電源地,VCC1 和VCC2為電源引腳,這也是DS1302 具有特色的地方,即:雙管腳主電源和備用電源,在雙管腳中,VCC2 是主電源,VCC1 是備用電源,一般接充電電池。DS1302 是由VCC1 或VCC2 兩者中的較大者供電。當(dāng)VCC2 大于VCC1+0.2V,VCC2 給芯片供電。當(dāng)VCC2 小于VCC1 時(shí),芯片由VCC1 供電。當(dāng)芯片由VCC2 供電時(shí),VCC1 不供電,同時(shí),還可以通過(guò)可編程涓流充電器,使VCC2 向VCC1 流入很小的電流,以便為連接到VCC1 的電池充電。當(dāng)然,VCC1可以不接可充電電池,此時(shí),只需要通過(guò)控制可編程涓流充電器,使VCC2 不向VCC1 流入電流即可。
DS1032 模塊的原理圖詳見(jiàn)圖6.9,若將MicroPort-DS1302 模塊通過(guò)MicroPort 接口AM824-Core 相連,則SCLK、I/O 和CE 分別與PIO0_15、PIO0_13 和PIO0_14 連接。
圖6.9 DS1302 模塊電路
2. 器件初始化
在使用DS1302 前,必須完成DS1302 的初始化操作,以獲取對(duì)應(yīng)的操作句柄,進(jìn)而才能使用DS1302 的各種功能,初始化函數(shù)的原型(am_ds1302.h)為:
該函數(shù)意在獲取DS1302 器件的實(shí)例句柄,其中,p_dev 為指向am_ds1302_gpio_dev_t類型實(shí)例的指針,p_devinfo 為指向am_ds1302_gpio_devinfo_t 類型的實(shí)例信息的指針。
(1)實(shí)例
定義am_ds1302_gpio_dev_t 類型(am_ds1302.h)實(shí)例如下:
其中,g_ds1302_gpio_dev 為用戶自定義的實(shí)例,其地址作為p_dev 的實(shí)參傳遞。
(2)實(shí)例信息
實(shí)例信息主要描述了具體器件的固有信息,即DS1302 的SCLK、I/O、CE 引腳與微處理器引腳的連接信息。其類型am_ds1302_gpio_devinfo_t 的定義(am_ds1302.h)如下:
當(dāng)MicroPort-DS1302 模塊通過(guò)MicroPort 接口與AM824-Core 相連時(shí), SCLK、I/O 和CE 分別與PIO0_15、PIO0_13 和PIO0_14 連接。其實(shí)例信息定義如下:
其中,g_ds1302_gpio_devinfo 為用戶自定義的實(shí)例信息,其地址作為p_devinfo 的實(shí)參傳遞。
(3)實(shí)例句柄
DS1302 的初始化函數(shù)am_ds1302_gpio_init()的返回值,作為實(shí)參傳遞給其它功能接口函數(shù)的第一個(gè)參數(shù)(handle)。am_ds1302_handle_t 類型的定義(am_ds1302.h)如下:
若返回值為NULL,說(shuō)明初始化失敗;若返回值不為NULL,說(shuō)明返回值handle 有效。
基于模塊化編程思想,將初始化相關(guān)的實(shí)例、實(shí)例信息等的定義存放到對(duì)應(yīng)的配置文件中,通過(guò)頭文件引出實(shí)例初始化函數(shù)接口,源文件和頭文件的程序范例分別詳見(jiàn)程序清單6.85 和程序清單6.86。
程序清單6.85 實(shí)例初始化函數(shù)實(shí)現(xiàn)(am_hwconf_ds1302.c)
程序清單6.86 實(shí)例初始化函數(shù)聲明(am_hwconf_ds1302.h)
后續(xù)只需要使用無(wú)參數(shù)的實(shí)例初始化函數(shù),即可獲取到DS1302 的實(shí)例句柄。即:
3. 使用RTC 功能
使用RTC 功能即可使用RTC 通用接口操作DS1302 設(shè)置和獲取時(shí)間,在使用RTC 通用接口前,需要獲取一個(gè)am_rtc_handle_t 類型的RTC 句柄。DS1302 的驅(qū)動(dòng)提供了相應(yīng)的接口用于獲取DS1302 的RTC 句柄,便于用戶通過(guò)RTC 通用接口操作DS1302,其函數(shù)原型為:
該函數(shù)意在獲取RTC 句柄,其中,DS1302 實(shí)例的句柄(ds1302_handle)作為實(shí)參傳遞給handle,p_rtc 為指向am_rtc_serv_t 類型實(shí)例的指針,無(wú)實(shí)例信息。定義am_rtc_serv_t 類型(am_rtc.h)實(shí)例如下:
其中,g_ds1302_rtc 為用戶自定義的實(shí)例,其地址作為p_rtc 的實(shí)參傳遞。
基于模塊化編程思想,將初始化相關(guān)的實(shí)例定義存放到對(duì)應(yīng)的配置文件中,通過(guò)頭文件引出實(shí)例初始化函數(shù)接口,源文件和頭文件分別詳見(jiàn)程序清單6.87 和程序清單6.88。
程序清單6.87 新增DS1302 的RTC 實(shí)例初始化函數(shù)(am_hwconf_ds1302.c)
程序清單6.88 am_hwconf_ds1302.h 文件內(nèi)容更新(1)
后續(xù)只需要使用無(wú)參數(shù)的RTC 實(shí)例初始化函數(shù),即可獲取RTC 實(shí)例句柄。即:
獲取handle 后,由于基于RTC 通用接口編寫(xiě)的應(yīng)用程序是可以跨平臺(tái)復(fù)用的,因此可以直接基于DS1302 啟動(dòng)如程序清單6.45 所示的RTC 時(shí)間顯示應(yīng)用程序。
程序清單6.89 啟動(dòng)RTC 應(yīng)用程序(基于DS1302)
由此可見(jiàn),若將RTC 模塊由PCF85063 更換為DS1302,則應(yīng)用程序核心代碼無(wú)需修改。
4. 為系統(tǒng)時(shí)間提供RTC 服務(wù)
由于DS1302 不支持鬧鐘功能,因此不能使用通用鬧鐘接口操作DS1302。若需要使用DS1302 為系統(tǒng)時(shí)間提供RTC 服務(wù),只需要在初始化系統(tǒng)時(shí)間時(shí),將從 DS1302 中獲取的RTC 句柄作為系統(tǒng)時(shí)間初始化函數(shù)的rtc_handle 參數(shù)。即:
為方便使用特將初始化函數(shù)的調(diào)用添加到配置文件中,通過(guò)頭文件引出系統(tǒng)時(shí)間的實(shí)例初始化函數(shù)接口,詳見(jiàn)程序清單6.90 和程序清單6.91。
程序清單6.90 DS1302 用作系統(tǒng)時(shí)間的實(shí)例初始化(am_hwconf_ds1302.c)
程序清單6.91 am_hwconf_ds1302.h 文件內(nèi)容更新(2)
后續(xù)只需要簡(jiǎn)單的調(diào)用該無(wú)參函數(shù),即可完成系統(tǒng)時(shí)間的初始化。即:
系統(tǒng)時(shí)間初始化后,由于基于系統(tǒng)時(shí)間通用接口編寫(xiě)的應(yīng)用程序是可重用的,因此可以直接基于DS1302 啟動(dòng)如程序清單6.65 所示的系統(tǒng)時(shí)間測(cè)試應(yīng)用程序,詳見(jiàn)程序清單6.92。
程序清單6.92 啟動(dòng)系統(tǒng)時(shí)間測(cè)試應(yīng)用程序(基于DS1302)
顯然,若將RTC 模塊由PCF85063 更換為DS1302,使用系統(tǒng)時(shí)間的應(yīng)用程序無(wú)需修改。
5. 特殊功能控制接口
除典型的實(shí)時(shí)時(shí)鐘功能外,DS1302 還具有一些特殊功能,比如,涓流充電功能、31 字節(jié)RAM 等。這些功能由于不是通用功能,只能使用DS1302 相應(yīng)的接口操作。以讀寫(xiě)RAM和涓流充電功能為例,其相應(yīng)的接口函數(shù)詳見(jiàn)表6.16。
表6.16 DS1302 特殊功能控制接口(am_ds1302.h)
(1)寫(xiě)入RAM
該函數(shù)用于寫(xiě)入數(shù)據(jù)到DS1302 的RAM 中(最多可寫(xiě)入31 字節(jié)數(shù)據(jù)),其函數(shù)原型為:
其中,handle 為DS1302 實(shí)例句柄,p_data 指向待寫(xiě)入數(shù)據(jù)的首地址,data_len 指定寫(xiě)入數(shù)據(jù)的字節(jié)數(shù),最大為31 字節(jié),pos 指定了寫(xiě)入RAM 的起始地址,DS1302 的RAM 空間大小為31 字節(jié),對(duì)應(yīng)的地址為0 ~ 30,pos 的有效范圍即為0 ~ 30。若返回AM_OK,表示數(shù)據(jù)寫(xiě)入成功,反之失敗,寫(xiě)入31 字節(jié)數(shù)據(jù)至RAM 中的范例程序詳見(jiàn)程序清單6.93。
程序清單6.93 寫(xiě)入RAM 范例程序
(2)讀取RAM
該函數(shù)用于讀取存于DS1302 的 RAM 中的數(shù)據(jù),其函數(shù)原型為:
其中,handle 為DS1302 實(shí)例句柄,p_data 為輸出參數(shù),用于返回讀取的數(shù)據(jù),data_len表示讀取數(shù)據(jù)的字節(jié)數(shù),pos 表示讀取數(shù)據(jù)的起始地址(0 ~ 30)。若返回AM_OK,表示讀取成功,反之失敗,范例程序詳見(jiàn)程序清單6.94。
程序清單6.94 讀取RAM 范例程序
可以使用讀寫(xiě)RAM 接口簡(jiǎn)單驗(yàn)證DS1302 是否正常,詳見(jiàn)程序清單6.95。
程序清單6.95 讀寫(xiě)RAM 數(shù)據(jù)范例程序
(3)使能涓流充電
DS1302 具有雙電源供電,當(dāng)芯片由VCC2 供電時(shí),可以通過(guò)可編程涓流充電器,使VCC2向VCC1 流入很小的電流,以便為連接到VCC1 的電池充電。使能涓流充電的函數(shù)原型為:
其中,handle 為DS1302 實(shí)例句柄,set_val 為可編程涓流充電器的控制參數(shù),可以控制充電的電流。充電電路的示意圖詳見(jiàn)圖6.10。
圖6.10 DS1302 充電電路示意圖
當(dāng)總開(kāi)關(guān)打開(kāi)后,充電電流的大小是由選擇的二極管個(gè)數(shù)(1 個(gè)或2 個(gè))和電阻阻值(2KΩ、4KΩ 或8KΩ)決定的。二極管的個(gè)數(shù)決定了電壓的壓降,電流的計(jì)算公式為:
set_val 可用的值已經(jīng)使用宏進(jìn)行了定義,詳見(jiàn)表6.17實(shí)際使用時(shí),應(yīng)該根據(jù)需要的電流大小選擇其中一個(gè)宏作為set_val 的值。
表6.17 充電電路設(shè)置標(biāo)志
比如,若選擇1 個(gè)二極管、2K電阻,則應(yīng)該將set_val 的值設(shè)置為:
AM_DS1302_TRICKLE_1D_2K
由于在MicroPort-DS1302 中,VCC2 的值為3.3V,因此此時(shí)的實(shí)際電流計(jì)算公式為:
當(dāng)VCC1 為0 時(shí)(電池電量完全耗盡)時(shí),則電流達(dá)到最大值,其值為:
這就要求電池支持的最大充電電流為1.3mA。實(shí)際中,隨著對(duì)電池的充電,電池電量增加,VCC1 會(huì)逐漸增加,充電電流也隨之逐漸減小。范例程序詳見(jiàn)程序清單6.96。
程序清單6.96 使能涓流充電范例程序
(3)禁能涓流充電
當(dāng)不需要充電時(shí),如使用的非充電電池,可以使用該接口禁能涓流充電,其函數(shù)原型為:
其中,handle 為DS1302 實(shí)例句柄,范例程序詳見(jiàn)程序清單6.97。
程序清單6.97 禁能涓流充電范例程序
-
嵌入式
+關(guān)注
關(guān)注
5083文章
19131瀏覽量
305544 -
RTC
+關(guān)注
關(guān)注
2文章
538瀏覽量
66601 -
pcf85063
+關(guān)注
關(guān)注
1文章
3瀏覽量
3422
原文標(biāo)題:周立功:重用外設(shè)驅(qū)動(dòng)代碼—— RTC 實(shí)時(shí)時(shí)鐘(2)
文章出處:【微信號(hào):ZLG_zhiyuan,微信公眾號(hào):ZLG致遠(yuǎn)電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論