基于arm的功能模塊開發(fā)_第1頁
已閱讀1頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  1 緒論</b></p><p><b>  1.1 技術背景</b></p><p>  從8位單片機到目前的32位ARM微處理器,微型計算機技術的開發(fā)應用日臻成熟。RISC 32位ARM核的微處理器,具有高速、低耗、多功能等獨特亮點。尤其是微型操作系統(tǒng)的嵌入,實現(xiàn)了ARM嵌入式系統(tǒng)高實時性、高可靠性、多任務管

2、理等優(yōu)異特性,成為真正意義上的嵌入式系統(tǒng)。目前,嵌入式系統(tǒng)的應用已遍及網(wǎng)絡、通訊、信息家電、工業(yè)控制、航空、航天等高端應用領域,基于ARM技術的微處理器應用占據(jù)了32位RISC微處理器75%以上的市場份額,ARM技術正在逐步滲入到人們生活的各個方面,越來越多的開發(fā)人員開始了基于ARM平臺的開發(fā)。</p><p><b>  1.2 選題意義</b></p><p>

3、<b>  ADC的作用</b></p><p>  采集是認知的開始、測量的前提、分析的基礎,絕大多數(shù)的電子設備、儀器都是以數(shù)據(jù)采集技術為基礎。隨著電子技術和數(shù)字技術的飛速發(fā)展,信號的傳輸速度和CPU的處理速度越來越快,因此對數(shù)據(jù)采集和處理的要求也越來越高。</p><p>  模數(shù)轉(zhuǎn)換器是用來把模擬輸入信號(通常是電壓)轉(zhuǎn)換成等效數(shù)字量的裝置。其形式從單片集成電路

4、到高性能的組件都有,模數(shù)轉(zhuǎn)換器關鍵的特性是絕對和相對精度、線性度、單調(diào)性、分辨率、轉(zhuǎn)換速度、穩(wěn)定性以及價格,還有一些可供選用的其他技術性能,諸如輸入范圍、數(shù)字輸出編碼以及實際尺寸等。</p><p>  模擬數(shù)據(jù)以數(shù)字形式收集后可便于存貯、傳送、處理和顯示,因此,模數(shù)轉(zhuǎn)換在音、視頻信號處理、電子測量和工業(yè)控制等領域得到了廣泛的應用。</p><p>  基于ARM的ADC模塊開發(fā)意義<

5、;/p><p>  數(shù)據(jù)采集系統(tǒng)用于電子測量和工業(yè)控制系統(tǒng)。采集到的信號通過A/D轉(zhuǎn)換(即數(shù)據(jù)采集),送入微處理器主控單元。高速系統(tǒng)對ADC模塊的要求很高,低端MCU及ADC模塊難以滿足高性能的應用要求,因而,大多數(shù)開發(fā)人員將目光瞄向了ARM芯片的模數(shù)轉(zhuǎn)換器,因為其具有高速、多路、價廉等明顯優(yōu)勢。</p><p>  我選擇基于ARM的ADC模塊開發(fā)題目,希望通過對于ADC模塊的開發(fā),能為日后

6、的運用打下良好的基礎。</p><p><b>  開發(fā)設計方案</b></p><p>  本課題設計是根據(jù)我校老師自主研制的ARM實驗板進行設計開發(fā)的。用IAR軟件對各個模塊進行程序編寫并進行調(diào)試,當程序調(diào)試無誤后,將程序下載到ARM實驗板上,用電壓源提供一個電壓,送到ARM實驗板中,經(jīng)過模數(shù)轉(zhuǎn)換器,將輸入的模擬信號(電壓)轉(zhuǎn)換成數(shù)字信號,再通過LCD顯示出所采集

7、到的數(shù)字信號。</p><p>  圖1-1 整機工作框圖</p><p>  如上圖所示,由信號源輸出,提供3V電壓,通過電位器送到LPC2148的ADC模塊中,經(jīng)過模數(shù)轉(zhuǎn)換,將得到的數(shù)字信號儲存到寄存器中,并送到LCD,顯示出對應的數(shù)據(jù)。</p><p><b>  2 功能模塊說明</b></p><p>  

8、2.1 ARM主控芯片(LPC2148)</p><p>  2.1.1 工作特性</p><p>  LPC2148 是基于一個支持實時仿真和嵌入式跟蹤的32/16 位ARM7 TDMI-S CPU的微控制器,并帶有32kB 和512kB 嵌入的高速Flash 存儲器。128 位寬度的存儲器接口和獨特的加速結(jié)構(gòu),使32 位代碼能夠在最大時鐘速率下運行。對代碼規(guī)模有嚴格控制的應用可使用1

9、6 位Thumb 模式將代碼規(guī)模降低超過30%,而性能的損失卻很小。</p><p><b>  其特性為:</b></p><p>  (1) 16/32 位ARM7TDMI-S 微控制器,超小LQFP64 封裝。</p><p>  (2) 8kB~40kB 的片內(nèi)靜態(tài)RAM 和32kB~512kB 的片內(nèi)Flash 程序存儲器。128

10、 位寬度接口/加速器可實現(xiàn)高達60 MHz 工作頻率。</p><p>  (3) 通過片內(nèi) boot 裝載程序?qū)崿F(xiàn)在系統(tǒng)編程/在應用編程(ISP/IAP)。單個Flash 扇區(qū)或整片擦除時間為400ms。256 字節(jié)編程時間為1ms。</p><p>  (4) Embedded ICE RT 和嵌入式跟蹤接口提供實時調(diào)試(通過片內(nèi)Real Monitor 軟件)和高速跟蹤指令執(zhí)行。

