數(shù)字實(shí)時(shí)時(shí)鐘設(shè)計(jì)_第1頁
數(shù)字實(shí)時(shí)時(shí)鐘設(shè)計(jì)_第2頁
數(shù)字實(shí)時(shí)時(shí)鐘設(shè)計(jì)_第3頁
數(shù)字實(shí)時(shí)時(shí)鐘設(shè)計(jì)_第4頁
數(shù)字實(shí)時(shí)時(shí)鐘設(shè)計(jì)_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、四四 川川 理理 工工 學(xué)學(xué) 院院課 程 設(shè) 計(jì) 書學(xué)學(xué) 院院 計(jì)算機(jī)學(xué)院 專專 業(yè)業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) 班班 級級 2011 級 3 班 課課 程程 嵌入式接口技術(shù) 題題 目目 數(shù)字實(shí)時(shí)時(shí)鐘設(shè)計(jì) 教教 師師 凌軍 學(xué)學(xué) 生生摘 要本設(shè)計(jì)以 s3c2410 處理機(jī)核心,以實(shí)時(shí)時(shí)鐘芯片 ds1302 和液晶顯示lcd1602 為主體設(shè)計(jì)了一款簡易數(shù)字時(shí)鐘。該時(shí)鐘系統(tǒng)主要由 arm 的最小系統(tǒng)、時(shí)鐘模塊、鬧鐘模塊、液晶顯示模塊、鍵盤控制模塊組成。系統(tǒng)具有簡單清晰的操作界面,能夠準(zhǔn)確顯示時(shí)間(顯示格式為時(shí)時(shí):分分:秒秒,24 小時(shí)制),可隨時(shí)進(jìn)行時(shí)間調(diào)整,具有鬧鐘時(shí)間設(shè)置、鬧鐘開/關(guān)。設(shè)計(jì)以硬件軟件

2、化為指導(dǎo)思想,充分發(fā)揮嵌入式功能,大部分功能通過軟件編程來實(shí)現(xiàn),電路簡單明了,系統(tǒng)穩(wěn)定性高。同時(shí),該時(shí)鐘系統(tǒng)還具有功耗小、成本低的特點(diǎn),具有很強(qiáng)的實(shí)用性。由于系統(tǒng)所用元器件較少,嵌入式 arm 所被占用的 i/o 口不多,因此系統(tǒng)具有一定的可擴(kuò)展性。軟件程序采用均采用 c 語言編寫,便于移植與升級。報(bào)告詳細(xì)介紹了整個(gè)系統(tǒng)的硬件組成結(jié)構(gòu)、工作原理和系統(tǒng)的軟件程序設(shè)計(jì)。關(guān)鍵詞關(guān)鍵詞數(shù)字時(shí)鐘;嵌入式;s3c2410;ds1302;lcd1602目 錄系統(tǒng)概述系統(tǒng)概述.3系統(tǒng)工作原理系統(tǒng)工作原理 .3硬件方案設(shè)計(jì)硬件方案設(shè)計(jì) .4封裝封裝:.7引腳描述: .7芯片操作命令字.8復(fù)位和時(shí)鐘控制.8數(shù)據(jù)輸

3、出(見上圖).9突發(fā)模式(多字節(jié)操作).9時(shí)鐘時(shí)鐘/日歷日歷 .10上午-下午/12-24 小時(shí)制.11寫保護(hù)位 .11時(shí)鐘/日歷 突發(fā)模式.11讀寫操作詳細(xì)時(shí)序圖.12硬件電路設(shè)計(jì)硬件電路設(shè)計(jì) .13鍵盤模塊 .13lcd 顯示程序設(shè)計(jì) .14電源模塊 .14軟件方案設(shè)計(jì)軟件方案設(shè)計(jì) .151、軟件功能模塊設(shè)計(jì).152、模塊程序流程圖.153、程序代碼(見附錄).15系統(tǒng)調(diào)試系統(tǒng)調(diào)試.16總結(jié)總結(jié) .17參考文獻(xiàn)參考文獻(xiàn).1附附 錄錄 .2系統(tǒng)及 io 初始化(匯編).2實(shí)時(shí)時(shí)鐘芯片 ds1302 時(shí)間整體程序(c 語言).8實(shí)時(shí)時(shí)鐘數(shù)據(jù)讀取并更新到屏幕(c 語言).21系統(tǒng)概述從古代的滴漏

