




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
精品文檔-下載后可編輯IAR集成開發(fā)平臺的ARM程序設(shè)計方法-基礎(chǔ)電子摘要:本文主要介紹了在不加載操作系統(tǒng)的情況下,如何使用IAR軟件平臺進(jìn)行基于ARM的嵌入式系統(tǒng)開發(fā),包括了底層驅(qū)動、I/O控制,中斷控制等程序設(shè)計。引言
在項目開發(fā),特別是中小型項目開發(fā)中,為了降低開發(fā)難度和開發(fā)成本,常選擇不加載操作系統(tǒng)的方案。本文選擇IAR嵌入式開發(fā)平臺,在不加載操作系統(tǒng)的前提下,使用C語言(約95%)和匯編語言(約5%),對以ATMEL公司的AT91M40800芯片(ARM7TDMI內(nèi)核)為主芯片的工業(yè)控制系統(tǒng)進(jìn)行了軟件開發(fā)。圖1系統(tǒng)硬件結(jié)構(gòu)圖2系統(tǒng)軟件框架硬件構(gòu)架
系統(tǒng)的整體硬件框架如圖1所示,該系統(tǒng)基本包括了目前工業(yè)控制系統(tǒng)所需要的各種功能,其軟件開發(fā)十分具有代表性。
IAR集成開發(fā)環(huán)境
IAR開發(fā)平臺是瑞典IAR公司開發(fā)的基于C/C++編譯和調(diào)試技術(shù)的綜合開發(fā)平臺。該平臺是一套完整的集成開發(fā)環(huán)境,可以完成創(chuàng)建工程、編輯文件、編譯、匯編、連接和調(diào)試應(yīng)用程序的所有工作;同一個工作空間可放多個工程;可針對單個源文件,一組源文件或者全部源文件進(jìn)行配置;提供工程模板,支持幾乎所有ARM內(nèi)核;提供ANSI標(biāo)準(zhǔn)C編譯器、ISO/ANSIC和嵌入式C++庫;支持包括WigglerJTAG接口等多種JTAG;提供了多種代碼優(yōu)化方式。
IAR生成的目標(biāo)代碼分為調(diào)試版本(Debug)和發(fā)行版本(Release)兩種。其中Debug目標(biāo)代碼的地址定義在SRAM中,將被到SRAM中執(zhí)行;Release目標(biāo)代碼的地址定義在Flash中,終大部分在Flash中執(zhí)行。在程序編譯之前需要根據(jù)模板編寫Debug.xcl和Release.xcl這兩個內(nèi)存分配文件。在IAR提供的工程模板基礎(chǔ)上,需要修改的地方有:
-DROMSTART=2000000-DROMEND=200FFFF//ROM的地址段-Z(CODE)INTVEC=00-3F-DRAMSTART=2022000-DRAMEND=207FFFF//RAM的地址段-D_USR_STACK_SIZE=20000//棧的大小-D_SVC_STACK_SIZE=50-D_FIQ_STACK_SIZE=100-D_ABT_STACK_SIZE=50-D_UND_STACK_SIZE=50-D_IRQ_STACK_SIZE=1000-D_HEAP_SIZE=2000//堆的大小
啟動代碼設(shè)計
通常C語言是從main函數(shù)開始執(zhí)行的,在沒有操作系統(tǒng)的情況下,對main函數(shù)的初始化工作由啟動代碼來完成,包括硬件初始化、堆棧初始化、各種寄存器的初始化等。
在完成所有的初始化工作以后,用一條跳轉(zhuǎn)指令進(jìn)入C程序的main函數(shù),程序的控制權(quán)轉(zhuǎn)移到C程序。
驅(qū)動程序設(shè)計
系統(tǒng)的軟件框架如圖2所示。驅(qū)動程序包括設(shè)備驅(qū)動程序、中斷程序以及中斷服務(wù)程序。首先以Flash驅(qū)動設(shè)計為例。根據(jù)Flash的Datasheet及硬件設(shè)計,有以下定義:
#defineFLASH_BASE((volatileUSHORT*)(0x01000000))/*FLASH的基地址*//*定義flash的操作代碼*/#defineFLASH_SEQ_ADD1(0x5555)#defineFLASH_SEQ_ADD2(0x2AAA)#defineFLASH_CODE1((USHORT)(0xAA))#defineFLASH_CODE2((USHORT)(0x55))#defineID_IN_CODE((USHORT)(0x90))#defineID_OUT_CODE((USHORT)(0xF0))#defineWRITE_CODE((USHORT)(0xA0))#defineCHIP_ERASE_CODE((USHORT)(0x10))
然后編寫FLASH功能函數(shù)。下面的函數(shù)用于驗證FLASH的設(shè)備ID號:
-ramfunc-farfuncBOOLFLASH_Test(void){//輸入命令序列,manuf_code表示生產(chǎn)編號,device_code表示設(shè)備編號USHORTmanuf_code,device_code;*(FLASH_BASE+FLASH_SEQ_ADD1)=FLASH_CODE1;*(FLASH_BASE+FLASH_SEQ_ADD2)=FLASH_CODE2;*(FLASH_BASE+FLASH_SEQ_ADD1)=ID_IN_CODE;//讀取生產(chǎn)編號和設(shè)備編號manuf_code=*FLASH_BASE;device_code=*(FLASH_BASE+1);//退出產(chǎn)品模式*(FLASH_BASE+FLASH_SEQ_ADD1)=ID_OUT_CODE;//判斷讀出的生產(chǎn)編號和設(shè)備編號是否正確return((manuf_code==0x001f)(device_code==0x00c0));}
中斷發(fā)生時,ARM內(nèi)核運(yùn)行狀態(tài)會由一般模式(SystemUser)進(jìn)入其它幾種模式(包括FIQ、IRQ等),因此需要保護(hù)正在運(yùn)行的現(xiàn)場(r0~r12通用寄存器),同時將ARM狀態(tài)寄存器(CPSR和SPSR)入棧。中斷程序使用匯編語言保護(hù)寄存器,而中斷服務(wù)程序可以使用C語言編寫。這里以控制步進(jìn)電機(jī)運(yùn)動的定時器中斷為例:
tc0_handlerstmfdsp!,{r14};保護(hù)寄存器入棧mrsr14,SPSRstmfdsp!,{r14}mrsr14,CPSRstmfdsp!,{r0-r12,r14}IMPORTInterrupt_Tc0ldrr0,=Interrupt_Tc0;此處跳轉(zhuǎn)進(jìn)入C語言中斷服務(wù)程序Interrupt_Tc0()movlr,pcbxr0IntExit;中斷服務(wù)程序完畢ldmiasp!,{r0-r12,r14};恢復(fù)現(xiàn)場msrCPSR_cxsf,r14ldmiasp!,{r14}msrSPSR_cxsf,r14ldmiasp!,{r14}subspc,lr,#4
值得注意的是,ARM的除法運(yùn)算采用軟件除法方式,會用到r14寄存器,所以也必須加以保護(hù),在中斷服務(wù)程序完畢后恢復(fù)現(xiàn)場,將寄存器依次出棧。
結(jié)語
在本系統(tǒng)的開發(fā)過程中有如下體會:
1、盡量少用占用大量存儲空間的變量(如intbuffer[4096]),系統(tǒng)開銷太大,可能造成系統(tǒng)崩潰。
2、慎重使用malloc()這樣的內(nèi)存分配函數(shù)。如果使用,一定要在使用完畢后調(diào)用free()函數(shù)釋放內(nèi)存空間,否則容易造成內(nèi)存泄漏,甚至系統(tǒng)崩潰。
3、要注意IAR編譯器的所有警告信息,仔細(xì)查看警告信息的意義。
4、一些經(jīng)常調(diào)用且需要快速處理的模塊,考慮使用匯編完成。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度紅木家具定制與古建筑修復(fù)合同
- 長春2025年度貨運(yùn)合同糾紛律師調(diào)解服務(wù)協(xié)議
- 2025年度租賃合同解除函及房屋租賃市場調(diào)研報告
- 產(chǎn)品入庫管理表格(零售業(yè)特定)
- 汽車維修技術(shù)故障診斷與排除試卷及答案解析
- 租賃平臺房東與租客權(quán)益保障協(xié)議
- 農(nóng)村環(huán)境保護(hù)與生態(tài)恢復(fù)項目合作合同書
- 鄉(xiāng)村新型產(chǎn)業(yè)開發(fā)項目協(xié)議
- 史記中的人物故事深度解讀
- 鋪貨擔(dān)保合同合作協(xié)議
- 鋰電池過充過放析銅析鋰產(chǎn)氣成分及原理0
- 國家重點保護(hù)古生物化石及產(chǎn)地名錄(2011年)
- GB/T 28621-2023安裝于現(xiàn)有建筑物中的新電梯制造與安裝安全規(guī)范
- 校園超市經(jīng)營投標(biāo)方案(完整技術(shù)標(biāo))
- 第三單元《手拉手》大單元(教學(xué)設(shè)計)人音版音樂一年級下冊
- 如何做好一名IPQC課件
- 九年級語文成績分析期末考試質(zhì)量分析試卷分析報告與評價報告
- 白金五星級酒店餐飲部員工操作手冊(sop)宴會部(doc-66)
- 小學(xué)體育與健康人教體育與健康基礎(chǔ)知識輕度損傷的自我處理【省一等獎】
- 農(nóng)產(chǎn)品溯源系統(tǒng)解決方案
- 高密度電法勘探課件
評論
0/150
提交評論