11、</p><p>  (5) USB 2.0 全速設備控制器具有2kB 的端點RAM。此外,LPC2146/8 提供8kB 的片內(nèi)RAM,可被USB 的DMA 控制器訪問。</p><p>  (6) 2 個10 位ADC 轉(zhuǎn)換器,提供總共6/14 路模擬輸入,每個通道的轉(zhuǎn)換時間低至2.44us。</p><p>  (7) 1 個10 位的D/A 轉(zhuǎn)換器提供

12、可變的模擬輸出。</p><p>  (8) 2 個32 位定時器/外部事件計數(shù)器(帶4 路捕獲和4 路比較通道)、PWM 單元(6路輸出)和看門狗。</p><p>  (9) 低功耗實時時鐘(RTC)具有獨立的電源和特定的32kHz 時鐘輸入。</p><p>  (10) 多個串行接口,包括2 個UART(16C550)、2 個高速I2C 總線(400

13、kbit/s)、SPI 和具有緩沖作用和數(shù)據(jù)長度可變功能的SSP。</p><p>  (11) 向量中斷控制器(VIC)??膳渲脙?yōu)先級和向量地址。</p><p>  (12) 多達 45 個可承受5V 電壓的通用I/O 口(LQFP64 封裝)。</p><p>  (13) 多達 9 個邊沿或電平觸發(fā)的外部中斷管腳。</p><p&g

14、t;  (14) 通過一個可編程的片內(nèi) PLL(100us 的設置時間)可實現(xiàn)最大為60MHz 的 CPU 操作頻率。</p><p>  (15) 片內(nèi)集成振蕩器可操作頻率為 1~30 MHz 的外部晶體或頻率高達50MHz 的外部振蕩器。</p><p>  (16) 低功耗模式:空閑和掉電。</p><p>  (17) 可通過個別使能/禁止外圍功能和

15、外圍時鐘分頻來優(yōu)化額外功耗。</p><p>  (18) 通過外部中斷,USB,掉電檢測(BOD)或?qū)崟r時鐘(RTC)將處理器從掉電模式中喚醒。</p><p>  (19) 單電源,具有上電復位(POR)和掉電檢測(BOD)電路:</p><p>  -CPU 操作電壓范圍:3.0V~3.6 V (3.3 V± 10﹪)。</p>&

16、lt;p><b>  結(jié)構(gòu)圖</b></p><p>  圖2-1 LPC2148結(jié)構(gòu)方框圖</p><p>  由上圖可見,其結(jié)構(gòu)包含一個支持仿真的ARM7TDMI-S CPU,與片內(nèi)存儲器控制器接口的ARM7局部總線,與中斷控制器接口的AMBA高性能總線(AHB)和連接片內(nèi)外設功能的VLSI外設總線(VPB,ARM AMBA總線的兼容超集)。</p&

17、gt;<p>  AHB外設分配了2MB的地址范圍,它位于4GB ARM存儲器空間的最頂端。每個AHB外設也分配了16KB的地址空間。并且其外設功能都連接到VPB總線,外設包括外部中斷、I2C串行接口、捕獲/比較定時器0/1、SPI串行接口、ADC、UART、通用I/O、PWM、看門狗定時器、實時時鐘、系統(tǒng)控制。AHB到VPB的橋?qū)PB總線與AHB總線相連。VPB外設也分配了2MB的地址范圍,從3.5GB地址點開始。每個

18、VPB外設在VPB地址空間內(nèi)斗分配了16KB地址空間。</p><p><b>  2.1.3 應用</b></p><p>  ARM芯片開發(fā)應用的重要環(huán)節(jié)之一是底層開發(fā),即用匯編語言和C語言混合編程的啟動代碼。系統(tǒng)配置及部分啟動代碼程序:</p><p> ?。?) 系統(tǒng)配置頭文件</p><p><b>

19、;  config.h</b></p><p>  #ifndef __CONFIG_H</p><p>  #define __CONFIG_H</p><p>  #ifndef TRUE</p><p>  #define TRUE 1</p><p><b>  #endif<

20、;/b></p><p>  #ifndef FALSE</p><p>  #define FALSE 0</p><p><b>  #endif</b></p><p>  typedef unsigned char uint8; /* 無符號8位整型變量 */</p><

21、;p>  typedef signed char int8; /* 有符號8位整型變量 */</p><p>  typedef unsigned short uint16; /* 無符號16位整型變量 */</p><p>  typedef signed short int16; /* 有符號16位整型變量 */</p><

22、p>  typedef unsigned int uint32; /* 無符號32位整型變量 */</p><p>  typedef signed int int32; /* 有符號32位整型變量 */</p><p>  typedef float fp32; /* 單精度浮點數(shù)(32位長度) */</p>&l

23、t;p>  typedef double fp64; /* 雙精度浮點數(shù)(64位長度) */</p><p>  #include "nxp/iolpc2148.h"</p><p>  #include "stdio.h"</p><p>  #include "intrinsics

24、.h" // ARM核特征頭函數(shù)</p><p>  /*****************************************************************************</p><p>  系統(tǒng)時鐘配置:Fosc、Fcclk、Fcco、Fpclk/</p><p>  ******************

25、***********************************************************/</p><p>  #define Fosc 12000000 // 時鐘頻率:12MHz(晶振頻率范圍:10MHz~25MHz)。</p><p>  #define Fcclk (Fosc*5) // 系統(tǒng)時鐘:60MHz(系統(tǒng)頻率范圍:F

26、cclk=(1~32)*Fosc,且<=60MHZ)。</p><p>  #define Fcco (Fcclk*4) // 流控振蕩頻率:240MHz(允許頻率范圍:Fcco=156MHz~320MHz,且必須為Fcclk的2、4、8、16倍)。</p><p>  #define Fpclk (Fcclk/4)*2 // 外設時鐘頻率:30MHz(Fpclk必