4、更鼓到近代的機(jī)械鐘,從電子表到目前的數(shù)字時(shí)鐘,為了準(zhǔn)確的測量和記錄時(shí)間,人們一直在努力改進(jìn)著計(jì)時(shí)工具。鐘表的數(shù)字化,大力推動(dòng)了計(jì)時(shí)的精確性和可靠性。在以往單片機(jī)構(gòu)成的裝置中,實(shí)時(shí)時(shí)鐘是必不可少的部件。而目前常用的實(shí)時(shí)時(shí)鐘,很多采用單片機(jī)的中斷服務(wù)來實(shí)現(xiàn),這種方式一方面需要采用計(jì)數(shù)器,占用硬件資源,另一方面需要設(shè)置中斷、查詢等,同樣耗費(fèi)單片機(jī)的資源,而且某些測控系統(tǒng)可能不允許;有的則使用并行接口的時(shí)鐘芯片,如 mc146818、ds12887 等,它們雖然能滿足單片機(jī)系統(tǒng)對實(shí)時(shí)時(shí)鐘的要求,但是這些芯片與單片機(jī)接口復(fù)雜,占用地址、數(shù)據(jù)總線多,芯片體積大,占用空間多,給其它設(shè)計(jì)帶來諸多不便。本設(shè)計(jì)選

5、取串行接口時(shí)鐘芯片 ds1302 與同步通信構(gòu)成數(shù)字時(shí)鐘電路。其簡單的三線接口能為單片機(jī)節(jié)省大量資源,ds1302 的后背電源及對后背電源進(jìn)行涓細(xì)電流充電的能力保證電路斷電后仍能保存時(shí)間和數(shù)據(jù)信息等。這些優(yōu)點(diǎn)解決了目前常用的實(shí)時(shí)時(shí)鐘所無法解決的問題。該時(shí)鐘電路強(qiáng)大的功能和優(yōu)越的性能,在很多領(lǐng)域的應(yīng)用中,尤其是某些自動(dòng)化控制、長時(shí)間無人看守的測控系統(tǒng)等對時(shí)鐘精確性和可靠性有較高要求的場合,具有很高的使用價(jià)值。系統(tǒng)工作原理1、嵌入式 arm 處理器 s3c2410 簡介 s3c2410 處理器是 samsung 公司基于 arm 公司的 arm920t 處理器核,采用fbga 封裝,采用 0.18

6、um 制造工藝的 32 位微控制器。該處理器擁有:獨(dú)立的16kb 指令 cache 和 16kb 數(shù)據(jù) cache,mmu,支持 tft 的 lcd 控制器,nand 閃存控制器,3 路 uart,4 路 dma,4 路帶 pwm 的 timer ,i/o 口,rtc,8 路 10 位adc,touch screen 接口,iic-bus 接口,iis-bus 接口,2 個(gè) usb 主機(jī),1 個(gè)usb 設(shè)備,sd 主機(jī)和 mmc 接口,2 路 spi。s3c2410 處理器最高可運(yùn)行在203mhz。2、實(shí)時(shí)時(shí)鐘芯片 ds1302 簡介vccsqw/outsdasclgndvbatx2x1電源控

7、制器邏輯控制時(shí)鐘/日歷寄存器多路選擇器ram 存儲(chǔ)分頻處理晶體振蕩器ram 存儲(chǔ)i2c 控制總線1hz ds1302 是美國 dallas 公司推出的一種高性能、低功耗、帶 ram 的實(shí)時(shí)時(shí)鐘電路,它可以對年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能,工作電壓為 2.5v5.5v。采用三線接口與 cpu 進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號或 ram 數(shù)據(jù)。ds1302 內(nèi)部有一個(gè) 318 的用于臨時(shí)性存放數(shù)據(jù)的 ram 寄存器。ds1302 是 ds1202 的升級產(chǎn)品,與 ds1202兼容,但增加了主電源/后備電源雙電源引腳,同時(shí)提供了對后備電源進(jìn)行涓細(xì)電流充

8、電的能力。 ds1302 內(nèi)部結(jié)構(gòu)硬件方案設(shè)計(jì)1、硬件方案 實(shí)時(shí)時(shí)鐘芯片:ds1302 是由美國 dallas 公司推出的具有涓細(xì)電流充電能力的低功耗實(shí)時(shí)時(shí)鐘芯片。ds1302 的在實(shí)時(shí)顯示時(shí)間中的應(yīng)用。它可以對年、月、日、周、日、時(shí)、分、秒進(jìn)行計(jì)時(shí),且具有閏年補(bǔ)償?shù)榷喾N功能。所以本嵌入式實(shí)時(shí)時(shí)鐘系統(tǒng)采用此實(shí)時(shí)時(shí)鐘芯片作為首選。2、核心器件實(shí)時(shí)時(shí)鐘芯片:ds1302嵌入式處理器:s3c24103、主要參數(shù)實(shí)時(shí)時(shí)鐘芯片:1) 實(shí)時(shí)時(shí)鐘,對年月日,時(shí)分秒,星期計(jì)數(shù); 閏年自己補(bǔ)償(調(diào)整), 有效計(jì)數(shù)到 2100 年 2) 31*8 位 ram 高速數(shù)據(jù)存儲(chǔ)器 3) 串行數(shù)據(jù)輸入/輸出,3 線接口

