第六章為重用外設(shè)驅(qū)動(dòng)代碼,本文內(nèi)容包含6.3 RTC 實(shí)時(shí)時(shí)鐘前四個(gè)小節(jié):
6.3.1 PCF85063
6.3.2 RTC 通用接口
6.3.3 鬧鐘通用接口
6.3.4 系統(tǒng)時(shí)間
6.3.5 特殊功能控制接口
6.3 RTC 實(shí)時(shí)時(shí)鐘
本節(jié)將以PCF85063 為例,詳細(xì)介紹RTC 通用接口,鬧鐘通用接口等。在本節(jié)的最后兩小節(jié),將介紹另外兩款RTC 芯片:RX8025T 和DS1302,雖然它們與PCF85063 存在差異,但卻可以使用同樣的通用接口對(duì)其進(jìn)行操作,實(shí)現(xiàn)了RTC 應(yīng)用的跨平臺(tái)復(fù)用。
>>> 6.3.1 PCF85063
1. 器件簡(jiǎn)介
PCF85063 是一款低功耗實(shí)時(shí)時(shí)鐘/日歷芯片,它提供了實(shí)時(shí)時(shí)間的設(shè)置與獲取、鬧鐘、可編程時(shí)鐘輸出、定時(shí)器/報(bào)警/半分鐘/分鐘中斷輸出等功能。
NXP 半導(dǎo)體公司的PCF85063 引腳封裝詳見(jiàn)圖6.4,其中的SCL 和SDA 為I2C 接口引腳,VDD 和VSS 分別為電源和地;OSCI 和OSCO 為32.768KHz 的晶振連接引腳,作為PCF85063 的時(shí)鐘源;CLKOUT 為時(shí)鐘信號(hào)輸出,供其它外部電路使用;INT 為中斷引腳,主要用于鬧鐘等功能。
圖6.4 PCF85063 引腳定義
PCF85063 的7 位I2C 從機(jī)地址為0x51,MicroPort-RTC 模塊通過(guò)MicroPort 接口與AM824-Core 相連,SCL 和SDA 分別與PIO0_16 和PIO0_18 連接,詳見(jiàn)圖6.5。若焊接R1,則INT 與PIO0_1 相連;若焊接R3,則INT 與PIO0_8 相連;若焊接R2,則CLKOUT 與PIO0_24 相連。
圖6.5 PCF85063 電路原理圖
2. 器件初始化
在使用PCF85063 前,必須完成PCF85063 的初始化操作,以獲取對(duì)應(yīng)的操作句柄,進(jìn)而才能使用PCF85063 的各種功能,初始化函數(shù)原型(am_pcf85063.h)為:
該函數(shù)意在獲取PCF85063 器件的實(shí)例句柄,其中,p_dev 為指向am_pcf85063_dev_t類型實(shí)例的指針,int_pin 作為實(shí)例信息,指定PCF85063 的INT 與MCU 的連接引腳號(hào)。
(1)實(shí)例
定義am_pcf85063_dev_t 類型(am_pcf85063.h)實(shí)例如下:
其中,g_pcf85063_dev 為用戶自定義的實(shí)例,其地址作為p_dev 的實(shí)參傳遞。
(2)實(shí)例信息
實(shí)例信息僅一個(gè)中斷引腳信息,用于指定PCF85063 的INT 與MCU 的引腳號(hào)相連,便于使用鬧鐘等功能。假設(shè)使用PIO0_1,則PIO0_1 作為int_pin 的實(shí)參傳遞。
(3)I2C 句柄i2c_handle
以I2C1 為例,其實(shí)例初始化函數(shù)am_lpc82x_i2c1_inst_init ()的返回值將作為實(shí)參傳遞給i2c_handle。即:
(4)實(shí)例句柄
PCF85063 初始化函數(shù)am_pcf85063_init ()的返回值,作為實(shí)參傳遞給其它功能接口函數(shù)的第一個(gè)參數(shù)(handle)。am_pcf85063_handle_t 類型的定義(am_pcf85063.h)如下:
若返回值為NULL,說(shuō)明初始化失敗;若返回值不為NULL,說(shuō)明返回值handle 有效。
基于模塊化編程思想,將初始化相關(guān)的實(shí)例、實(shí)例信息等的定義存放到對(duì)應(yīng)的配置文件中,通過(guò)頭文件引出實(shí)例初始化函數(shù)接口,源文件和頭文件的程序范例分別詳見(jiàn)程序清單6.39 和程序清單6.40。
程序清單6.39 實(shí)例初始化函數(shù)實(shí)現(xiàn)(am_hwconf_pcf85063.c)
程序清單6.40 實(shí)例初始化函數(shù)聲明(am_hwconf_pcf85063.h)
后續(xù)只需要使用無(wú)參數(shù)的實(shí)例初始化函數(shù),即可獲取到PCF85063 的實(shí)例句柄。即:
>>> 6.3.2 RTC 通用接口
PCF85063 作為一種典型的RTC 器件,可以使用RTC(Real-Time Clock)通用接口設(shè)置和獲取時(shí)間,其函數(shù)原型詳見(jiàn)表6.10。
表6.10 RTC 通用接口函數(shù)(am_rtc.h)
可見(jiàn),這些接口函數(shù)的第一個(gè)參數(shù)均為am_rtc_handle_t 類型的RTC 句柄,顯然,其并非前文通過(guò)PCF85063 實(shí)例初始化函數(shù)獲取的am_pcf85063_handle_t 類型的句柄。
RTC 時(shí)間設(shè)置和獲取只是PCF85063 提供的一個(gè)主要功能,PCF85063 還能提供鬧鐘等功能。PCF85063 的驅(qū)動(dòng)提供了相應(yīng)的接口用于獲取PCF85063 的RTC 句柄,以便用戶通過(guò)RTC 通用接口操作PCF85063,其函數(shù)原型為:
該函數(shù)意在獲取RTC 句柄,其中,PCF85063 實(shí)例的句柄(pcf85063_handle)作為實(shí)參傳遞給handle,p_rtc 為指向am_rtc_serv_t 類型實(shí)例的指針,無(wú)實(shí)例信息。定義am_rtc_serv_t類型(am_rtc.h)實(shí)例如下:
其中,g_pcf85063_rtc 為用戶自定義的實(shí)例,其地址作為p_rtc 的實(shí)參傳遞。
基于模塊化編程思想,將初始化相關(guān)的實(shí)例定義存放到對(duì)應(yīng)的配置文件中,通過(guò)頭文件引出實(shí)例初始化函數(shù)接口,源文件和頭文件分別詳見(jiàn)程序清單6.41 和程序清單6.42。
程序清單6.41 新增PCF85063 的RTC 實(shí)例初始化函數(shù)(am_hwconf_pcf85063.c)
程序清單6.42 am_hwconf_pcf85063.h 文件內(nèi)容更新(1)
后續(xù)只需要使用無(wú)參數(shù)的RTC 實(shí)例初始化函數(shù),即可獲取RTC 實(shí)例句柄。即:
1. 設(shè)置時(shí)間
該函數(shù)用于設(shè)置RTC 器件的當(dāng)前時(shí)間值,其函數(shù)原型為:
其中,handle 為RTC 實(shí)例句柄,p_tm 為指向細(xì)分時(shí)間(待設(shè)置的時(shí)間值)的指針。返回AM_OK,表示設(shè)置成功,反之失敗。其類型am_tm_t 是在am_time.h 中定義的細(xì)分時(shí)間結(jié)構(gòu)體類型,用于表示年/月/日/時(shí)/分/秒等信息。即:
其中,tm_mon 表示月份,分別對(duì)應(yīng)1~12 月。tm_year 表示年,1900 年至今的年數(shù),其實(shí)際年為該值加上1900。tm_wday;表示星期,0~6 分別對(duì)應(yīng)星期日~星期六。tm_yday 表示1 月1 日以來(lái)的的天數(shù)(0~365),0 對(duì)應(yīng)1 月1 日。tm_isdst 表示夏令時(shí),夏季將調(diào)快1 小時(shí)。如果不用,則設(shè)置為-1。設(shè)置年/月/日/時(shí)/分/秒的值詳見(jiàn)程序清單6.43,星期等附加的一些信息無(wú)需用戶設(shè)置,主要便于在獲取時(shí)間時(shí)得到更多的信息。
程序清單6.43 設(shè)置時(shí)間范例程序
2. 獲取時(shí)間
該函數(shù)用于獲取當(dāng)前時(shí)間值,其函數(shù)原型為:
其中,handle 為RTC 實(shí)例句柄,p_tm 為指向細(xì)分時(shí)間的指針,用于獲取細(xì)分時(shí)間。返回AM_OK,表示獲取成功,反之失敗,范例程序詳見(jiàn)程序清單6.44。
程序清單6.44 獲取細(xì)分時(shí)間范例程序
基于RTC 通用接口,可以編寫一個(gè)通用的時(shí)間顯示應(yīng)用程序:每隔1s 通過(guò)調(diào)試串口打印當(dāng)前的時(shí)間值。應(yīng)用程序的實(shí)現(xiàn)和接口聲明分別詳見(jiàn)程序清單6.45 和程序清單6.46。
程序清單6.45 RTC 時(shí)間顯示應(yīng)用程序(app_rtc_time_show.c)
程序清單6.46 RTC 時(shí)間顯示接口聲明(app_rtc_time_show.h)
為了啟動(dòng)該應(yīng)用程序,必須提供一個(gè)RTC 實(shí)例句柄以指定設(shè)置時(shí)間和獲取時(shí)間的RTC對(duì)象,若使用PCF85063,則RTC 實(shí)例句柄可通過(guò)實(shí)例初始化函數(shù)am_pcf85063_rtc_inst_init()獲得,范例程序詳見(jiàn)程序清單6.47。
程序清單6.47 啟動(dòng)RTC 應(yīng)用程序(基于PCF85063)
>>> 6.3.3 鬧鐘通用接口
PCF85063 除提供基本的RTC 功能外,還可以提供鬧鐘功能,可以使用鬧鐘通用接口設(shè)置使用鬧鐘,其函數(shù)原型詳見(jiàn)表6.11。
表6.11 鬧鐘通用接口函數(shù)(am_alarm_clk.h)
由此可見(jiàn),這些接口函數(shù)的第一個(gè)參數(shù)均為am_alarm_clk_handle_t 類型的鬧鐘句柄,PCF85063 的驅(qū)動(dòng)提供了相應(yīng)的接口用于獲取PCF85063 的鬧鐘句柄,以便用戶通過(guò)鬧鐘通用接口操作PCF85063,其函數(shù)原型為:
該函數(shù)意在獲取鬧鐘句柄,其中,PCF85063 實(shí)例的句柄(pcf85063_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_pcf85063_alarm_clk 為用戶自定義的實(shí)例,其地址作為p_alarm_clk 的實(shí)參傳遞。
基于模塊化編程思想,將初始化相關(guān)的實(shí)例定義存放到對(duì)應(yīng)的配置文件中,通過(guò)頭文件引出實(shí)例初始化函數(shù)接口,源文件和頭文件分別詳見(jiàn)程序清單6.48 和程序清單6.49。
程序清單6.48 新增PCF85063 的鬧鐘實(shí)例初始化函數(shù)(am_hwconf_pcf85063.c)
程序清單6.49 am_hwconf_pcf85063.h 文件內(nèi)容更新(2)
后續(xù)只需要使用無(wú)參數(shù)的鬧鐘實(shí)例初始化函數(shù),即可獲取鬧鐘實(shí)例句柄。即:
1. 設(shè)置鬧鐘時(shí)間
該函數(shù)用于設(shè)置鬧鐘時(shí)間,其函數(shù)原型為:
其中,handle 為鬧鐘實(shí)例句柄,p_tm 為指向鬧鐘時(shí)間(待設(shè)置的時(shí)間值)的指針。返回AM_OK,表示設(shè)置成功,反之失敗。類型am_alarm_clk_tm_t 是在am_alarm_clk.h 中定義的鬧鐘時(shí)間結(jié)構(gòu)體類型,用于表示鬧鐘時(shí)間信息。即:
其中,min 表示鬧鐘時(shí)間的分,hour 鬧鐘時(shí)間的小時(shí),wdays 用于指定鬧鐘在周幾有效,可以是周一至周日的任意一天或幾天。其可用的值已經(jīng)使用宏進(jìn)行了定義,比如,AM_ALARM_CLK_SUNDAY 位星期日有效,AM_ALARM_CLK_MONDAY 為星期一有效,AM_ALARM_CLK_TUESDAY 為星期二有效,AM_ALARM_CLK_WEDNESDAY 為星期三有效,AM_ALARM_CLK_THURSDAY 為星期四有效,M_ALARM_CLK_FRIDAY 為星期五有效,AM_ALARM_CLK_SATURDAY 為星期六有效,AM_ALARM_CLK_WORKDAY為工作日有效,AM_ALARM_CLK_EVERYDAY 為每天均有效。
若需鬧鐘在多天同時(shí)有效,則可以將多個(gè)宏值使用“|”連接起來(lái),比如,要使鬧鐘在星期一和星期二有效,則其值為:
AM_ALARM_CLK_MONDAY | AM_ALARM_CLK_TUESDAY。
若需鬧鐘在星期一至星期五有效(工作日有效),則其值為:
AM_ALARM_CLK_WORKDAY。
若需鬧鐘在每一天均有效,這其值為AM_ALARM_CLK_EVERYDAY,設(shè)置鬧鐘的范例程序詳見(jiàn)程序清單6.50。
程序清單6.50 設(shè)置鬧鐘時(shí)間的范例程序
2. 設(shè)置鬧鐘回調(diào)函數(shù)
PCF85063 可以在指定的時(shí)間產(chǎn)生鬧鐘事件,當(dāng)事件發(fā)生時(shí),由于需要通知應(yīng)用程序,因此需要由應(yīng)用程序設(shè)置一個(gè)回調(diào)函數(shù),在鬧鐘事件發(fā)生時(shí)自動(dòng)調(diào)用應(yīng)用程序設(shè)置的回調(diào)函數(shù)。設(shè)置鬧鐘回調(diào)函數(shù)原型為:
其中,handle 為鬧鐘實(shí)例句柄,pfn_callback 為指向?qū)嶋H回調(diào)函數(shù)的指針,p_arg 為回調(diào)函數(shù)的參數(shù)。若返回AM_OK,表示設(shè)置成功,反之失敗。
函數(shù)指針的類型am_pfnvoid_t 在am_types.h 中定義,即:
當(dāng)鬧鐘事件發(fā)生時(shí),將自動(dòng)調(diào)用pfn_callback 指向的回調(diào)函數(shù),傳遞給該回調(diào)函數(shù)的void*類型的參數(shù)就是p_arg 設(shè)定值,范例程序詳見(jiàn)程序清單6.51。
程序清單6.51 設(shè)置鬧鐘回調(diào)函數(shù)范例程序
3. 打開(kāi)鬧鐘
該函數(shù)用于打開(kāi)鬧鐘,以便當(dāng)鬧鐘時(shí)間到時(shí),自動(dòng)調(diào)用用戶設(shè)定的回調(diào)函數(shù),其函數(shù)原型為:
其中,handle 為鬧鐘實(shí)例句柄。返回AM_OK,表示打開(kāi)成功,反之失敗,范例程序詳見(jiàn)程序清單6.52。
程序清單6.52 打開(kāi)鬧鐘范例程序
4. 關(guān)閉鬧鐘
該函數(shù)用于關(guān)閉鬧鐘,其函數(shù)原型為:
其中,handle 為鬧鐘實(shí)例句柄。返回AM_OK,表示關(guān)閉成功,反之失敗,范例程序詳見(jiàn)程序清單6.53。
程序清單6.53 關(guān)閉鬧鐘范例程序
基于鬧鐘通用接口,可以編寫一個(gè)通用的鬧鐘測(cè)試應(yīng)用程序:設(shè)定當(dāng)前時(shí)間為09:32:30,鬧鐘時(shí)間為09:34,一分半后,達(dá)到鬧鐘時(shí)間,蜂鳴器鳴叫1 分鐘。鬧鐘測(cè)試應(yīng)用程序的實(shí)現(xiàn)和接口聲明分別詳見(jiàn)程序清單6.54 和程序清單6.55。
程序清單6.54 鬧鐘測(cè)試應(yīng)用程序(app_alarm_clk_test.c)
程序清單6.55 鬧鐘測(cè)試應(yīng)用程序接口聲明(app_alarm_clk_test.h)
為了啟動(dòng)該應(yīng)用程序,必須提供一個(gè)RTC 實(shí)例句柄以設(shè)置當(dāng)前時(shí)間與一個(gè)鬧鐘實(shí)例句柄用于設(shè)置鬧鐘,若使用PCF85063,則RTC 實(shí)例句柄可通過(guò)am_pcf85063_rtc_inst_init()獲得,鬧鐘實(shí)例句柄可通過(guò)am_pcf85063_alarm_clk_inst_init()獲得,范例程序詳見(jiàn)程序清單6.56。
程序清單6.56 啟動(dòng)鬧鐘測(cè)試應(yīng)用程序(基于PCF85063)
>>> 6.3.4 系統(tǒng)時(shí)間
AMetal 平臺(tái)提供了一個(gè)系統(tǒng)時(shí)間,進(jìn)行設(shè)置和獲取系統(tǒng)時(shí)間的函數(shù)原型詳見(jiàn)表6.12。
表6.12 系統(tǒng)時(shí)間接口函數(shù)(am_time.h)
1. 系統(tǒng)時(shí)間
系統(tǒng)時(shí)間的3 種表示形式分別為日歷時(shí)間、精確日歷時(shí)間、細(xì)分時(shí)間,細(xì)分時(shí)間前文已有介紹,這里僅介紹日歷時(shí)間和精確日歷時(shí)間。
-
日歷時(shí)間
與標(biāo)準(zhǔn)C 的定義相同,日歷時(shí)間表示從1970 年1 月1 日1 時(shí)0 分0 秒開(kāi)始的秒數(shù)。其類型am_time_t 定義如下:
-
精確日歷時(shí)間
日歷時(shí)間精度為秒,精確日歷時(shí)間的精度可以達(dá)到納秒,精確日歷時(shí)間只是在日歷時(shí)間的基礎(chǔ)上,增加了一個(gè)納秒計(jì)數(shù)器,其類型am_timespec_t(am_time.h)定義如下:
當(dāng)納秒值達(dá)到1000000000 時(shí),則秒值加1;當(dāng)該值復(fù)位為0 時(shí),則重新計(jì)數(shù)。
2. 初始化
使用系統(tǒng)時(shí)間前,必須初始化系統(tǒng)時(shí)間,其函數(shù)原型為:
其中,rtc_handle 用于指定系統(tǒng)時(shí)間使用的RTC,系統(tǒng)時(shí)間將使用該RTC 保存時(shí)間和獲取時(shí)間。update_sysclk_ns 和 update_rtc_s 用以指定更新系統(tǒng)時(shí)間相關(guān)的參數(shù)。
-
RTC 句柄rtc_handle
獲取RTC 句柄可通過(guò)RTC 實(shí)例初始化函數(shù)獲取,以作為rtc_handle 的實(shí)參傳遞。即:
-
與系統(tǒng)時(shí)間更新相關(guān)的參數(shù)(update_sysclk_ns 和 update_rtc_s)
每個(gè)MCU 都有一個(gè)系統(tǒng)時(shí)鐘,比如,LPC824,其系統(tǒng)時(shí)鐘的頻率為30MHz,常常稱之為主頻,在短時(shí)間內(nèi),該時(shí)鐘的誤差是很小的。由于直接讀取MCU 中的數(shù)據(jù)要比通過(guò)I2C讀取RTC 器件上的數(shù)據(jù)快得多,因此根據(jù)系統(tǒng)時(shí)鐘獲取時(shí)間值比直接從RTC 器件中獲取時(shí)間值要快得多,完全可以在短時(shí)間內(nèi)使用該時(shí)鐘更新系統(tǒng)時(shí)間,比如,每隔1ms 將精確日歷時(shí)間的納秒值增加1000000。但長(zhǎng)時(shí)間使用該時(shí)鐘來(lái)更新系統(tǒng)時(shí)間,勢(shì)必產(chǎn)生較大的誤差,這就需要每隔一定的時(shí)間重新從RTC 器件中,讀取精確的時(shí)間值來(lái)更新系統(tǒng)時(shí)間,以確保系統(tǒng)時(shí)間的精度。
update_sysclk_ns 為指定使用系統(tǒng)時(shí)鐘更新系統(tǒng)時(shí)間的時(shí)間間隔,其單位為ns,通常設(shè)置為1~100ms,即1000000~100000000。update_rtc_s 為指定使用RTC 器件更新系統(tǒng)時(shí)間的時(shí)間間隔,若對(duì)精度要求特別高,將該值設(shè)置為1,即每秒都使用RTC 更新一次系統(tǒng)時(shí)間,通常設(shè)置為10~ 60 較為合理。
基于此,將初始化函數(shù)調(diào)用在添加到配置文件中,通過(guò)頭文件引出系統(tǒng)時(shí)間的實(shí)例初始化函數(shù)接口,詳見(jiàn)程序清單6.57 和程序清單6.58。
程序清單6.57 PCF85063 用作系統(tǒng)時(shí)間的實(shí)例初始化(am_hwconf_pcf85063.c)
程序清單6.58 am_hwconf_pcf85063.h 文件內(nèi)容更新(2)
后續(xù)只需要簡(jiǎn)單的調(diào)用該無(wú)參函數(shù),即可完成系統(tǒng)時(shí)間的初始化。即:
3. 設(shè)置系統(tǒng)時(shí)間
根據(jù)不同的時(shí)間表示形式,有2 種設(shè)置系統(tǒng)時(shí)間方式。
-
精確日歷時(shí)間設(shè)置的函數(shù)原型為:
其中,p_tv 為指向精確日歷時(shí)間(待設(shè)置的時(shí)間值)的指針。若返回AM_OK,表示設(shè)置成功,反之失敗,范例程序詳見(jiàn)程序清單6.59。
程序清單6.59 使用精確日歷時(shí)間設(shè)置系統(tǒng)時(shí)間范例程序
將精確日歷時(shí)間的秒值設(shè)置為了1472175150,該值是從1970 年1 月1 日0 時(shí)0 分0 秒至2016 年8 月26 日09 時(shí)32 分30 秒的秒數(shù)。即將時(shí)間設(shè)置為2016 年8 月26 日09 時(shí)32分30 秒。通常不會(huì)這樣設(shè)置時(shí)間值,均是采用細(xì)分時(shí)間方式設(shè)置時(shí)間值。
-
細(xì)分時(shí)間設(shè)置的函數(shù)原型為:
其中,p_tm 為指向細(xì)分時(shí)間(待設(shè)置的時(shí)間值)的指針。若返回AM_OK,表示設(shè)置成功,反之失敗,范例程序詳見(jiàn)程序清單6.60。
程序清單6.60 使用細(xì)分時(shí)間設(shè)置系統(tǒng)時(shí)間范例程序
將時(shí)間設(shè)置為2016 年8 月26 日09:32:30,當(dāng)使用細(xì)分時(shí)間設(shè)置時(shí)間值時(shí),則細(xì)分時(shí)間的成員tm_wday, tm_yday 在調(diào)用后被更新。如果不使用夏令時(shí),則設(shè)置為-1。
4. 獲取系統(tǒng)時(shí)間
根據(jù)不同的時(shí)間表示形式,有3 種獲取系統(tǒng)時(shí)間的方式。
-
獲取日歷時(shí)間的函數(shù)原型為:
其中,p_time 為指向日歷時(shí)間的指針,用于獲取日歷時(shí)間。返回值同樣為日歷時(shí)間,若返回值為-1,表明獲取失敗,通過(guò)返回值獲取日歷時(shí)間的范例程序詳見(jiàn)程序清單6.61。
程序清單6.61 通過(guò)返回值獲取日歷時(shí)間范例程序
也可以通過(guò)參數(shù)獲得日歷時(shí)間,范例程序詳見(jiàn)程序清單6.62。
程序清單6.62 通過(guò)參數(shù)獲取日歷時(shí)間范例程序
-
獲取精確日歷時(shí)間的函數(shù)原型為:
其中,p_tv 為指向精確日歷時(shí)間的指針,用于獲取精確日歷時(shí)間。若返回AM_OK,獲取成功,反之失敗,范例程序詳見(jiàn)程序清單6.63。
程序清單6.63 讀取精確日歷時(shí)間范例程序
-
獲取細(xì)分時(shí)間的函數(shù)原型為:
其中,p_tm 為指向細(xì)分時(shí)間的指針,用于獲取細(xì)分時(shí)間。若返回AM_OK,表示獲取成功,反之失敗,范例程序詳見(jiàn)程序清單6.64。
程序清單6.64 獲取細(xì)分時(shí)間范例程序
基于系統(tǒng)時(shí)間相關(guān)接口,可以編寫一個(gè)通用的系統(tǒng)時(shí)間測(cè)試應(yīng)用程序:每隔1s 通過(guò)調(diào)試串口打印當(dāng)前的系統(tǒng)時(shí)間值。應(yīng)用程序的實(shí)現(xiàn)和接口聲明分別詳見(jiàn)程序清單6.65 和程序清單6.66。
程序清單6.65 系統(tǒng)時(shí)間測(cè)試應(yīng)用程序(app_sys_time_show.c)
程序清單6.66 系統(tǒng)時(shí)間測(cè)試應(yīng)用程序接口聲明(app_sys_time_show.h)
由此可見(jiàn),在應(yīng)用程序中,不再使用到任何實(shí)例句柄,使得應(yīng)用程序不與任何具體器件直接關(guān)聯(lián),系統(tǒng)時(shí)間的定義使得應(yīng)用程序在使用時(shí)間時(shí)更加便捷。在啟動(dòng)應(yīng)用程序前,必須完成系統(tǒng)時(shí)間的初始化,若使用PCF85063 為系統(tǒng)時(shí)間提供RTC 服務(wù),則系統(tǒng)時(shí)間的初始化可以通過(guò)am_pcf85063_time_inst_init ()完成,范例程序詳見(jiàn)程序清單6.67。
程序清單6.67 啟動(dòng)系統(tǒng)時(shí)間測(cè)試應(yīng)用程序(基于PCF85063)
>>> 6.3.5 特殊功能控制接口
對(duì)于PCF85063,除典型的時(shí)鐘和鬧鐘功能外,還具有一些特殊功能,如定時(shí)器、時(shí)鐘輸出、1 字節(jié)RAM 等。這些功能由于不是通用功能,只能使用PCF85063 相應(yīng)的接口進(jìn)行操作。以讀寫1 字節(jié)RAM 為例,其相應(yīng)的接口函數(shù)詳見(jiàn)表6.13。
表6.13 讀寫RAM 接口函數(shù)(am_pcf85063.h)
1. 寫入RAM
該函數(shù)用于寫入1 字節(jié)數(shù)據(jù)到PCF85063 的RAM 中,其函數(shù)原型為:
其中,handle 為PCF85063 實(shí)例句柄,data 為寫入的單字節(jié)數(shù)據(jù)。若返回AM_OK,表示數(shù)據(jù)寫入成功,反之失敗,寫入0x55 至RAM 中的范例程序詳見(jiàn)程序清單6.68。
程序清單6.68 寫入RAM 范例程序
2. 讀取RAM
該函數(shù)讀取存于PCF85063 的單字節(jié)RAM 中的數(shù)據(jù),其函數(shù)原型為:
其中,handle 為PCF85063 實(shí)例句柄,p_data 為輸出參數(shù),用于返回讀取到的單字節(jié)數(shù)據(jù)。返回AM_OK,表示讀取成功,反之失敗,范例程序詳見(jiàn)程序清單6.69。
程序清單6.69 讀取范例程序
可以使用讀寫RAM 接口簡(jiǎn)單驗(yàn)證PCF85063 是否正常,詳見(jiàn)程序清單6.70。
程序清單6.70 讀寫RAM 數(shù)據(jù)范例程序
-
日歷芯片
+關(guān)注
關(guān)注
0文章
3瀏覽量
8828
原文標(biāo)題:周立功:重用外設(shè)驅(qū)動(dòng)代碼—— RTC 實(shí)時(shí)時(shí)鐘(1)
文章出處:【微信號(hào):ZLG_zhiyuan,微信公眾號(hào):ZLG致遠(yuǎn)電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論