27、須為 (Fcclk/4)的 1、2、4 倍,且不能高于Fcclk)。</p><p>  #define KOM_H IO1SET_bit.P1_24=1;</p><p>  #define KOM_L IO1CLR_bit.P1_24=1;</p><p>  void ZLG7289_cmd_dat(char cmd, char dat);</p

28、><p>  void ZLG7289_Init();</p><p><b>  #endif</b></p><p> ?。?)用匯編語言編寫的部分啟動代碼</p><p>  功能:分配個工作模式的棧區(qū)</p><p>  MODE_MSK DEFINE 0x1F ; Bi

29、t mask for mode bits in CPSR</p><p>  USR_MODE DEFINE 0x10 ; User mode</p><p>  FIQ_MODE DEFINE 0x11 ; Fast Interrupt Request mode</p><p>  IRQ_MODE DEFINE 0x1

30、2 ; Interrupt Request mode</p><p>  SVC_MODE DEFINE 0x13 ; Supervisor mode</p><p>  ABT_MODE DEFINE 0x17 ; Abort mode</p><p>  UND_MODE DEFINE 0x1B

31、 ; Undefined Instruction mode</p><p>  SYS_MODE DEFINE 0x1F ; System mode</p><p>  mrs r0,cpsr ; Original PSR value</p><p>  bic

32、 r0,r0,#MODE_MSK ; Clear the mode bits</p><p>  orr r0,r0,#SVC_MODE ; Set Supervisor mode bits</p><p>  msr cpsr_c,r0

33、 ; Change the mode</p><p>  ldr sp,=SFE(SVC_STACK) ; End of SVC_STACK</p><p>  bic r0,r0,#MODE_MSK ; Clear the mode bits</p><p>  orr

34、 r0,r0,#ABT_MODE ; Set Abort mode bits</p><p>  msr cpsr_c,r0 ; Change the mode</p><p>  ldr sp,=SFE(ABT_STACK) ; End of

35、ABT_STACK</p><p>  bic r0,r0,#MODE_MSK ; Clear the mode bits</p><p>  orr r0,r0,#UND_MODE ; Set Undefined mode bits</p><p>  msr

36、cpsr_c,r0 ; Change the mode</p><p>  ldr sp,=SFE(UND_STACK) ; End of UND_STACK</p><p>  bic r0,r0,#MODE_MSK ; Clear the mod

37、e bits</p><p>  orr r0,r0,#FIQ_MODE ; Set FIR mode bits</p><p>  msr cpsr_c,r0 ; Change the mode</p><p>  ldr sp,=SFE(FIQ_S

38、TACK) ; End of FIR_STACK</p><p>  bic r0,r0,#MODE_MSK ; Clear the mode bits</p><p>  orr r0,r0,#IRQ_MODE ; Set IRQ mode bits</

39、p><p>  msr cpsr_c,r0 ; Change the mode</p><p>  ldr sp,=SFE(IRQ_STACK) ; End of IRQ_STACK</p><p>  bic r0,r0,#MODE_MSK

40、 ; Clear the mode bits</p><p>  orr r0,r0,#SYS_MODE ; Set System mode bits</p><p>  msr cpsr_c,r0 ; Change the mode</p><

41、p>  ldr sp,=SFE(CSTACK) ; End of CSTACK</p><p><b>  ADC模塊</b></p><p><b>  2.2.1 概述</b></p><p>  在科研、生產(chǎn)中,要經(jīng)常進行模擬量的測量和控制。為了對溫度、壓力、流

42、量、速度、位移等物理量進行測量和控制,需要通過各種傳感器把上述物理量轉(zhuǎn)換成模擬量的電信號,即模擬電信號;將模擬電信號經(jīng)過處理并轉(zhuǎn)換成計算機能識別的數(shù)字量,送進計算機,這就是A/D變換過程或稱為數(shù)據(jù)采集。目前大部分傳感器輸出的仍是電壓或電流等模擬信號,所以往往需要將這些模擬信號轉(zhuǎn)換成易于處理和存儲的數(shù)字信號。</p><p>  A/D轉(zhuǎn)換可分為4個階段:即采樣、保持、量化和編碼。</p><p

43、>  ARM控制整個系統(tǒng)的運行,A/D模數(shù)轉(zhuǎn)換器將測試得到的模擬量轉(zhuǎn)換為數(shù)字量,由ARM接收,接到開始信號后,ARM首先將一個數(shù)字信號發(fā)給A/D/模數(shù)轉(zhuǎn)換器,由A/D和放大器將采集到的模擬量(模擬音頻、電壓、指紋等)轉(zhuǎn)換成對應數(shù)字量,經(jīng)A/D采樣控制保持后讀寫到SDRAM。對應的數(shù)字量傳回ARM,并由ARM計算、轉(zhuǎn)換等。</p><p>  LPC2148中的A/D 轉(zhuǎn)換器的基本時鐘由VPB 時鐘提供。每個

44、轉(zhuǎn)換器包含一個可編程分頻器,可將時鐘調(diào)整至逐步逼近轉(zhuǎn)換所需的4.5MHz(最大)。完全滿足精度要求的轉(zhuǎn)換需要11 個這樣的時鐘。</p><p>  2.2.2 技術特性 </p><p>  (1) 有兩個10 位逐次逼近式模數(shù)轉(zhuǎn)換器;</p><p>  (2) 6 或8 個管腳復用為輸入腳(ADC0 和ADC1);</p><p>&