9、4) 2.0-5.5v 全操作供電范圍 5) 2.0v 時(shí)電流低于 300na 6) 單字節(jié)/突發(fā)模式的時(shí)鐘/ram 數(shù)據(jù)讀寫 嵌入式 arm 處理器:(1)功能單元1) 內(nèi)部 1.8v,存儲(chǔ)器 3.3v,外部 i/o3.3v,16kb 數(shù)據(jù) cache,16kb指令 cache,mmu。2) 內(nèi)置外部存儲(chǔ)器控制器(sdram 控制和芯片選擇邏輯)。3) lcd 控制器,一個(gè) lcd 專業(yè) dma。4) 4 個(gè)帶外部請求線的 dma。5) 3 個(gè)通用異步串行端口(irda1.0,16-byte tx fifo and 16-byte rx fifo),2 通道 spi6) 一個(gè)多主 i2c 總

10、線,一個(gè) i2s 總線控制器。7) sd 主接口版本 1.0 和多媒體卡協(xié)議版本 2.11 兼容。8) 兩個(gè) usb host,一個(gè) usb device(ver1.1)。9) 4 個(gè) pwm 定時(shí)器和一個(gè)內(nèi)部定時(shí)器。10) 看門狗定時(shí)器。11) 117 個(gè)通用 i/o。12) 56 個(gè)中斷源。13) 24 個(gè)外部中斷。14) 電源控制模式:標(biāo)準(zhǔn)、慢速、休眠、掉電。15) 8 通道 10 位 adc 和觸摸屏接口。16) 帶日歷功能的實(shí)時(shí)時(shí)鐘。17) 芯片內(nèi)置 pll。18) 設(shè)計(jì)用于手持設(shè)備和通用嵌入式系統(tǒng)。19) 16/32 位 risc 體系結(jié)構(gòu),使用 arm920t cpu 核的強(qiáng)大指

11、令集。20) 帶 mmu 的先進(jìn)的體系結(jié)構(gòu)支持 wince、epoc32、linux。21) 指令緩存(cache)、數(shù)據(jù)緩存、寫緩存和物理地址 tag ram,減小了對主存儲(chǔ)器帶寬和性能的影響。22) arm920t cpu 核支持 arm 調(diào)試的體系結(jié)構(gòu)。23) 內(nèi)部先進(jìn)的位控制器總線(amba)(amba2.0,ahb/apb)。24) (2)系統(tǒng)管理25) 小端/大端支持26) 地址空間:每個(gè) bank128mb(全部為 1gb)。27) 每個(gè) bank 可編程為 8/16/32 位數(shù)據(jù)總線。28) bank0 到 bank6 為固定起始地址。29) bank7 可編程 bank 起始

12、地址和大小。30) 一共 8 個(gè)存儲(chǔ)器 bank。31) 前 6 個(gè)存儲(chǔ)器 bank 用于 rom、sram 和其它。32) 兩個(gè)存儲(chǔ)器 bank 用于 rom、sram、和 sdram(同步隨機(jī)存儲(chǔ)器)。33) 支持等待信號用以擴(kuò)展總線周期。34) 支持 sdram 掉電模式下的自刷新。35) 支持不同類型的 rom 用于啟動(dòng)(nor/nand flash、eeprom 和其它)。4. ds1302 時(shí)鐘芯片接口參數(shù)封裝: 引腳描述:x1,x2 接標(biāo)準(zhǔn)的 32.768khz 石英晶振gnd接地/rst復(fù)位引腳, 由于在讀寫操作期間要求為高電平, 所以可以作片選來使用 i/o3 線通信接口的數(shù)

13、據(jù)輸入/輸出(雙向)sclk 串行同步時(shí)鐘輸入vcc1提供電池備份電源vcc2主電源供應(yīng), 可以用于給 vcc1 充電; 當(dāng) vcc2-vcc102v 時(shí)由 vcc2 供電, 當(dāng) vcc22.0v 之前必須保證為 0 - 試問: 怎么來設(shè)計(jì)這樣的電路?bit7必須為 1, 如果是 0 的話, 將不能寫入到 ds1302 內(nèi)部bit6表示接下來要操作的是時(shí)鐘/日歷數(shù)據(jù)(如果為 0), 還是是ram(如果為 1)bit5bit1指定待讀寫的寄存器或 ram 地址(030)bit0指定是讀操作還是寫操作, 如果是 0 則為寫, 是 1 則為讀sclk 在 /rst 由 0 變?yōu)?1 的時(shí)候必須為 0