45、lt;b>  (3) 掉電模式;</b></p><p>  (4) 測量范圍:0V~VREF (通常為3V; 不超過VDDA 電壓電平);</p><p>  (5) 10 位轉(zhuǎn)換時間≥2.44us;</p><p>  (6) 一個或多個輸入的突發(fā)轉(zhuǎn)換模式;</p><p>  (7) 可選擇由輸入跳變或定時器匹配信號觸

46、發(fā)轉(zhuǎn)換;</p><p>  (8) 轉(zhuǎn)換器的全局起始命令。</p><p>  2.2.3 功能框圖</p><p>  由下圖可見A/D模塊的內(nèi)部結(jié)構(gòu)。</p><p>  圖2-2 A/D轉(zhuǎn)換器內(nèi)部結(jié)構(gòu)</p><p>  2.2.4 相關寄存器</p><p>  ADC模塊的工作模式

47、設置和轉(zhuǎn)換結(jié)果控制由兩個32位寄存器完成。對于這兩個寄存器的描述如下表。</p><p>  表2-1 主要寄存器</p><p>  其中對于ADCR寄存器描述見表2-2。在描述一欄詳細介紹了各個控制位的作用。</p><p>  表2-2 A/D控制寄存器</p><p>  ADC轉(zhuǎn)換時鐘分頻值計算如下:</p>&l

48、t;p>  CLKDIV=FPCLK/FADCLK-1</p><p>  其中:FPCLK為所要設置的ADC時鐘,其值不能大于4.5MHz。</p><p>  關于ADDR寄存器的介紹如表2-3。</p><p>  表2-3 A/D數(shù)據(jù)寄存器</p><p>  讀取A/D結(jié)果時,要首先等待轉(zhuǎn)換結(jié)束,然后再讀取結(jié)果。由于10位二

49、進制數(shù)位于ADDR[15:6],因此還需要轉(zhuǎn)換。</p><p>  讀取A/D轉(zhuǎn)換結(jié)果程序如下,</p><p>  Uint32 ADC_Data;</p><p>  While((ADDR&0x80000000)==0); //等待轉(zhuǎn)換結(jié)束</p><p>  ADC_Data = ADDR;</p&g

50、t;<p>  ADC_Data = (ADC_Data>>6)&0x3ff; //處理轉(zhuǎn)換值</p><p><b>  應用(模塊初始化)</b></p><p>  ADC模塊正常工作的條件是正確配置其工作環(huán)境,即初始化ADC,初始化程序如下:</p><p>  /* 進行ADC模塊設置,其

51、中x<<n表示第n位設置為x(若x超過一位,則向高位順延) */</p><p>  ADCR = (1 << 0) // SEL = 1 ,選擇通道0</p><p>  ((Fpclk / 1000000 - 1) << 8) // CLKDIV = Fpclk / 1000000 - 1 ,即轉(zhuǎn)換時鐘為1MHz&l

52、t;/p><p>  (0 << 16) // BURST = 0 ,軟件控制轉(zhuǎn)換操作</p><p>  (0 << 17) // CLKS = 0 ,使用11clock轉(zhuǎn)換</p><p>  (1 << 21) // PDN = 1 , 正常工作模式(

53、非掉電轉(zhuǎn)換模式)</p><p>  (0 << 22) // TEST1:0 = 00 ,正常工作模式(非測試模式)</p><p>  (1 << 24) // START = 1 ,直接啟動ADC轉(zhuǎn)換</p><p>  (0 << 27);// EDGE = 0

54、(CAP/MAT引腳下降沿觸發(fā)ADC轉(zhuǎn)換)</p><p>  DelayNS(10);</p><p>  ADC_Data = ADDR;// 讀取ADC結(jié)果,并清除DONE標志位</p><p>  2.3 液晶顯示模塊</p><p>  我所采用的目標板采用北京青云科技公司的LCM12864漢字/圖形點陣顯示模

55、塊,該模塊的驅(qū)動芯片采用ST7920控制器系列,液晶顯示模塊的特性取決于驅(qū)動器芯片特性。</p><p>  2.3.1 ST7920的主要特性</p><p>  ST7920 同時作為控制器和驅(qū)動器其特性如下:</p><p><b>  (1) 硬件特性</b></p><p>  ★ 8 位/4 位并行接口及串行

56、接口可選(并行接口適配 M6800 時序)。</p><p>  ★ 自動電源啟動復位功能。</p><p>  ★ 內(nèi)部自建振蕩源。</p><p>  ★ 有效顯示范圍:32個漢字(4行×8列)</p><p>  ★ 自帶8192個16×16 點陣的中文字庫(2M位CGROM)。</p><p&g

57、t;  ★ 自帶126個16×8點陣的半寬西文字庫(16K位HCGROM)。</p><p><b>  (2)軟件特性</b></p><p>  ★ 文字與圖形混合顯示功能</p><p><b>  ★ 畫面清除功能</b></p><p><b>  ★ 光標歸位功能&l

58、t;/b></p><p><b>  ★ 顯示開/關功能</b></p><p>  ★ 光標顯示/隱藏功能</p><p>  ★ 顯示字體閃爍功能</p><p>  ★ 光標移位功能功能</p><p><b>  ★ 顯示移位功能</b></p>

59、<p>  ★ 垂直畫面旋轉(zhuǎn)功能</p><p><b>  ★ 反白顯示功能</b></p><p><b>  ★ 休眠模式</b></p><p>  液晶屏共分為四行,控制器會根據(jù)寫入的數(shù)據(jù)值范圍來自動選擇字符顯示在液晶屏上。各行端口地址如下: </p><p>  第一行:80

60、H – 87 H;</p><p>  第二行:90H – 97 H;</p><p>  第三行: 88H – 8F H;</p><p>  第四行: 98H – 9F H;</p><p>  2.3.2 LCM12864功能框圖</p><p>  圖2-3 液晶原理圖</p><p&g