14、.數(shù)據(jù)輸入到 ds1302 在通過 8 個(gè) sclk 輸入一個(gè)寫命令字后, 在下 8 個(gè)上升沿?cái)?shù)據(jù)被輸入到 ds1302 , 數(shù)據(jù)位從 lsb 開始 注:先在 io 上放置數(shù)據(jù), 然后產(chǎn)生一個(gè)上升沿.多余的 sclk 將被忽略單字節(jié)讀寫操作時(shí)序:數(shù)據(jù)輸出(見上圖) 在通過 8 個(gè) sclk 輸入一個(gè)寫命令字后, 在下 8 個(gè)上升沿?cái)?shù)據(jù)從 ds1302 輸出 , 數(shù)據(jù)位從 lsb 開始 .注意:第 1 個(gè)被輸出的數(shù)據(jù)位是在寫完命令字的最后一位的第 1 個(gè)下降沿被輸出多余的 sclk 的效果是重復(fù)發(fā)送數(shù)據(jù), 不產(chǎn)生其它影響突發(fā)模式(多字節(jié)操作) 多字節(jié)突發(fā)讀取/寫入可用于時(shí)鐘, 同樣可用于 ram

15、 的讀取, 在命令控制中的位 6 中指示. 位 5 到位 1=邏輯 1.時(shí)鐘的 9 到 31 號寄存器沒有數(shù)據(jù)存儲(chǔ)能力, ram 的 31 號也沒有(0-30).突發(fā)模式從地址 0 的第 0 位開始數(shù)據(jù)傳輸.在寫時(shí)鐘寄存器時(shí)(共 8 個(gè)), 必須按照寄存器的順序依次寫入.在寫 ram 數(shù)據(jù)時(shí),不需要同時(shí)寫所有 31 個(gè)寄存器. 時(shí)鐘/日歷如下圖所示. 這些寄存器中的相關(guān)數(shù)據(jù)都是以 bcd 碼的形式保存的.寄存器說明: 秒寄存器:第 7 位為時(shí)鐘停擺標(biāo)志位; 10sec 和 sec 分別代表秒的十位和個(gè)位. 分寄存器:10min 和 min 分別代表分的十位和個(gè)位. 時(shí)寄存器:第 7 位為 12

16、/24 小時(shí)時(shí)制選擇位,見下面的描述. 日寄存器:10date 和 date 分別用來表示日的十位和個(gè)位. 月寄存器:10m 和 month 分別用來表示月份的十位和個(gè)位. 星期寄存器:day 用來表示星期 年寄存器:10year 表示年的十位,最大為 99, 表示 2099 年; year 表示年份的個(gè)位. 控制寄存器:見寫保護(hù)位描述.涓流充電器寄存器:見涓流充電器描述. 時(shí)鐘停擺標(biāo)志 秒寄存器的第 7 位被定義為時(shí)鐘停擺標(biāo)志.當(dāng)該位被置為 1 的時(shí)候, 時(shí)鐘停擺, ds1302 被置于低功耗模式, 當(dāng)前電源損耗低于 100na.當(dāng)該位被寫清除的時(shí)候, 時(shí)鐘就開始擺動(dòng). 開始上電時(shí)該位未定義

17、. 上午-下午/12-24 小時(shí)制 時(shí)寄存器的第 7 位被定義為 12 小時(shí)/24 小時(shí)選擇位. 當(dāng)該位為高, 選擇 12小時(shí)制.在 12 小時(shí)制模式中, 第 5 位為 am/pm 標(biāo)志, 邏輯高表示 pm.在 24 小時(shí)制模式中, 第 5 位為第 2 個(gè)10小時(shí)位(僅該位時(shí)表示 20-23 小時(shí), 懂了吧?). 寫保護(hù)位 控制寄存器的第 7 位為寫保護(hù)標(biāo)志位. 第 6 到第 0 位被強(qiáng)制為 0, 讀的時(shí)候也是 0. 上電初始化狀態(tài)未定義.寫之前記得去除寫保護(hù)位.時(shí)鐘/日歷 突發(fā)模式 該模式下, 時(shí)鐘/日歷寄存器的前 8 個(gè)可以被連續(xù)地讀或?qū)? 從地址 0 的第 0位開始.涓流寄存器無法在突發(fā)