61、t;  MCU接口及工作時序</p><p>  LCM19264與MCU接口</p><p>  表2-4 接口描述</p><p>  為節(jié)省MCU資源,所以用串口方式,時序關系如下圖:</p><p>  圖2-4 串口時序圖</p><p>  2.3.4 基本工作指令</p><p&

62、gt;  液晶模塊的基本指令為:</p><p>  1)清除顯示(CLEAR)</p><p>  格式 0 0 0 0 0 0 0 1</p><p>  將DDRAM 填滿“20H”(空格)代碼,并且設定DDRAM 的地址計數(shù)器(AC)為</p><p>  00H;更新設置進入設定點將I/D 設為1,游標右移AC 加1。</p&

63、gt;<p>  2)地址歸0(HOME)</p><p>  格式 0 0 0 0 0 0 1 X</p><p>  設定DDRAM 的地址寄存器為00H,并且將游標移到開頭原點位置;這個指</p><p>  令并不改變DDRAM 的內(nèi)容。</p><p>  3)進入設定點(ENTRY MODE SET) 初始值:06H

64、</p><p>  格式 0 0 0 0 0 1 I/D S</p><p>  指定在顯示數(shù)據(jù)的讀取與寫入時,設定游標的移動方向及指定顯示的移位。</p><p>  I/D=1,游標右移,DDRAM 地址計數(shù)器(AC)加1;</p><p>  I/D=0,游標左移,DDRAM 地址計數(shù)器(AC)減1。</p><p

65、>  S:顯示畫面整體位移:S = 1, I/D=1,畫面整體右移;S = 1, I/D=0,畫面整體左移</p><p>  4)顯示開關設置(DISPLAY STATUS)初始值:08H。</p><p>  格式 0 0 0 0 1 D C B</p><p>  控制整體顯示開關,游標開關,游標位置顯示反白開關。</p><p>

66、;  D=1,整體顯示開;D=0,整體顯示關,但是不改變DDRAM 內(nèi)容;</p><p>  C=1,游標顯示開;C=0,游標顯示關;</p><p>  B=1,游標位置顯示反白開,將游標所在地址上的內(nèi)容反白顯示;B=0,正常顯</p><p><b>  示。</b></p><p>  5)游標或顯示移位控制(C

67、URSOR AND DISPLAY SHIFT CONTORL)</p><p>  初始值:0001 XXXX B (X=0,1) </p><p>  格式 0 0 0 1 S/C R/L X X</p><p>  這條指令不改變DDRAM 的內(nèi)容</p><p>  S/C=0 R/L=0 游標向左移動, AC=AC-1;

68、</p><p>  S/C=0 R/L=1 游標向右移動, AC=AC+1;</p><p>  S/C=1 R/L=0 顯示向左移動,游標跟著移動 AC=AC;</p><p>  S/C=1 R/L=1 顯示向右移動,游標跟著移動 AC=AC。</p><p>  6)功能設定(FUNCTION SET) 初始值:0011

69、X0XX B (X=0,1)</p><p>  格式 0 0 1 DL X 0/RE X X</p><p>  DL:8/4 位接口控制位;</p><p>  DL=1,8 位MPU 接口;DL=1,4 位MPU 接口;</p><p>  RE:指令集選擇控制位;</p><p>  RE=1,擴充指令集;RE

70、=0,基本指令集;</p><p>  同一指令的動作不能同時改變DL和RE,需先改變DL再改變RE才能確保設置正確。</p><p>  7)設定CGRAM 地址</p><p>  格式 0 1 A5 A4 A3 A2 A1 A0</p><p>  設定CGRAM 地址到地址計數(shù)器(AC),AC 范圍為00H~3FH 需確認擴充指令中S

71、R=0。(卷動位置或RAM 地址選擇)</p><p>  8)設定DDRAM 地址</p><p>  格式 1 0 A5 A4 A3 A2 A1 A0</p><p>  設定DDRAM 地址到地址計數(shù)器(AC)</p><p>  第一行AC 范圍 80H~8FH</p><p>  第二行AC 范圍 90H~9

72、FH</p><p>  說明:ST7920 控制器的128×64 點陣液晶其實原理上等同256×32 點陣,第三行對應的DDRAM 地址緊接第一行;第四行對應的DDRAM 地址緊接第二行。用戶在使用行反白功能時,如果第一行反白,第三行必然反白。第二行反白,第四行必然反白。這是正?,F(xiàn)象。</p><p>  9)讀取忙標志和地址(RS=0,R/W=1)</p>

73、;<p>  格式 BF A6 A5 A4 A3 A2 A1 A0</p><p>  讀取忙標志以確定內(nèi)部動作是否完成,同時可以讀出地址計數(shù)器(AC)的值。</p><p>  10)寫顯示數(shù)據(jù)到 RAM(RS=1,R/W=0)</p><p>  格式 D7 D6 D5 D4 D3 D2 D1 D0</p><p>  當顯

74、示數(shù)據(jù)寫入后會使AC 改變,每個RAM(CGRAM,DDRAM,IRAM)地址都可以連續(xù)寫入2 個字節(jié)的顯示數(shù)據(jù),當寫入第二個字節(jié)時,地址計數(shù)器(AC)的值自動加一。</p><p>  11) 讀取顯示 RAM 數(shù)據(jù)(RS=1,R/W=1)</p><p>  格式 D7 D6 D5 D4 D3 D2 D1 D0</p><p>  讀取后會使AC 改變,設定RA

75、M(CGRAM,DDRAM,IRAM)地址后,先要Dummy read 一次后才能讀取到正確的顯示數(shù)據(jù),第二次讀取不需要Dummy read,除非重新設置了RAM 地址。</p><p>  液晶顯示器件是ADC數(shù)據(jù)采集系統(tǒng)中的一個重要環(huán)節(jié),正確設置其工作狀態(tài),即初始化設置,是保證系統(tǒng)工作的前提。因此根據(jù)以上的指令集,本設計的液晶初始化流程圖如圖2-5所示:</p><p>  圖2-5

76、 液晶初始化流程圖</p><p><b>  3、開發(fā)工具</b></p><p><b>  3.1 JTAG</b></p><p>  JTAG是一種技術先進高效的基于邊緣掃描技術的硬件仿真/調(diào)試/編程器。實物圖如下:</p><p>  圖3-1 JTAG實物圖</p>&

77、lt;p>  3.1.1 性能介紹</p><p>  JTAG(Joint Test Action Group ,聯(lián)合測試行動小組)是一種國際標準測試協(xié)議,主要用于芯片內(nèi)部測試及對系統(tǒng)進行仿真、調(diào)試。JTAG技術是一種嵌入式調(diào)試技術,它在芯片內(nèi)部封裝了專門的測試電路TAP(Test Access Port,測試訪問口),通過專用的JTAG測試工具對內(nèi)部節(jié)點進行測試。目前大多數(shù)比較復雜的器件都支持JTAG

78、協(xié)議,如ARM、DSP、FPGA器件等。標準的JTAG接口是4線:TMS、TCK、TDI、TDO,分別為測試模式選擇、測試時鐘、測試數(shù)據(jù)輸入和測試數(shù)據(jù)輸出。</p><p>  JTAG測試允許多個器件通過JTAG接口串聯(lián)在一起,形成一個JTAG鏈,能實現(xiàn)對各個器件分別測試。JTAG接口還常用于實現(xiàn)ISP(In-System Programmable 在線系統(tǒng)編程) 功能,如對Flash器件進行編程等。通過JTA

79、G接口,可以對芯片部的所有部件進行訪問,因而是開發(fā)調(diào)試嵌入式系統(tǒng)的一種簡潔高效的用段。</p><p>  JTAG的主要功能有兩種,或者說JTAG主要有兩大類:一類用于測試芯片的電氣特性,檢測芯片是否有問題;另一類用于Debug,對各類芯片以及其外圍設備進行調(diào)試。一個含有JTAG Debug接口模塊的CPU,只要時鐘正常,就可以通過JTAG接口訪問CPU的內(nèi)部寄存器、掛在CPU總線上的設備以及內(nèi)置模塊的寄存器。

80、簡單地說,JTAG的工作原理可以歸結(jié)為:在器件內(nèi)部定義一個TAP,通過專用的JTAG測試工具對內(nèi)部節(jié)點進行測試和調(diào)試。</p><p><b>  結(jié)構(gòu)框圖</b></p><p>  圖3-2 JTAG的內(nèi)部結(jié)構(gòu)方框圖</p><p>  JTAG內(nèi)部結(jié)構(gòu)如上圖所示。</p><p>  在硬件結(jié)構(gòu)上,JTAG接口包

81、括2部分:JTAG端口和控制器。與JTAG接口兼容的器件可以是微處理器(MPU)、微控制器(MCU)、PLD、CPL、FPGA、ASIC或者是其他符合IEEE 1149.1規(guī)范的芯片。IEEE 1149.1標準中規(guī)定對應于數(shù)字集成電路芯片的每個引腳都設有一個移位寄存單元,稱為邊界掃描單元BSC(Boundary Scan cell)它將JTAG電路與內(nèi)核邏輯電路聯(lián)系起來,同進隔離內(nèi)核邏輯電路和芯片引腳,由集成電路的所有邊界掃描單元構(gòu)成邊

82、界掃描寄存器BSR(Boundary-Scan Register)。邊界掃描寄存器僅在進行JTAG測試時有效,在集成電路正常工作時無效,不影響集成電路的功能。各引腳功能如下。</p><p> ?。?)TCK:時鐘信號,為TAP的操作提供了一個獨立的、基本的時鐘信號。</p><p> ?。?)TMS:模式選擇信號,用于控制TAP狀態(tài)機的轉(zhuǎn)換。</p><p>  

83、(3)TDI:數(shù)據(jù)輸入信號。</p><p> ?。?)TDO:數(shù)據(jù)輸出信號。</p><p> ?。?)TRST:復位信號,可以用來對TAP Controller進行復位(初始化)。這個信號接口在IEEE 1149.1標準里并不是強制要求的,因為通過TMS也可以對TAP Controller進行復位。</p><p> ?。?)STCK:時鐘返回信號,在IEEE

84、1149.1標準里非強制要求。</p><p>  (7)DBGRQ:目標板上工作狀態(tài)的控制信號。在IEEE 1149.1標準里沒有要求,只是在個別目標板(例如STR710)中會有。</p><p>  簡單地說,PC機對目標板的調(diào)試就是通過TAP接口完成對相關數(shù)據(jù)寄存器(DR)和指令寄存器(IR)的訪問。</p><p><b>  IAR 開發(fā)環(huán)境&l

85、t;/b></p><p><b>  功能簡介</b></p><p>  IAR Embeded Workbench (以下簡稱IAR EW)是仿真/調(diào)試/編程的集成開發(fā)環(huán)境。是一種非常高效的嵌入式系統(tǒng)開發(fā)工具,它使用戶能夠充分有效地開發(fā)管理嵌入式應用項目,其界面類似于MS Visual C++,可以在Windows 95/98/2000/XP平臺上運行,功