18、模式下訪問.在開始讀之前,當(dāng)前時(shí)間值被傳送到第 2 套內(nèi)部寄存器中.因此讀到的數(shù)據(jù)被鎖定了, 此時(shí)真正的時(shí)間寄存器仍然在走,以免在讀完之前對新的時(shí)間造成干擾讀寫操作詳細(xì)時(shí)序圖硬件電路設(shè)計(jì)時(shí)鐘模塊電路如圖所示,其中晶振采用的是 32.768khz,經(jīng)內(nèi)部電路分頻后可獲得一個(gè)標(biāo)準(zhǔn)的秒脈沖信號;電阻 r3、r4 是 i2c 總線的上拉電阻。 ds1302 電路圖 鍵盤模塊 鍵盤模塊設(shè)置了四個(gè)按鍵:key1、key2、key3、key4。其中 key1 為模式切換鍵,key2 為設(shè)定值上升鍵,用 key3 為設(shè)定值減小鍵,key4 是返回鍵。電路連接如圖 2-10 所示。4 個(gè)上拉電阻可以保證在沒有按

19、鍵輸入時(shí),進(jìn)入單片機(jī)四個(gè) i/o 口的按鍵狀態(tài)均為高電平,防止干擾產(chǎn)生;當(dāng)有按鍵按下時(shí),相應(yīng)的端口線狀態(tài)轉(zhuǎn)為低電平。vbat3x11x22scl6sda5sout7u2ds1302x2r3r4+5vp2.6p2.7r5r6r7r8+5vkey1key2key3key4p0.0p0.1p0.2p0.3 鍵盤電路lcd 顯示程序設(shè)計(jì)lcd 顯示程序的設(shè)計(jì)一般先要確定 lcd 的初始化、光標(biāo)定位、確定顯示字符后,lcd 就可以按如圖顯示。開始lcd 初始化光標(biāo)定位顯示字符返回lcd 顯示程序流程圖電源模塊用 220v 市電經(jīng)整流、濾波、穩(wěn)壓后,輸出穩(wěn)定的+5v 的直流電為其供電。+5v 穩(wěn)壓器采用

20、cw7805,其應(yīng)用電路如圖所示。圖中,濾波電容 c6 和 c8 的值為 1000uf,c7 和 c9 為 0.33uf。發(fā)光二極管 d6 的作用是顯示讀寫器的電源是否接通,若接通則 d6 燈亮,無接通則 d6 燈滅。c6c7132vvgndinoutu2cw7805r4d6c8c91234220/10v+-5v220ac電源電路圖軟件方案設(shè)計(jì)1、軟件功能模塊設(shè)計(jì) 該嵌入式實(shí)時(shí)時(shí)鐘包含以下軟件模塊:1) 嵌入式單片機(jī) s3c2410 系統(tǒng)初始化2) 系統(tǒng) i/o 初始化3) 實(shí)時(shí)時(shí)鐘初始時(shí)間預(yù)設(shè)4) 循環(huán)讀取實(shí)時(shí)時(shí)鐘數(shù)據(jù)5) 刷新時(shí)鐘數(shù)據(jù)到顯示器(屏幕)2、模塊程序流程圖3、程序代碼(見附錄)

21、開始系統(tǒng) io 初始化實(shí)時(shí)時(shí)鐘初始時(shí)間預(yù)設(shè)讀取當(dāng)前時(shí)間顯示時(shí)間到屏幕重復(fù)讀取當(dāng)前時(shí)間系統(tǒng)調(diào)試本設(shè)計(jì)的核心采用是 s3c2410 處理器,以時(shí)鐘芯片 ds1302 和液晶 lcd1602作為外圍元件,構(gòu)成了一個(gè)多功能的數(shù)字時(shí)鐘系統(tǒng)。圖示為程序運(yùn)行結(jié)果 s3c2410 數(shù)碼管顯示結(jié)果。 系統(tǒng)通過仿真調(diào)試后,可以穩(wěn)定運(yùn)行。同時(shí)可以對時(shí)間、日期、星期進(jìn)行設(shè)置。設(shè)計(jì)采用串行器件具有線路簡單、體積小、價(jià)格低等優(yōu)點(diǎn)。同時(shí)該系統(tǒng)稍加改造,就可以作為工業(yè)實(shí)時(shí)采集中的一個(gè)模塊??偨Y(jié)通過本課程設(shè)計(jì),提高了我們對嵌入式應(yīng)用設(shè)計(jì)的分析問題、解決問題的能力。鞏固了嵌入式系統(tǒng)的基本理論知識,進(jìn)一步了解和掌握嵌入式接口課程中