86、能十分完善。IAR EW中包含了源程序文件編輯器、項目管理器(Project)\源程序調(diào)試器(Debug)待,并且為C/C++編譯器、匯編器、鏈接定位器等提供了單一而靈活的開發(fā)環(huán)境。IAR EW 的源級瀏覽器(Source Browser)功能利用符號數(shù)據(jù)庫使用戶可以快速瀏覽源文件,還可通過詳細的符號信息來優(yōu)化變量存儲器;文件查找功能可在指定的若干種文件中進行全局文件搜索;IAR EW 還提供了對第三方工具軟件的接口,允許啟動用戶指定的

87、應用程序。</p><p>  IAR EW 適用于開發(fā)基于8位、16位以及32位微處理器的嵌入式系統(tǒng),其集成開發(fā)環(huán)境具有統(tǒng)一界面,為用戶提供了一個易學和具有最大代碼繼承能力的開發(fā)平臺,以及對各種特殊目標的支持。IAR 公司提出了所謂“不同架構(gòu),惟一解決方案”的理念用戶可以針多種不同的目標處理器,在相同的集成開發(fā)環(huán)境中進行基于不同CPU嵌入式系統(tǒng)應用程序的開發(fā),有效提高工作效率,節(jié)省工作時間。IAT EW 還是一

88、種可擴展的模塊化環(huán)境,允許用戶采用自己喜歡的編輯器和源代碼控制系統(tǒng),鏈接定位器(XLINK)可以輸出多種格式的目標文件,使用戶可以采用第三方軟件進行仿真調(diào)試。編譯器、匯編器和鏈接器也可在命令行上運行,用戶可以在一個已建好的項目中把它們作為外部工具使用。</p><p>  3.2.2 主要功能模塊:</p><p>  (1) 高度優(yōu)化的IAR ARM C/C++ 編譯器(compile)

89、。</p><p>  (2) IAR ARM 匯編器(Assembler)。</p><p>  (3) 通用的IAR XLINK 鏈接器(Linker)。</p><p>  (4) IAR XAR 和XLIB 建庫程序和IAR DLIB C/C++運行庫;</p><p>  (5) 功能強大的編輯器。</p><

90、;p>  (6) 項目管理器。</p><p>  (7) 命令行實用程序。</p><p>  (8) IAR C-SPY 調(diào)試器(先進的高級語言調(diào)試器)。</p><p>  3.2.3 軟件特點</p><p>  IAR EWAM軟件的特點:</p><p>  (1) 完善的ARM內(nèi)核支持。</

91、p><p>  (2) 客戶化地芯片級支持。</p><p>  (3) 編譯器速度優(yōu)化及浮點運算庫功能擴展。</p><p>  (4) 支持多種嵌入式操作系統(tǒng)。</p><p>  (5) 功能強大的Debug功能。 </p><p>  3.2.4 芯片級支持特性</p><p>  (1)

92、各廠商完整的ARM處理器 C/C++和匯編語言外設寄存器定義文件(*.h)。</p><p>  (2) 大量適于嵌入式代碼的編程語言擴展特性,包括:存儲器關鍵字、本征函數(shù)、中斷函數(shù)、存儲器映射I/O等。</p><p>  (3) 多種評估板例程,包含:IAR、Analog Devices、Aiji System、ARM、Atmel、Cirrus Logic、Freescale、Keil

93、、OKI、Olimex、Pasat、Philips、Phytec、ST和TI等。</p><p>  (4) 支持ARM或Thumb模式下大至4G字節(jié)的應用程序。</p><p>  (5) 每個函數(shù)都能選擇在ARM或Thumb模式下編譯。</p><p>  (6) 可生成VFP向量浮點協(xié)處理器代碼。</p><p>  (7) 支持Ana

94、log Devices、Atmel、Freescale、OKI、Philips、ST和TI等廠商的ARM處理器的Flash Loader程序。</p><p>  (8) 支持ARM Angel Debug monitor。</p><p>  3.2.5 集成開發(fā)環(huán)境的界面特色</p><p>  (1) 分層次的工程組織。 </p><p&g

95、t;  (2) 同一工作空間中允許存放多個工程。</p><p>  (3) 可??康拇翱诤投嘁晥D。</p><p>  (4) 源代碼瀏覽。</p><p>  (5) 創(chuàng)建和維護庫的工具。 </p><p>  (6) 可以和源代碼控制系統(tǒng)相集成。 </p><p>  (7) 文本編輯器。</p>

96、<p>  圖3-3 調(diào)試窗口</p><p>  圖3-3就是IAR Embeded Workbench的工作界面。其中:1窗口為工作窗口,2是程序源代碼窗口,3是反匯編窗口,4是寄存器窗口,5是存儲器窗口,其實還可以打開更多的窗口,例如變量窗口等。由此可見IAR為編程人員在調(diào)試過程中提供了很大的方便。</p><p><b>  4 編程及調(diào)試</b>

97、;</p><p><b>  整機初始化</b></p><p><b>  流程圖</b></p><p>  圖4-1 整機初始化流程圖</p><p><b>  初始化源程序</b></p><p>  功能:系統(tǒng)時鐘、加速模塊、中斷初始化&

98、lt;/p><p>  void system_init()</p><p>  {/*VPB分頻系數(shù)配置*/</p><p>  PLLCON = 1; // PLL使能(開啟)</p><p>  #if ((Fcclk/4)/Fpclk)==1 // VPB時鐘為處理器時鐘的1/4時</p><

99、p>  VPBDIV=0; // VPB分頻系數(shù)設置:模式0</p><p><b>  #endif</b></p><p>  #if((Fcclk/4)/Fpclk)==2 // VPB總線時鐘為處理器時鐘的1/2時</p><p>  VPBDIV=2; // VPB分頻系數(shù)設

100、置:模式2</p><p><b>  #endif</b></p><p>  #if((Fcclk/4)/Fpclk)==4 // VPB總線時鐘與處理器時鐘相同時</p><p>  VPBDIV=1; // VPB分頻系數(shù)設置:模式1</p><p><b>  #endi

101、f</b></p><p>  /*PLL 倍頻/分頻值自動配置*/</p><p>  #if(Fcco/Fcclk)==2 // 流控振蕩頻率是系統(tǒng)頻率的2倍時</p><p>  PLLCFG=((Fcclk/Fosc)-1)|(0<<5); //PLL配置:</p><p>&l

102、t;b>  #endif</b></p><p>  #if(Fcco/Fcclk)==4</p><p>  PLLCFG=((Fcclk/Fosc)-1)|(1<<5);</p><p><b>  #endif</b></p><p>  #if(Fcco/Fcclk)==8</

103、p><p>  PLLCFG=((Fcclk/Fosc)-1)|(2<<5);</p><p><b>  #endif</b></p><p>  #if (Fcco/Fcclk)==16</p><p>  PLLCFG = ((Fcclk/Fosc)-1)|(3 << 5);</p>

104、<p><b>  #endif</b></p><p>  PLLFEED = 0xaa;</p><p>  PLLFEED = 0x55;</p><p>  while((PLLSTAT&(1<<10))==0);</p><p>  PLLCON = 3;</p>

105、<p>  PLLFEED = 0xaa;</p><p>  PLLFEED = 0x55;</p><p>  // 存儲器加速配置</p><p>  MAMCR = 0;</p><p>  #if Fcclk < 20000000</p><p>  MAMTIM = 1;</p>

106、;<p><b>  #else</b></p><p>  #if Fcclk < 40000000</p><p>  MAMTIM = 2;</p><p><b>  #else</b></p><p>  MAMTIM = 3;</p><p>

107、<b>  #endif</b></p><p>  MAMCR = 2;</p><p><b>  // VIC初始化</b></p><p>  VICIntSelect=0;</p><p>  VICIntEnClear=0xFFFFFFFF;</p><p>  

108、VICSoftIntClear=0xFFFFFFFF;</p><p>  VICProtection=0;</p><p>  VICVectAddr=0;</p><p>  VICDefVectAddr=0;</p><p><b>  }</b></p><p><b>  AD

109、程序設計</b></p><p><b>  流程圖</b></p><p>  圖4-2 A/D程序設計流程圖</p><p><b>  源程序</b></p><p><b>  while(1)</b></p><p><b&

110、gt;  {</b></p><p>  ADCR = (ADCR&0xFFFFFF00)|0x01|(1 << 24); // 切換通道并進行第一次轉(zhuǎn)換</p><p>  while( (ADDR&0x80000000)==0 );// 等待轉(zhuǎn)換結(jié)束</p><p>  ADCR = ADCR | (1 <&

111、lt; 24);// 再次啟運轉(zhuǎn)換</p><p>  while( (ADDR&0x80000000)==0 );</p><p>  ADC_Data = ADDR;// 讀取ADC結(jié)果</p><p>  ADC_Data = (ADC_Data>>6) & 0x3FF;</p><p&g

112、t;  ADC_Data = ADC_Data * 3300;</p><p>  ADC_Data = ADC_Data / 1024;</p><p>  sprintf(str, "%4dmV at VIN1", ADC_Data);</p><p>  ISendStr(60, 23, 0x30, str); </p

113、><p>  DelayNS(10); </p><p><b>  }</b></p><p>  4.3 液晶模塊程序設計</p><p><b>  流程圖</b></p><p>  圖4-3 字符串顯示流程圖</p><p> 

114、 根據(jù)用戶的設置,判斷要寫入第幾行,然后將對應的端口地址寫入液晶屏。再將字符逐個寫入液晶屏,此時液晶屏上會出現(xiàn)要顯示的字符。</p><p>  顯示數(shù)字模塊的設計與字符顯示模塊類似,其主要思想是將數(shù)字逐位轉(zhuǎn)化為字符串,然后寫入液晶屏。數(shù)字轉(zhuǎn)化為字符的方法是,先取數(shù)字的各位,轉(zhuǎn)化為ASCII碼,存入字符串數(shù)組中的第一個單元。以此類推,將數(shù)字的每一位取出,轉(zhuǎn)換為ASCII碼,依次存入字符串數(shù)組。再將字符串顯示在液晶

115、屏。</p><p><b>  其流程圖如下:</b></p><p>  圖4-4 字符轉(zhuǎn)換流程圖</p><p><b>  源程序</b></p><p>  LCD寫命令數(shù)據(jù)函數(shù)</p><p>  /*******************************

116、*************************************</p><p>  函數(shù)功能:寫命令/數(shù)據(jù)</p><p>  *說明:data 寫入的值 cd=0指令寫入, cd=1數(shù)據(jù)寫入,</p><p>  ********************************************************************/

117、</p><p>  extern void WriteOperate(unsigned char value,unsigned char cd)</p><p><b>  {</b></p><p>  BusyLoop(); //</p><p><b>  if(cd)</b>&

118、lt;/p><p>  LCDRS_DH; //RS=1;</p><p><b>  else</b></p><p>  LCDRS_CL; //RS=0;</p><p>  LCDRW_WL; //RW=0;</p><p>  LCDE_EH;

119、 //E=1;</p><p>  LCDOUT = value;</p><p><b>  LCDOUT_1;</b></p><p>  Delay(20);</p><p>  LCDE_EL; //E=0</p><p><b>  }</b><

120、;/p><p>  /**************************** 寫無參數(shù)指令 **************************</p><p><b>  入口參數(shù):命令</b></p><p>  *****************************************************************

溫馨提示

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

評論

0/150

提交評論