22、所講授的概念和編程方法,同時(shí)增強(qiáng)對嵌入式接口的理解和利用嵌入式接口開發(fā)應(yīng)用產(chǎn)品的能力。了解了嵌入式系統(tǒng)的設(shè)計(jì)方法,掌握了正確地選擇嵌入式接口和外設(shè),同時(shí)再一次掌握了用 c 語言對嵌入式接口進(jìn)行編程的方法,提高了利用網(wǎng)絡(luò)進(jìn)行資料查找的能力本設(shè)計(jì)以功能齊全適用于大眾為指導(dǎo)思想,同時(shí)系統(tǒng)經(jīng)組裝、調(diào)試后,可以穩(wěn)定運(yùn)行。而且可以對時(shí)間、日期、星期和鬧鐘進(jìn)行設(shè)置。系統(tǒng)采用串行器件具有線路簡單、體積小、價(jià)格低等優(yōu)點(diǎn)。為便于對系統(tǒng)進(jìn)行更換升級和移植!報(bào)告特此詳細(xì)介紹了整個(gè)系統(tǒng)的硬件組成結(jié)構(gòu)、工作原理和系統(tǒng)的軟件程序設(shè)計(jì)。參考文獻(xiàn)1賈金玲.單片機(jī)原理及應(yīng)用m.成都:電子科技大學(xué)出版社,2004.82賈金玲.微型

23、計(jì)算機(jī)原理及應(yīng)用m.重慶:重慶大學(xué)出版社,2001.123賈智平.嵌入式系統(tǒng)原理與接口技術(shù)m.北京:清華大學(xué)出版社,2009.84ds1307 datasheet http:/www.maxim- 系列單片機(jī)實(shí)用接口技術(shù).北京:電子工業(yè)出版社,20008何立名.單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)系統(tǒng)配置與接口技術(shù).北京:北京航空航天大學(xué)出版社,2004附 錄系統(tǒng)及 io 初始化(匯編); /* 定義堆棧的大小 */; * 用戶可根據(jù)實(shí)際需要修改 *usr_stack_legth equ 64svc_stack_legth equ 16fiq_stack_legth equ 16irq_stack_legth

24、equ 64abt_stack_legth equ 0und_stack_legth equ 0mode_usr equ 0 x10mode_fiq equ 0 x11mode_irq equ 0 x12mode_svc equ 0 x13mode_abt equ 0 x17mode_und equ 0 x1bmode_sys equ 0 x1f i_bit equ 0 x80 ; when i bit is set (1), irq is disabledf_bit equ 0 x40 ; when f bit is set (1), fiq is disabled/*/; /* 引入的外部

25、標(biāo)號在這聲明 */import _main ; c 語言主程序入口 import fiq_exception ; fiq 中斷服務(wù)程序import irq_exception; irq 中斷服務(wù)程序 import targetbusinit ; 針對目標(biāo)板的總線系統(tǒng)初始化import targetresetinit ; 調(diào)用 main 函數(shù)前目標(biāo)板初始化代碼; /* 給外部使用的標(biāo)號在這聲明 */ export vectors export resetinit export disablemmu export enableicache export disableicache export e

26、nabledcache export disabledcache export _rt_div0 export _user_initial_stackheap ; /*/ code32 area startup,code,readonly; /* 異常向量表 */vectors ldr pc, resetaddr ldr pc, undefinedaddr ldr pc, swi_addr ldr pc, prefetchaddr ldr pc, dataabortaddr dcd 0 ldr pc, irq_addr ldr pc, fiq_addrresetaddr dcd resetin

27、itundefinedaddr dcd undefinedswi_addr dcd softwareinterruptprefetchaddr dcd prefetchabortdataabortaddr dcd dataabortnouse dcd 0irq_addr dcd irq_exceptionfiq_addr dcd fiq_handler; /* 未定義指令 */undefined b undefined ; /* 軟中斷 */softwareinterrupt cmp r0, #4 ldrlo pc, pc, r0, lsl #2 movs pc, lrswifunction

28、dcd irqdisable ;0 dcd irqenable ;1 dcdfiqdisable ;2 dcdfiqenable ;3irqdisable ; 關(guān) irq 中斷 mrs r0, spsr orr r0, r0, #i_bit msr spsr_c, r0 movs pc, lrirqenable ; 開 irq 中斷 mrs r0, spsr bic r0, r0, #i_bit msr spsr_c, r0 movs pc, lr fiqdisable ; 關(guān) fiq 中斷 mrs r0, spsr orr r0, r0, #f_bit msr spsr_c, r0 movs

29、 pc, lrfiqenable ; 開 fiq 中斷 mrs r0, spsr bic r0, r0, #f_bit msr spsr_c, r0 movs pc, lr ; /* 取指中止 */prefetchabort b prefetchabort; /* 取數(shù)據(jù)中止 */dataabort b dataabort ; /* 快速中斷 */fiq_handler stmfd sp!, r0-r3, lr bl fiq_exception; fiq 中斷處理 ldmfd sp!, r0-r3, lr subs pc, lr, #4 resetinit bl initstack ; 初始化

30、堆棧 bl targetbusinit ; 總線系統(tǒng)初始化 (函數(shù)中不允許堆棧操作) bltargetresetinit; 針對目標(biāo)板的系統(tǒng)初始化 mrcp15,0,r1,c1,c0,0; (mmu 設(shè)置,異步總線模式) 讀控制寄存器orrr1,r1,#0 xc0000000 ; 當(dāng) hdivn=1 時(shí)操作有效mrcp15,0,r1,c1,c0,0 b _main; 跳轉(zhuǎn)到 c 語言入口 b . ; 如果 main 返回,則死循環(huán) ; /* 包含要燒寫的 bin 文件 */ export flash_function export flash_function_end flash_functi

31、on incbin flash.binflash_function_enddisablemmu mrc p15,0,r0,c1,c0,0 bic r0,r0,#(10) mcr p15,0,r0,c1,c0,0 mov pc, lrenableicache mrc p15,0,r0,c1,c0,0 orr r0,r0,#(112) mcr p15,0,r0,c1,c0,0 mov pc, lr disableicache mrc p15,0,r0,c1,c0,0 bic r0,r0,#(112) mcr p15,0,r0,c1,c0,0 mov pc, lr enabledcache mrc

32、p15,0,r0,c1,c0,0 orr r0,r0,#(12) mcr p15,0,r0,c1,c0,0 mov pc, lrdisabledcache mrc p15,0,r0,c1,c0,0 bic r0,r0,#(12) mcr p15,0,r0,c1,c0,0 mov pc,lr _user_initial_stackheap ldr r0,=bottom_of_heap mov pc,lr_rt_div0 b _rt_div0 ; /* 分配堆空間 */ area myheap, data, noinit, align=2bottom_of_heap space 256 ;庫函數(shù)的

33、堆空間; /* 分配堆??臻g */ area mystacks, data, noinit, align=2usrstackspace space usr_stack_legth * 4 ;用戶(系統(tǒng))模式堆??臻gsvcstackspace space svc_stack_legth * 4 ;管理模式堆??臻girqstackspace space irq_stack_legth * 4 ;中斷模式堆棧空間fiqstackspace space fiq_stack_legth * 4 ;快速中斷模式堆??臻gabtstackspace space abt_stack_legth * 4 ;中止義

34、模式堆??臻gundtstackspace space und_stack_legth * 4 ;未定義模式堆棧end實(shí)時(shí)時(shí)鐘芯片 ds1302 時(shí)間整體程序(c 語言)文件 ds1302.h#ifndef _ds1302_h_#define _ds1302_h_#define ds1302_burst_mode 1typedef struct uint8_t second; uint8_t minute; uint8_t hour; uint8_t day; uint8_t month; uint8_t week; uint8_t year;ds1302;void ds1302_init(vo

35、id);void ds1302_time(ds1302* pds,uint8_t dowhat);uint8_t ds1302_ram(uint8_t addr,uint8_t dowhat, uint8_t dat);void ds1302_charger(uint8_t tcs,uint8_t ds, uint8_t rs);#ifdef _cplusplus#endif#endif/!_ds1302_h_文件:ds1302.c#include config.h / s3c2410 配置文件#include ds1302.h/*文件名稱:ds1302.c/ds1302.h文件功能:ds13

36、02 時(shí)鐘芯片模塊操作代碼文件說明:*. 概要: *. 獲取時(shí)間, 不支持單個(gè)寄存器的讀取, 必須全部讀走 *. 讀寫 ram, 0-30, 共 31 個(gè)字節(jié), 只支持單字節(jié)讀取*. 模塊的配置 *. 根據(jù)是否需要突發(fā)模式?jīng)Q定是否定義 ds1302_burst_mode 宏,在頭文件中定義為好 *. 配置文件下面提到的 端口配置 *. 按需配置 ds1302_init 初始化函數(shù) *. io 端口的配置: 很多的單片機(jī)的 io 口在輸入與輸出時(shí)需要進(jìn)行一些配置,請按需要配置 spi3_io_switch 函數(shù) 如果你的單片機(jī)是 51, 則不需要配置; 是 msp430, stm32,arm 等

37、就需要配置了,參見該函數(shù)的說明*. 模塊文件使用方法: *. 按需調(diào)用 ds1302_init 初始化模塊相關(guān)總線 *. 如需配置 ds1302 的時(shí)間,調(diào)用 ds1302_time 并將 dowhat=1,結(jié)構(gòu)體需完全初始化 *. 獲取當(dāng)前時(shí)間:調(diào)用 ds1302_time,并將 dowhat=0,結(jié)構(gòu)體無需初始化*. 關(guān)于 ds1302 結(jié)構(gòu)體: *. 該結(jié)構(gòu)體按照芯片順序分布成員變量,不能對該結(jié)構(gòu)體作不相關(guān)的任何修改 *. 成員的值已經(jīng)進(jìn)行了相應(yīng)的數(shù)據(jù)轉(zhuǎn)換, 成員的值即為實(shí)際值, 即: 比如 2013 年, 則 year 成員的值為 13d, 而不是 0 x13 比如 25 號, 則 d

38、ay 的值為 25d, 而不是 0 x25*. 其它: *. 不需要管寫保護(hù)位, 程序已處理*/*內(nèi)部函數(shù)聲明*/uint8_t ds1302_read(uint8_t cmd);void ds1302_write(uint8_t cmd,uint8_t dat);uint8_t ds1302_base_conv(uint8_t dowhat,uint8_t dat);void spi3_io_switch(int8_t in_out);uint8_t spi3_recv_byte(void);void spi3_send_byte(uint8_t dat);/*/*端口配置*/#define

39、 ds1302_rst_h gpio_setbits(gpiod,gpio_pin_0)#define ds1302_rst_l gpio_resetbits(gpiod,gpio_pin_0)#define ds1302_sck_h gpio_setbits(gpiod,gpio_pin_2)#define ds1302_sck_l gpio_resetbits(gpiod,gpio_pin_2)#define ds1302_iop_h gpio_setbits(gpiod,gpio_pin_1)#define ds1302_iop_l gpio_resetbits(gpiod,gpio_p

40、in_1)#define ds1302_iop gpio_readinputdatabit(gpiod,gpio_pin_1)/*/*函 數(shù):ds1302_init功 能:初始化 ds1302 的總線參 數(shù):返 回:說 明:*/void ds1302_init(void) gpio_inittypedef gpio; rcc_apb2periphclockcmd(rcc_apb2periph_gpiod,enable); gpio.gpio_mode = gpio_mode_out_pp; gpio.gpio_pin = gpio_pin_0|gpio_pin_1|gpio_pin_2; gp

41、io.gpio_speed = gpio_speed_50mhz; gpio_init(gpiod,&gpio);/#ifdef ds1302_burst_mode/*函 數(shù):ds1302_time功 能:突發(fā)方式多字節(jié)時(shí)間讀取,快速參 數(shù): pds-ds1302 結(jié)構(gòu)體 dowhat:0-讀,1-寫返 回:說 明:只支持 24 小時(shí)進(jìn)制*/void ds1302_time(ds1302* pds,uint8_t dowhat) uint8_t cx=7; uint8_t* p = (uint8_t*)pds; if(dowhat=0)/-突發(fā)方式多字節(jié)讀取 ds1302_rst_l;

42、 ds1302_sck_l; ds1302_rst_h; spi3_send_byte(0 xbf); /突發(fā)讀命令字 while(cx-) *p+ = ds1302_base_conv(1,spi3_recv_byte()&0 x7f); ds1302_rst_l; else/-突發(fā)方式多字節(jié)寫入 ds1302_write(0 x8e,0 x00); /去寫保護(hù) ds1302_rst_l; ds1302_sck_l; ds1302_sck_h; spi3_send_byte(0 xbe); /突發(fā)方式多字節(jié)寫入 while(cx-) spi3_send_byte(ds1302_bas

43、e_conv(0,*p+); ds1302_rst_l; ds1302_write(0 x8e,0 x80); #else / - 非突發(fā)方式/*函 數(shù):ds1302_time功 能:非突發(fā)方式讀取所有時(shí)間數(shù)據(jù)參 數(shù): pds-時(shí)間結(jié)構(gòu)體 dowhat-讀還是寫:0-讀,1-寫返 回:說 明:只針對 24 小時(shí)制作處理,未處理 12 小時(shí)制*/void ds1302_time(ds1302* pds,uint8_t dowhat) uint8_t* p=(uint8_t*)pds; uint8_t wp=0 x8e; uint8_t start_addr; uint8_t cx=7; if(d

44、owhat = 0)/-讀時(shí)間 start_addr = 0 x81; while(cx-) /由于&0 x7f, 所以年份不能超過 2079 年 *p+ = ds1302_base_conv(1,ds1302_read(start_addr)&0 x7f); start_addr += 2; else/-寫時(shí)間 start_addr=0 x80; ds1302_write(wp,0 x00); /去寫保護(hù) while(cx-) ds1302_write(start_addr,ds1302_base_conv(0,*p+); start_addr += 2; ds1302_write(wp,0 x80); #endif/ds1302_burst_mode/*函 數(shù):ds1302_ram功 能:讀取/寫入 ram 的值參 數(shù): addr:0-30 的 ram 地址 dowhat:0-讀取,1-寫入 dat:若是寫入, 則為待寫入的數(shù)據(jù); 讀取時(shí)無效返 回:若為讀取,返回讀取到的數(shù)據(jù);

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論