第一篇:中北大學(xué)嵌入式系統(tǒng)實(shí)驗(yàn)報(bào)告
中北大學(xué)計(jì)算機(jī)與控制工程學(xué)院實(shí)驗(yàn)報(bào)告
《嵌入式系統(tǒng)實(shí)驗(yàn)報(bào)告》
專(zhuān) 業(yè) 電氣工程與智能控制 班 級(jí) 14070541 學(xué) 號(hào) 1407054103 姓 名 賈晨凌
實(shí)驗(yàn)一 ARM 處理器指令系統(tǒng)實(shí)驗(yàn)
一、實(shí)驗(yàn)?zāi)康?/p>
熟悉ARM指令系統(tǒng),熟悉ARM SDT編輯編譯連接,ARM Project Manager和ARM Debugger的設(shè)置和使用
二、實(shí)驗(yàn)條件
Windows平臺(tái)的ARM SDT 2.51軟件:ARM Project Manager和ARM Debugger。
三、實(shí)驗(yàn)內(nèi)容
學(xué)習(xí)使用ARM Project Manager建立項(xiàng)目文件,編輯匯編文件,并加入項(xiàng)目。學(xué)習(xí)ARM編譯器和匯編器的設(shè)置。通過(guò)編程熟悉ARM指令,包括跳轉(zhuǎn)指令,數(shù)據(jù)處理指令,狀態(tài)寄存器傳送指令,load/store指令,中斷異常產(chǎn)生指令。學(xué)習(xí)ARM調(diào)試起的使用方法,包括程序的導(dǎo)入,單步執(zhí)行,斷點(diǎn)設(shè)置等。
四、實(shí)驗(yàn)要點(diǎn)
工程文件的建立,在ARM Project Manager中點(diǎn)擊File->New,選擇Project,點(diǎn)擊確定。
鏈接器的設(shè)定,需要設(shè)置代碼和數(shù)據(jù)段的起始地址。點(diǎn)擊圖標(biāo),選擇不進(jìn)行遠(yuǎn)程調(diào)試,即可打開(kāi)調(diào)試器。
五、實(shí)驗(yàn)結(jié)果
熟悉ARM指令系統(tǒng)
實(shí)驗(yàn)二p1口實(shí)驗(yàn)
一、實(shí)驗(yàn)?zāi)康?/p>
熟悉 ARM SDT 軟件開(kāi)發(fā)方法和技能; 學(xué)習(xí)和鞏固 ARM 指令集; 學(xué)習(xí)和鞏固匯編語(yǔ)言程序設(shè)計(jì)
二、實(shí)驗(yàn)條件
Windows平臺(tái)的 ARM SDT 2.51 軟件:ARM Project Manager 和 ARM Debugger; DebugServer.exe;EFLAG-ARM-S3C44B0 實(shí)驗(yàn)箱
三、實(shí)驗(yàn)內(nèi)容
目錄 ARM251EXAMPLESASM 下的匯編程序,學(xué)習(xí)和調(diào)試代碼,分析所得結(jié)果。在調(diào)試器上仿真軟件的執(zhí)行。
在實(shí)驗(yàn)箱上,調(diào)試軟件,并觀察軟件的執(zhí)行結(jié)果
四、實(shí)驗(yàn)要點(diǎn)
在調(diào)試軟件目錄中啟動(dòng) DebugServer.exe 調(diào)試器服務(wù)程序。啟動(dòng) SDT 調(diào)試軟件 ARM Debugger。
五、實(shí)驗(yàn)結(jié)果
實(shí)驗(yàn)三中斷口實(shí)驗(yàn)
一、實(shí)驗(yàn)?zāi)康?/p>
熟悉 S3C44B0 中斷控制器的結(jié)構(gòu)。
學(xué)習(xí)使用 S3C44B0 中斷控制器的編程方法。
二、實(shí)驗(yàn)條件
Windows平臺(tái)的 ARM SDT 2.51 軟件:ARM Project Manager 和 ARM Debugger;DebugServer.exe;EFLAG-ARM-S3C44.B0 實(shí)驗(yàn)箱。
三、實(shí)驗(yàn)內(nèi)容
學(xué)習(xí)S3C44B0 中斷控制器的結(jié)構(gòu)。
理解 S3C44B0 的中斷服務(wù)程序的工作原理,中斷程序的調(diào)試。
四、實(shí)驗(yàn)要點(diǎn)
S3C44B0X的中斷控制器有30個(gè)中斷源。S3C44B0X支持新的中斷處理模式稱(chēng)為(vectored interrupt mode),在多個(gè)中段請(qǐng)求發(fā)生時(shí),由硬件優(yōu)先級(jí)邏輯確定應(yīng)該有哪個(gè)中斷得到服務(wù),同時(shí)硬件邏輯使中斷相量表的跳轉(zhuǎn)指令加載到(0X18或0X1C)位置,在該位置執(zhí)行跳轉(zhuǎn)指令使程序跳到相應(yīng)的中斷服務(wù)線程,因此相對(duì)與傳統(tǒng)的ARM的軟件方法能夠大大減少中斷進(jìn)入延時(shí)。
分支指令機(jī)器代碼= 0xea000000 +((
中斷優(yōu)先級(jí)產(chǎn)生模塊: 對(duì)于IRQ中斷請(qǐng)求有一個(gè)中斷優(yōu)先級(jí)產(chǎn)生模塊,如果中斷向量模式使用和一個(gè)中斷源被配置為ISQ中斷,中斷將被中斷優(yōu)先級(jí)產(chǎn)生模塊處理。中斷優(yōu)先級(jí)產(chǎn)生模塊處理包括五個(gè)單元:1個(gè)master單元,4個(gè)slave單元,每個(gè)slave單元管理6個(gè)中斷源,包括4個(gè)可編程的優(yōu)先級(jí)源(sGn)和2個(gè)固定優(yōu)先級(jí)源(sGKn,其優(yōu)先級(jí)在6個(gè)優(yōu)先級(jí)源中最低,其中sGKA的優(yōu)先級(jí)高于sGKB的優(yōu)先級(jí)).。一個(gè)master單元管理4個(gè)slave單元mGn和2個(gè)中斷源mGKn,用來(lái)確定4個(gè)38slave單元,和2個(gè)中斷源的優(yōu)先級(jí)mGKn,其中4個(gè)slave單元的優(yōu)先級(jí)次序可編程,其中的2個(gè)中斷源INT_RTC 和 INT_ADC中斷源在26個(gè)中斷源中優(yōu)先級(jí)最低,并且INT_RTC的優(yōu)先級(jí)高于INT_ADC的優(yōu)先級(jí)。
五、實(shí)驗(yàn)結(jié)果
實(shí)驗(yàn)四定時(shí)器實(shí)驗(yàn)
一、實(shí)驗(yàn)?zāi)康?/p>
熟悉 S3C44B0 定時(shí)器的結(jié)構(gòu)。
學(xué)習(xí)使用 S3C44B0 定時(shí)器的編程方法。
二、實(shí)驗(yàn)條件
Windows平臺(tái)的 ARM SDT 2.51 軟件:ARM Project Manager 和 ARM Debugger;DebugServer.exe;EFLAG-ARM-S3C44.B0 實(shí)驗(yàn)箱。
三、實(shí)驗(yàn)內(nèi)容
學(xué)習(xí)S3C44B0定時(shí)器的結(jié)構(gòu)。
理解 S3C44B0 定時(shí)器的工作原理,中斷程序的調(diào)試。
四、實(shí)驗(yàn)要點(diǎn)
理解 S3C44B0 定時(shí)器的工作原理
五、實(shí)驗(yàn)結(jié)果
實(shí)驗(yàn)五A/D轉(zhuǎn)化實(shí)驗(yàn)
一、實(shí)驗(yàn)?zāi)康?/p>
學(xué)習(xí)使用 S3C44B0 模數(shù)轉(zhuǎn)換器的控制的方法。
二、實(shí)驗(yàn)條件
Windows平臺(tái)的 ARM SDT 2.51 軟件:ARM Project Manager 和 ARM Debugger;DebugServer.exe;EFLAG-ARM-S3C44.B0 實(shí)驗(yàn)箱。
三、實(shí)驗(yàn)內(nèi)容
使用 S3C44B0 內(nèi)建的 A/D 轉(zhuǎn)換器,對(duì)實(shí)驗(yàn)箱提供的正弦,方波,直流信號(hào)進(jìn)行采集并通過(guò)穿行口,將采集到的數(shù)據(jù)顯示在 pc 機(jī)上,程度較好的同學(xué)可將數(shù)據(jù)直接顯示到系統(tǒng)的 LCD 屏幕上。
四、實(shí)驗(yàn)要點(diǎn)
S3C44B0X的1位A/D 轉(zhuǎn)換器包含一個(gè)8路模擬輸入混合器,自動(dòng)歸0比較器,時(shí)鐘發(fā)生器,10位連續(xù)近似寄存器和一個(gè)輸出寄存器.特征如下: 最大轉(zhuǎn)換速率:100KSPS 輸入電壓范圍:0-2.5V 輸入帶寬: 0-100 Hz(無(wú)采樣和保持電路)
五、實(shí)驗(yàn)結(jié)果
實(shí)驗(yàn)六LCD顯示實(shí)驗(yàn)
一、實(shí)驗(yàn)?zāi)康?/p>
了解LCD 基本概念與原理。理解LCD 的驅(qū)動(dòng)控制。
熟悉用 ARM 內(nèi)置的 LCD 控制器
二、實(shí)驗(yàn)條件
Windows平臺(tái)的 ARM SDT 2.51 軟件:ARM Project Manager 和 ARM Debugger;DebugServer.exe;EFLAG-ARM-S3C44.B0 實(shí)驗(yàn)箱。
三、實(shí)驗(yàn)內(nèi)容
學(xué)習(xí)LCD 顯示器的基本原理,理解其驅(qū)動(dòng)控制方法。掌握 LCD 驅(qū)動(dòng)方式的基本原理和方法。并用編程實(shí)現(xiàn)。
S3C44B0X 中具有內(nèi)置的 LCD 控制器,它具有將顯示緩存(在系統(tǒng)存儲(chǔ)器中)中的 LCD 圖象數(shù)據(jù)傳輸?shù)酵獠?LCD 驅(qū)動(dòng)電路的邏輯功能。S3C44B0X 中內(nèi)置的 LCD 控制器可支持灰度 LCD 和彩色 LCD。在灰度LCD 上,使用基于時(shí)間的抖動(dòng)算法(time-based dithering algorithm)和 FRC(Frame Rate Control)方法,可以支持單色、4 級(jí)灰度和 16 級(jí)灰度模式的灰度 LCD,在彩色 LCD 上,可以支持 256 級(jí)彩色。對(duì)于不同尺寸的 LCD,其具有不同數(shù)量的垂直和水平象素、數(shù)據(jù)接口的數(shù)據(jù)寬度、接口時(shí)間及刷新率,而 LCD 控制器可以進(jìn)行編程控制相應(yīng)的寄存器值,以適應(yīng)不同的 LCD 顯示板。內(nèi)置的 LCD 控制器提供了下列外部接口信號(hào):VFRAME: LCD 控制器和 LCD 驅(qū)動(dòng)器之間的幀同步信號(hào)。
四、實(shí)驗(yàn)要點(diǎn)
掌握 LCD 驅(qū)動(dòng)方式的基本原理和方法
五、實(shí)驗(yàn)結(jié)果
第二篇:嵌入式系統(tǒng)實(shí)驗(yàn)報(bào)告
廣西工學(xué)院鹿山學(xué)院
實(shí) 驗(yàn) 報(bào) 告
課程名稱(chēng): 嵌入式系統(tǒng)
指導(dǎo)教師: 劉瑞琪 班 級(jí): 自動(dòng)化101 姓 名: 楊杰 學(xué) 號(hào): 20102787 成績(jī)?cè)u(píng)定: 指導(dǎo)教師簽字:
2013年5月25日
實(shí)驗(yàn)一
簡(jiǎn)單的程序
一 實(shí)驗(yàn)?zāi)康模骸?dòng)手實(shí)踐一個(gè)簡(jiǎn)單的字符型設(shè)備驅(qū)動(dòng)程序。、學(xué)習(xí)Linux 驅(qū)動(dòng)程序構(gòu)架。、學(xué)習(xí)在應(yīng)用程序中調(diào)用驅(qū)動(dòng)。
二 實(shí)驗(yàn)內(nèi)容:
編寫(xiě)簡(jiǎn)單的字符型設(shè)備驅(qū)動(dòng)程序。編寫(xiě)相應(yīng)的應(yīng)用程序。
三 實(shí)驗(yàn)設(shè)備:、一套S3C2410RP 嵌入式實(shí)驗(yàn)箱。、安裝Redhat9的宿主PC機(jī),并且配置好 ARM Linux 的開(kāi)發(fā)環(huán)境。
四 實(shí)驗(yàn)步驟
實(shí)驗(yàn)二 CPU GPIO 驅(qū)動(dòng)程序及測(cè)試程序
一、實(shí)驗(yàn)?zāi)康模?/p>
編寫(xiě)第一個(gè)針對(duì)實(shí)際硬件的驅(qū)動(dòng)程序,進(jìn)一步了解驅(qū)動(dòng)程序構(gòu)架。
二、實(shí)驗(yàn)內(nèi)容:、編寫(xiě)S3C2410 GPIO驅(qū)動(dòng)程序。、編寫(xiě)S3C2410 GPIO應(yīng)用程序。、在 LINUX系統(tǒng)中插入自己的驅(qū)動(dòng)程序,調(diào)用它。實(shí)現(xiàn)用 CPU GPIO 控制外部LED,利用S3C2410 核心板上的 LED 驗(yàn)證我們的工作。
三、實(shí)驗(yàn)設(shè)備、一套S3C2410RP 嵌入式實(shí)驗(yàn)箱。、安裝Redhat9的宿主PC機(jī),并且配置好 ARM Linux 的開(kāi)發(fā)環(huán)境。
四、實(shí)驗(yàn)步驟
1、復(fù)制Experiment_KeyHello_driverapl_test文件下的simple_test_driver.c文件到Experiment_KeyGPIO文件夾下,將文件名更改為test.c。
2、打開(kāi)test.c,在else語(yǔ)句后更改函數(shù)語(yǔ)句如下:
3、復(fù)制Experiment_KeyADapl_test文件夾下的Makefile到Experiment_KeyGPIO文件夾下,打開(kāi)并將中的ADC刪除。
4、打開(kāi)Experiment_KeyGPIOdriver文件下的gpio_led.c文件。
5、在ssize_t SIMPLE_GPIO_LED_ioctl函數(shù)下添加如下語(yǔ)句:
if(cmd==0)GPBDAT &= ~(0xf<<5);
if(cmd==1)GPBDAT |=(0xf<<5);如下圖所示:
6、在int __init HW_GPIO_LED_CTL_init函數(shù)下屏蔽for循環(huán),如下圖所示:
保存并關(guān)閉。
7、打開(kāi)終端,并編譯test.c文件和gpio_led.c文件。
8、重新打開(kāi)一個(gè)終端,并按步驟輸入如下語(yǔ)句:
9、依次輸入如下語(yǔ)句:
1、cd..2、ls
3、mknod /dev/hello_ctl c 97 1
4、./test
實(shí)驗(yàn)三 中斷實(shí)驗(yàn)及LED顯示
一、實(shí)驗(yàn)?zāi)康模?/p>
學(xué)習(xí)Linux 系統(tǒng)是如何處理中斷。
二、實(shí)驗(yàn)內(nèi)容:
編寫(xiě)獲取和處理外中斷的驅(qū)動(dòng)程序。
三、實(shí)驗(yàn)設(shè)備:、一套S3C2410RP 嵌入式實(shí)驗(yàn)箱。、安裝Redhat9的宿主PC機(jī),并且配置好 ARM Linux 的開(kāi)發(fā)環(huán)境。
四、實(shí)驗(yàn)步驟
1、打開(kāi)Experiment_KeyGPIOdriver文件下的gpio_led.c文件。
2、在ssize_t SIMPLE_GPIO_LED_ioctl函數(shù)下添加如下語(yǔ)句:
if(cmd==0)GPBDAT &= ~(0xf<<5);
if(cmd==1)GPBDAT |=(0xf<<5);如下圖所示:
3、在int __init HW_GPIO_LED_CTL_init函數(shù)下屏蔽for循環(huán),如下圖所示:
保存并關(guān)閉。
4、打開(kāi)Experiment_KeyInterruptdriver下的Interrupt.c文件,并在其interrupt函數(shù)下添加for語(yǔ)句,如下圖所示:
5、打開(kāi)終端,并編譯Interrupt.c文件和gpio_led.c文件。
6、重新打開(kāi)一個(gè)終端,并按步驟輸入如下語(yǔ)句:
7、依次輸入如下語(yǔ)句:
1、cd /mnt/2410RP_linux/Experiment_Key/Interrupt/driver
2、ls
3、insmod Interrupt.o
實(shí)驗(yàn)四 數(shù)碼管顯示實(shí)驗(yàn)
一、實(shí)驗(yàn)?zāi)康模?/p>
學(xué)習(xí)串并轉(zhuǎn)換的相關(guān)知識(shí),并編寫(xiě)驅(qū)動(dòng)程序。
二、實(shí)驗(yàn)內(nèi)容:
編寫(xiě)針對(duì)zlg7289A 的驅(qū)動(dòng)程序。
三、實(shí)驗(yàn)設(shè)備:、一套S3C2410RP 嵌入式實(shí)驗(yàn)箱。、安裝Redhat9的宿主PC機(jī),并且配置好 ARM Linux 的開(kāi)發(fā)環(huán)境。
四、實(shí)驗(yàn)步驟
1、打開(kāi)Experiment_KeySpi_leddriver文件夾下的spi_led.c
2、并在spi_ledInit函數(shù)下添加如下語(yǔ)句:
保存并關(guān)閉。
3、打開(kāi)終端,并編譯spi_led文件。
4、重新打開(kāi)一個(gè)終端,并輸入如下語(yǔ)句:
實(shí)驗(yàn)五
AD 驅(qū)動(dòng)實(shí)驗(yàn)
一 實(shí)驗(yàn)?zāi)康模?、了解模?shù)轉(zhuǎn)換的基本原理;、掌握模數(shù)轉(zhuǎn)換的編程方法。
二 實(shí)驗(yàn)內(nèi)容:、編程對(duì)模擬量輸入進(jìn)行采集和轉(zhuǎn)換,并將結(jié)果顯示在超級(jí)終端上。、通過(guò)改變模擬量輸入,觀察顯示結(jié)果。
三 實(shí)驗(yàn)設(shè)備:、一套S3C2410RP 嵌入式實(shí)驗(yàn)箱。、安裝Redhat9的宿主PC機(jī),并且配置好 ARM Linux 的開(kāi)發(fā)環(huán)境。
四 實(shí)驗(yàn)步驟
1、在spi_led..c中的simpled ioctl中加入以下程序
2、在testADC中復(fù)制以下程序并修改如下
3、掛載程序
cd /mnt/2410RP_linux/Experiment_Key/spi_led/driver
ls insmod spi_led.o
cd /mnt/2410RP_linux/Experiment_Key/ad/driver
insmod adc.o cd /mnt/2410RP_linux/Experiment_Key/ad/apl_test
ls
mknod /dev/spi c 104 1
ls
./testADC
第三篇:嵌入式系統(tǒng)實(shí)驗(yàn)報(bào)告
嵌入式系統(tǒng)設(shè)計(jì)實(shí)驗(yàn)報(bào)告
班 級(jí):學(xué) 號(hào):姓 名:成 績(jī):指導(dǎo)教師:
20110612 2011061208 李曉虹 武俊鵬、劉書(shū)勇
1.實(shí)驗(yàn)一
1.1 實(shí)驗(yàn)名稱(chēng)
博創(chuàng)UP-3000實(shí)驗(yàn)臺(tái)基本結(jié)構(gòu)使用方法
1.2 實(shí)驗(yàn)?zāi)康?/p>
1.熟悉嵌入式系統(tǒng)開(kāi)發(fā)式流程概述。
2.熟悉UP-net3000實(shí)驗(yàn)平臺(tái)的核心硬件電路和外設(shè)。3.熟悉ARM JTAG的安裝與使用。
1.3 實(shí)驗(yàn)環(huán)境
硬件:ARM 嵌入式開(kāi)發(fā)平臺(tái)、用于ARM7TDMI 的JTAG 仿真器、PC 機(jī)Pentium100 以 上、串口線。
軟件:PC 機(jī)操作系統(tǒng)win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開(kāi)發(fā)
環(huán)境、仿真器驅(qū)動(dòng)程序、超級(jí)終端通訊程序。
1.4 實(shí)驗(yàn)內(nèi)容及要求
1.熟悉嵌入式系統(tǒng)開(kāi)發(fā)式流程概述。
2.熟悉UP-net3000實(shí)驗(yàn)平臺(tái)的核心硬件電路和外設(shè)。3.熟悉ARM JTAG的安裝與使用。
1.5 實(shí)驗(yàn)設(shè)計(jì)與實(shí)驗(yàn)步驟
1.新建超級(jí)終端
2.選擇ARM 開(kāi)發(fā)實(shí)驗(yàn)臺(tái)串口。
完成新建超級(jí)終端的設(shè)置以后,可以選擇超級(jí)終端文件菜單中的保存,將當(dāng)前設(shè)置 3.保存為一個(gè)特定超級(jí)終端到桌面上,以備后用。用串口線將PC 機(jī)串口和平臺(tái)UART0 正確連接后,就可以在超級(jí)終端上看到程序輸出的信息了。4.啟動(dòng)開(kāi)發(fā)板,按住任意鍵,使開(kāi)發(fā)板進(jìn)入BIOS設(shè)置狀態(tài)。
5.在超級(jí)終端的界面上,顯示BIOS版本信息,以及相應(yīng)的測(cè)試指令。操作時(shí),要在PC機(jī)上輸入小寫(xiě)的字母快捷鍵,進(jìn)入到相應(yīng)的功能中去。6.按照超級(jí)終端上的提示信息,進(jìn)行功能的測(cè)試。
1.6 實(shí)驗(yàn)過(guò)程與分析
本次實(shí)驗(yàn)操作起來(lái)并不困難,因?yàn)榇舜螌?shí)驗(yàn)屬于驗(yàn)證型實(shí)驗(yàn),按照實(shí)驗(yàn)資料所給的提示信息,以上面的步驟,即可得到實(shí)驗(yàn)的結(jié)果。進(jìn)入到BIOS界面后,按照超級(jí)終端上的提示信息來(lái)進(jìn)行功能
1.7 實(shí)驗(yàn)結(jié)果總結(jié)
在實(shí)驗(yàn)過(guò)程中,我們進(jìn)行的很順利,沒(méi)有遇到什么問(wèn)題,在超級(jí)終端界面,按提示的快
捷鍵來(lái)測(cè)試對(duì)應(yīng)的功能。如
e:測(cè)試由ZLG7289 驅(qū)動(dòng)的LED 顯示,共分3 步,請(qǐng)看超級(jí)終端提示按任意鍵繼續(xù),同 時(shí)觀察LED 的變化,最后返回主菜單。
b:引導(dǎo)FLASH 中的應(yīng)用程序system.bin。執(zhí)行該功能將退出BIOS 狀態(tài),把控制交給應(yīng) 用程序,等。
1.8 心得體會(huì)
通過(guò)此次實(shí)驗(yàn),我對(duì)于實(shí)驗(yàn)環(huán)境有了初步的了解與認(rèn)識(shí),對(duì)于嵌入式也有了更深一步的認(rèn)識(shí)。同時(shí)實(shí)驗(yàn)過(guò)程中,我學(xué)會(huì)了第一次接觸的超級(jí)終端的使用方法,并能夠熟練掌握,知道其工作的原理。
2.實(shí)驗(yàn)二
2.1 實(shí)驗(yàn)名稱(chēng)
ADS1.2軟件開(kāi)發(fā)環(huán)境使用方法
2.2 實(shí)驗(yàn)?zāi)康?/p>
1.熟悉ADS1.2 開(kāi)發(fā)環(huán)境,學(xué)會(huì)ARM 仿真器的使用。
2.使用ADS 編譯、下載、調(diào)試并跟蹤一段已有的程序,了解嵌入式開(kāi)發(fā)的基本思想和過(guò)程。
2.3 實(shí)驗(yàn)環(huán)境
硬件:ARM 嵌入式開(kāi)發(fā)平臺(tái)、用于ARM7TDMI 的JTAG 仿真器、PC 機(jī)Pentium100 以 上、串口線。
軟件:PC 機(jī)操作系統(tǒng)win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開(kāi)發(fā)
環(huán)境、仿真器驅(qū)動(dòng)程序、超級(jí)終端通訊程序。
2.4 實(shí)驗(yàn)內(nèi)容及要求
掌握AXD Debugger的使用方法,學(xué)習(xí)串行通訊原理,了解串行通訊控制器,閱讀ARM 芯片文檔,掌握ARM 的UART相關(guān)寄存器的功能,熟悉ARM 系統(tǒng)硬件的UART 相關(guān)接口。編程實(shí)現(xiàn)ARM 和計(jì)算機(jī)之間的串行通訊:ARM 監(jiān)視串行口;將接收到的字符再發(fā)送給串口(計(jì)算機(jī)與開(kāi)發(fā)板是通過(guò)超級(jí)終端通訊的);即按PC 鍵盤(pán)通過(guò)超級(jí)終端發(fā)送數(shù)據(jù),開(kāi)發(fā)板將接收到的數(shù)據(jù)再返送給PC,在超級(jí)終端上顯示。
2.5 實(shí)驗(yàn)設(shè)計(jì)與實(shí)驗(yàn)步驟
(1)新建工程,選擇菜單中的Project | Add Files 把和工程相關(guān)的所有文件包括init和startup 子目錄加入到工程中。ADS1.2 不能自動(dòng)按文件類(lèi)別對(duì)這些文件進(jìn)行分類(lèi),需要的話可以執(zhí)行菜單Project | Create Group 創(chuàng)建文件組,然后分別將不同類(lèi)的文件加入到不同的組,以方便管理。(另一種辦法是,在新建工程時(shí)ADS 創(chuàng)建了和工程同名的目錄,在該目錄下按類(lèi)別創(chuàng)建子目錄并存放工程文件。選中所有目錄拖動(dòng)到任務(wù)欄上的ADS 任務(wù)條上,不要松
開(kāi)鼠標(biāo)當(dāng)ADS 窗口恢復(fù)后再拖動(dòng)到工程文件窗口,松開(kāi)鼠標(biāo)。這樣ADS 將以子目錄名建立同名文件組并以此對(duì)文件分類(lèi)。)
(2)雙擊Main.c 打開(kāi)該文件,可以看到Main()函數(shù)的內(nèi)容如下所示。int main(void){ ARMTargetInit();//開(kāi)發(fā)版初始化 LCD_Init();LCD_ChangeMode(DspTxtMode);//轉(zhuǎn)換LCD 顯示模式為文本顯示模式 LCD_Cls();//文本模式下清屏命令
LCD_printf(“Hello world!n”);//向液晶屏輸出 Uart_Printf(“nHello world!n”);//向串口輸出 while(1);}(3)利用上個(gè)實(shí)驗(yàn)中的通訊軟件超級(jí)終端來(lái)將生成的文件放到嵌入式開(kāi)發(fā)平臺(tái)中。(4)重啟實(shí)驗(yàn)臺(tái)即可看到LCD上顯示的“Hello world!” 2.6 實(shí)驗(yàn)過(guò)程與分析
新建工程,然后將所需的工程文件加載打工程目錄下,編譯生成system.bin文件,將文件導(dǎo)入到實(shí)驗(yàn)臺(tái)中,然后重啟實(shí)驗(yàn)臺(tái),即可得到實(shí)驗(yàn)結(jié)果。
2.7 實(shí)驗(yàn)結(jié)果總結(jié)
超級(jí)終端輸出一些相對(duì)應(yīng)的代碼的執(zhí)行結(jié)果。熟悉了ADS1.2 開(kāi)發(fā)環(huán)境以及學(xué)會(huì)了ARM 仿真器的基本使用。使用ADS 編譯、下載、調(diào)試并跟蹤一段已有的程序,并大致了解了嵌入式開(kāi)發(fā)的基本思想和過(guò)程。
2.8 心得體會(huì)
通過(guò)此次實(shí)驗(yàn),我對(duì)于嵌入式開(kāi)發(fā)的基本思想有了一定的了解,嵌入式開(kāi)發(fā)采用的是交叉編譯環(huán)境,所以在一些方面會(huì)有所限制。對(duì)于初學(xué)者來(lái)說(shuō),通過(guò)一兩次實(shí)驗(yàn)結(jié)果的演示就能夠?qū)?shí)驗(yàn)臺(tái)有深入的了解不可能的,所以在后續(xù)的實(shí)驗(yàn)中,我要好好努力,認(rèn)真做好課程實(shí)驗(yàn)為后續(xù)的課程設(shè)計(jì)實(shí)驗(yàn)打下基礎(chǔ)。
3.實(shí)驗(yàn)三
3.1 實(shí)驗(yàn)名稱(chēng)
鍵盤(pán)及LED實(shí)驗(yàn)
3.2 實(shí)驗(yàn)?zāi)康?/p>
1.學(xué)習(xí)鍵盤(pán)及LED 驅(qū)動(dòng)原理。
2.掌握Z(yǔ)LG7289芯片串行接口的使用方法,用ZLG7289芯片驅(qū)動(dòng)17鍵的鍵盤(pán)和8個(gè)共陰極LED。
3.3 實(shí)驗(yàn)環(huán)境
硬件:ARM 嵌入式開(kāi)發(fā)平臺(tái)、用于ARM7TDMI 的JTAG 仿真器、PC 機(jī)Pentium100 以 上、串口線。
軟件:PC 機(jī)操作系統(tǒng)win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開(kāi)
發(fā)
環(huán)境、仿真器驅(qū)動(dòng)程序、超級(jí)終端通訊程序。
3.4 實(shí)驗(yàn)內(nèi)容及要求
編寫(xiě)出一段程序,要求能在LED上顯示出小鍵盤(pán)上按下的4位數(shù)字。
3.5 實(shí)驗(yàn)設(shè)計(jì)與實(shí)驗(yàn)步驟
1.新建工程,將“Exp3 鍵盤(pán)及LED 驅(qū)動(dòng)實(shí)驗(yàn)”中的文件添加到工程。2.定義ZLG7289 寄存器(ZLG7289.h)。3.編寫(xiě)ZLG7289 驅(qū)動(dòng)函數(shù)(ZLG7289.c)。4.定義鍵盤(pán)映射表:(Keyboard16.c)。5.定義鍵值讀取函數(shù)。
6.編寫(xiě)主函數(shù),將按鍵值在數(shù)碼管上顯示。
3.6 實(shí)驗(yàn)過(guò)程與分析
此次實(shí)驗(yàn)中,我們根據(jù)已有實(shí)驗(yàn),進(jìn)行調(diào)試,查看程序的運(yùn)行效果。根據(jù)效果,我們又回到實(shí)驗(yàn)代碼中,然后對(duì)代碼進(jìn)行深入的研究,查看每部分功能所對(duì)應(yīng)的代碼,通過(guò)不斷的調(diào)試編譯,我們最終對(duì)該實(shí)驗(yàn)用到的代碼有了更深的認(rèn)識(shí)。從而能夠按照要求,完成我們自己實(shí)驗(yàn)。
3.7 實(shí)驗(yàn)結(jié)果總結(jié)
通過(guò)小鍵盤(pán)的按鍵,鍵值可以在LED上顯示出來(lái)。并學(xué)習(xí)了鍵盤(pán)及LED 驅(qū)動(dòng)原理以及掌握了ZLG7289芯片串行接口的使用方法,用ZLG7289芯片驅(qū)動(dòng)17鍵的鍵盤(pán)和8個(gè)共陰極LED。
3.8 心得體會(huì)
在這次實(shí)驗(yàn)中讓我對(duì)嵌入式的實(shí)驗(yàn)箱有了進(jìn)一步的認(rèn)識(shí),并且進(jìn)一步了解的ARM實(shí)驗(yàn)的原理和實(shí)驗(yàn)情況,能夠?qū)υ创a進(jìn)行正確了理解。并且能修改這些源代碼能夠使其工作在自己的預(yù)期的工作狀態(tài)和輸出自己想要的結(jié)果
4.實(shí)驗(yàn)四
4.1 實(shí)驗(yàn)名稱(chēng)
電機(jī)轉(zhuǎn)動(dòng)控制及中斷實(shí)驗(yàn)
4.2 實(shí)驗(yàn)?zāi)康?/p>
1.熟悉ARM本身自帶的六路即三對(duì)PWM,掌握相應(yīng)寄存器的配置。
2.編程實(shí)現(xiàn)ARM系統(tǒng)的PWM輸出和I/O輸出,前者用于控制直流電機(jī),后者用于控制步進(jìn)電機(jī)。
3.了解直流電機(jī)和步進(jìn)電機(jī)的工作原理,學(xué)會(huì)用軟件的方法實(shí)現(xiàn)步進(jìn)電機(jī)的脈沖分配,即用軟件的方法代替硬件的脈沖分配器。
4.了解44B0處理器上中斷的應(yīng)用。
5.學(xué)習(xí)在44B0處理器上中斷的應(yīng)用。
6.進(jìn)一步熟悉平臺(tái)外圍硬件及其驅(qū)動(dòng)程序的編寫(xiě)。
4.3 實(shí)驗(yàn)環(huán)境
硬件:ARM 嵌入式開(kāi)發(fā)平臺(tái)、用于ARM7TDMI 的JTAG 仿真器、PC 機(jī)Pentium100 以 上、串口線。
軟件:PC 機(jī)操作系統(tǒng)win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開(kāi)發(fā)環(huán)境、仿真器驅(qū)動(dòng)程序、超級(jí)終端通訊程序。
4.4 實(shí)驗(yàn)內(nèi)容及要求
1.編程實(shí)現(xiàn)ARM芯片的一對(duì)PWM輸出用于控制直流電機(jī)的轉(zhuǎn)動(dòng),通過(guò)A/D旋鈕控制其轉(zhuǎn)動(dòng)方式。
2.編程實(shí)現(xiàn)ARM的四路I/O通道,實(shí)現(xiàn)環(huán)形脈沖分配用于控制步進(jìn)電機(jī)的轉(zhuǎn)動(dòng),通過(guò)A/D旋鈕控制步進(jìn)電機(jī)的轉(zhuǎn)角。
3.通過(guò)鍵盤(pán)控制直流電機(jī)與步進(jìn)電機(jī)的切換。4.設(shè)置并啟動(dòng)定時(shí)器。
5.設(shè)置中斷,編寫(xiě)定時(shí)器中斷服務(wù)程序,對(duì)中斷次數(shù)進(jìn)行計(jì)數(shù)并在LED上顯示結(jié)果。
4.5 實(shí)驗(yàn)設(shè)計(jì)與實(shí)驗(yàn)步驟
1.添加并打開(kāi)工程。
2.進(jìn)行直流電機(jī)初始化設(shè)置和代碼編寫(xiě)。3.進(jìn)行步進(jìn)電機(jī)初始化設(shè)置和代碼編寫(xiě)。
4.對(duì)Timer3編程,編寫(xiě)定時(shí)器中斷服務(wù)程序,完成對(duì)中斷次數(shù)的計(jì)數(shù)。5.編寫(xiě)LED計(jì)數(shù)顯示函數(shù),使LED能正確計(jì)數(shù)并顯示0-9999。6.編寫(xiě)中斷初始化函數(shù)和中斷響應(yīng)函數(shù)。7.終端下載測(cè)試。
4.6 實(shí)驗(yàn)過(guò)程與分析
1.對(duì)直流電機(jī)進(jìn)行編程和測(cè)試,掌握轉(zhuǎn)速和旋轉(zhuǎn)方向的設(shè)定方法。2.對(duì)步進(jìn)電機(jī)進(jìn)行編程和測(cè)試,掌握ARM的四路I/O通道,實(shí)現(xiàn)環(huán)形脈沖分配用于控制步進(jìn)電機(jī)的轉(zhuǎn)動(dòng),通過(guò)A/D旋鈕控制步進(jìn)電機(jī)的轉(zhuǎn)角。
3.對(duì)主函數(shù)進(jìn)行編程,用鍵盤(pán)響應(yīng)直流電機(jī)與步進(jìn)電機(jī)的切換控制。
4.掌握中斷相關(guān)語(yǔ)句的應(yīng)用,弄清定義的中斷向量、中斷向量號(hào),編寫(xiě)中斷響應(yīng)函數(shù),并完成中斷響應(yīng)控制。
4.7 實(shí)驗(yàn)結(jié)果總結(jié)
實(shí)現(xiàn)了直流電機(jī)與步進(jìn)電機(jī)的基本設(shè)置和控制,可以通過(guò)鍵盤(pán)控制電機(jī)之間的切換。完成了中斷的響應(yīng)和定時(shí)中斷。
在通過(guò)本次實(shí)驗(yàn),我初步了解的實(shí)驗(yàn)的目的所在,并且利用所給的源代碼能夠,調(diào)試出所預(yù)期的結(jié)果,而且能夠根據(jù)已給的源代碼修改得到所需的結(jié)果。
4.8 心得體會(huì)
通過(guò)本次實(shí)驗(yàn),掌握了電機(jī)工作原理,了解了中斷的意義和實(shí)現(xiàn)方法,實(shí)現(xiàn)了簡(jiǎn)單了中
斷處理程序,更加了解了中斷的意義。
5.實(shí)驗(yàn)五
5.1 實(shí)驗(yàn)名稱(chēng)
LCD驅(qū)動(dòng)控制實(shí)驗(yàn)及觸摸屏驅(qū)動(dòng)實(shí)驗(yàn)
5.2 實(shí)驗(yàn)?zāi)康?/p>
1.了解觸摸屏的基本概念與原理。
2.理解觸摸屏與LCD的關(guān)系。3.編程實(shí)現(xiàn)對(duì)觸摸屏的控制。
5.3 實(shí)驗(yàn)環(huán)境
硬件:ARM 嵌入式開(kāi)發(fā)平臺(tái)、用于ARM7TDMI 的JTAG 仿真器、PC 機(jī)Pentium100 以 上、串口線。
軟件:PC 機(jī)操作系統(tǒng)win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開(kāi)發(fā)環(huán)境、仿真器驅(qū)動(dòng)程序、超級(jí)終端通訊程序。
5.4 實(shí)驗(yàn)內(nèi)容及要求
1.了解觸摸屏基本原理,理解對(duì)觸摸屏進(jìn)行輸出標(biāo)定、與LCD顯示器配合的過(guò)程。2.通過(guò)編程實(shí)現(xiàn)觸摸兩點(diǎn)自動(dòng)在兩點(diǎn)間劃直線。3.通過(guò)編程實(shí)現(xiàn)在觸摸屏上動(dòng)態(tài)畫(huà)出曲線。
5.5 實(shí)驗(yàn)設(shè)計(jì)與實(shí)驗(yàn)步驟
1.添加并打開(kāi)工程。
2.在頭文件中定義宏和常量及驅(qū)動(dòng)函數(shù)。3.校準(zhǔn)觸摸屏坐標(biāo),進(jìn)行坐標(biāo)轉(zhuǎn)換。4.實(shí)現(xiàn)觸屏取點(diǎn)并顯示功能。5.實(shí)現(xiàn)兩點(diǎn)間自動(dòng)劃線功能。6.實(shí)現(xiàn)觸摸屏動(dòng)態(tài)劃線功能。
5.6 實(shí)驗(yàn)過(guò)程與分析
1.在定義觸屏響應(yīng)功能的函數(shù)中對(duì)點(diǎn)擊觸屏進(jìn)行響應(yīng)函數(shù)的修改,在其中添加修改點(diǎn)顏色的函數(shù),修改得到的觸摸點(diǎn)的顏色,并顯示在LCD上。
2.獲取第一個(gè)點(diǎn)坐標(biāo)并儲(chǔ)存,獲取第二個(gè)點(diǎn)坐標(biāo)并儲(chǔ)存,編寫(xiě)劃線函數(shù),取得兩點(diǎn)間直線上所有點(diǎn)的坐標(biāo),并對(duì)其改變顏色,顯示在LCD上,即完成劃直線功能。
3.將劃線函數(shù)應(yīng)用到響應(yīng)觸屏移動(dòng)消息的函數(shù)下,即可對(duì)連續(xù)獲得的觸摸坐標(biāo)進(jìn)行連續(xù)的畫(huà)短直線,連接成曲線,完成動(dòng)態(tài)劃線功能。
5.7 實(shí)驗(yàn)結(jié)果總結(jié)
了解了觸摸屏響應(yīng)動(dòng)作消息的函數(shù)的工作原理,通過(guò)修改實(shí)現(xiàn)了觸摸屏響應(yīng)不同動(dòng)作進(jìn)行畫(huà)點(diǎn)、劃線、動(dòng)態(tài)劃線的功能。
5.8 心得體會(huì)
通過(guò)本次實(shí)驗(yàn),使我了解了怎么在一塊嵌入式實(shí)驗(yàn)箱 通過(guò)編程控制實(shí)驗(yàn)箱上得硬件,比如在本次實(shí)驗(yàn)中的控制LCD屏幕就是,在屏幕上點(diǎn)擊,然后得到在LCD屏上點(diǎn)擊的位置。本次實(shí)驗(yàn)初步完成了實(shí)驗(yàn)結(jié)果。
6.實(shí)驗(yàn)六
6.1 實(shí)驗(yàn)名稱(chēng)
UCOS-Ⅱ在ARM微處理器上的裁剪
6.2 實(shí)驗(yàn)?zāi)康?/p>
1.了解UCOS-Ⅱ內(nèi)核的主要結(jié)構(gòu)。
2.掌握UCOS-Ⅱ裁剪的基本原理與嵌入式編程實(shí)現(xiàn)方法。3.學(xué)習(xí)如何根據(jù)具體情況對(duì)UCOS-Ⅱ操作系統(tǒng)進(jìn)行裁剪。
4.通過(guò)對(duì)UCOS-Ⅱ配置文件(OS_CFG.H)中相關(guān)的配置常量進(jìn)行設(shè)置,實(shí)現(xiàn)對(duì)UCOS-Ⅱ的裁剪。
6.3 實(shí)驗(yàn)環(huán)境
硬件:ARM 嵌入式開(kāi)發(fā)平臺(tái)、用于ARM7TDMI 的JTAG 仿真器、PC 機(jī)Pentium100 以 上、串口線。
軟件:PC 機(jī)操作系統(tǒng)win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開(kāi)發(fā)環(huán)境、仿真器驅(qū)動(dòng)程序、超級(jí)終端通訊程序。
6.4 實(shí)驗(yàn)內(nèi)容及要求
對(duì)UCOS-Ⅱ內(nèi)核進(jìn)行裁剪并移植到ARM7微處理器上。
6.5 實(shí)驗(yàn)設(shè)計(jì)與實(shí)驗(yàn)步驟
編輯OS_CFG.H文件。OS_CFG.H文件中的內(nèi)容可分為兩大類(lèi):服務(wù)功能的配置和數(shù)據(jù)結(jié)構(gòu)的配置。
一.服務(wù)功能的配置:
根據(jù)程序中的實(shí)際情況,保留自己要用的系統(tǒng)服務(wù)功能,刪除自己不需要的服務(wù)功能。進(jìn)行合理配置后,是我們自己系統(tǒng)的目標(biāo)代碼比較緊湊,從而降低了對(duì)程序代碼存儲(chǔ)空間的要求。如果代碼存儲(chǔ)空間足夠大的話,那就將全部系統(tǒng)服務(wù)功能全部配置為1。不需要考慮功能裁剪。
二.?dāng)?shù)據(jù)結(jié)構(gòu)功能的配置: 與任務(wù)有關(guān)的數(shù)據(jù)結(jié)構(gòu) 1.OS_MAX_TASKS 作用:設(shè)置用戶程序中可以使用的最多任務(wù)數(shù)。說(shuō)明:該值不能超過(guò)62.舉例: 若程序中用到了三個(gè)任務(wù),則該值的最小值 2.OS_LOWEST_PRIO 作用:設(shè)置程序中最低任務(wù)的優(yōu)先級(jí)。
說(shuō)明: 設(shè)定該值可以節(jié)省操作系統(tǒng)使用RAM的空間。任務(wù)的最低優(yōu)先級(jí)和最大任務(wù)數(shù)是沒(méi)有直接關(guān)系的。
6.6 實(shí)驗(yàn)過(guò)程與分析
按照實(shí)驗(yàn)指導(dǎo)書(shū)上的步驟進(jìn)行,得到了要求的系統(tǒng)。
6.7 實(shí)驗(yàn)結(jié)果總結(jié)
按照要求進(jìn)行了裁剪,得到了滿足需要又緊湊的應(yīng)用軟件系統(tǒng)。
6.8 心得體會(huì)
了解了UCOS-Ⅱ內(nèi)核的主要結(jié)構(gòu),掌握了UCOS-Ⅱ裁剪的基本原理與嵌入式編程實(shí)現(xiàn)方法,學(xué)會(huì)了如何根據(jù)具體情況對(duì)UCOS-Ⅱ操作系統(tǒng)進(jìn)行裁剪
7.實(shí)驗(yàn)七
7.1 實(shí)驗(yàn)名稱(chēng)
ucos-II移植實(shí)驗(yàn)
7.2 實(shí)驗(yàn)?zāi)康?/p>
1.了解UCOS-Ⅱ內(nèi)核的主要結(jié)構(gòu)。
2.掌握將UCOS-Ⅱ內(nèi)核移植到ARM7處理器上的基本方法。
7.3 實(shí)驗(yàn)環(huán)境
硬件:ARM 嵌入式開(kāi)發(fā)平臺(tái)、用于ARM7TDMI 的JTAG 仿真器、PC 機(jī)Pentium100 以 上、串口線。
軟件:PC 機(jī)操作系統(tǒng)win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開(kāi)發(fā)環(huán)境、仿真器驅(qū)動(dòng)程序、超級(jí)終端通訊程序。
7.4 實(shí)驗(yàn)內(nèi)容及要求
1.將UCOS-Ⅱ內(nèi)核進(jìn)行移植到ARM7微處理器上。
2.編寫(xiě)兩個(gè)簡(jiǎn)單任務(wù),在超級(jí)終端上觀察兩個(gè)任務(wù)的切換。
7.5 實(shí)驗(yàn)設(shè)計(jì)與實(shí)驗(yàn)步驟
1.該實(shí)驗(yàn)的文件分為兩類(lèi),其一是STARTUP 目錄下的系統(tǒng)初始化、配置等文件,其二是uCOS-II 的全部源碼,arch 目錄下的3 個(gè)文件是和處理器架構(gòu)相關(guān)的。
2.設(shè)置os_cpu.h 中與處理器和編譯器相關(guān)的代碼
3.用C 語(yǔ)言編寫(xiě)6 個(gè)操作系統(tǒng)相關(guān)的函數(shù)(OS_CPU_C.C)4.用匯編語(yǔ)言編寫(xiě)4 個(gè)與處理器相關(guān)的函數(shù)(OS_CPU.ASM)5.編寫(xiě)一個(gè)簡(jiǎn)單的多任務(wù)程序來(lái)測(cè)試一下移植是否成功。
為了使 uCOS-II 可以正常運(yùn)行,除了上述必須的移植工作外,硬件初始化和配置文件也是必須的。STARTUP 目錄下的文件還包括中斷處理,時(shí)鐘,串口通信等基本功能函數(shù)。在文件 main.c 中給出了應(yīng)用程序的基本框架,包括初始化和多任務(wù)的創(chuàng)建,啟動(dòng)等。任務(wù)
創(chuàng)建方法如下:
①在程序開(kāi)頭定義任務(wù)堆棧,任務(wù)函數(shù)聲明和任務(wù)優(yōu)先級(jí) ②在main()函數(shù)中調(diào)用OSStart()函數(shù)之前用下列語(yǔ)句創(chuàng)建任務(wù) ③編寫(xiě)任務(wù)函數(shù)內(nèi)容
6.編譯并下載移植后的uCOS-II 所有的源代碼都準(zhǔn)備好后就可以進(jìn)行編譯了。在ADS 環(huán)境下需要設(shè)置工程的訪問(wèn)路徑。從菜單Edit | Debug Settings 進(jìn)入設(shè)置對(duì)話框,在Target | Access Paths 中選擇User Paths 并選上Always search user paths。然后點(diǎn)Add 按鈕添加路徑ucos-ii 和arch。這主要是設(shè)置編譯器處理文件包含時(shí)的搜索范圍。按照實(shí)驗(yàn)一的方法可以對(duì)編譯后的代碼進(jìn)行調(diào)試或下載到平臺(tái)的電子硬盤(pán)中。這個(gè)實(shí)驗(yàn)從結(jié)構(gòu)上看和其他的實(shí)驗(yàn)沒(méi)有多大區(qū)別,同樣生成可執(zhí)行文件system.bin。可以在平臺(tái)BIOS中激活電子硬盤(pán),然后把system.bin 拷貝進(jìn)去,重啟平臺(tái),然后在超級(jí)終端上觀察結(jié)果。
7.6 實(shí)驗(yàn)過(guò)程與分析
操作系統(tǒng)相關(guān)的函數(shù):(1)OSTaskStkInit OSTaskCreate()和OSTaskCreateExt()通過(guò)調(diào)用OSTaskStkInit()來(lái)初始化任務(wù)的堆棧結(jié)構(gòu)。因此,堆??雌饋?lái)就像剛發(fā)生過(guò)中斷并將所有的寄存器保存到堆棧中的情形一樣。圖12A-2 顯示了OSTaskStkInt()放到正被建立的任務(wù)堆棧中的東西。這里我們定義了堆棧是從上往下 長(zhǎng)的。在用戶建立任務(wù)的時(shí)候,用戶傳遞任務(wù)的地址,pdata 指針,任務(wù)的堆棧棧頂和任務(wù)的優(yōu)先級(jí)給OSTaskCreate()和OSTaskCreateExt()。一旦用戶初始化了堆棧,OSTaskStkInit()就需要返回堆棧指針?biāo)傅牡刂?。OSTaskCreate()和OSTaskCreateExt()會(huì)獲得該地址并將它保存到任務(wù)控制塊(OS_TCB)中。
(2)OSTaskCreateHook 當(dāng)用OSTaskCreate()和OSTaskCreateExt()建立任務(wù)的時(shí)候就會(huì)調(diào)用OSTaskCreateHook()。該函數(shù)允許用戶或使用移植實(shí)例的用戶擴(kuò)展uCOS-II 功能。當(dāng)uCOS-II 設(shè)置完了自己的內(nèi)部結(jié)構(gòu)后,會(huì)在調(diào)用任務(wù)調(diào)度程序之前調(diào)用OSTaskCreateHook()。該函數(shù)被調(diào)用的時(shí)候中斷是禁止的。因此用戶應(yīng)盡量減少該函數(shù)中的代碼以縮短中斷的響應(yīng)時(shí)間。當(dāng) OSTaskCreateHook()被調(diào)用的時(shí)候,它會(huì)收到指向已建立任務(wù)的OS_TCB 的指針,這 樣它就可以訪問(wèn)所有的結(jié)構(gòu)成員了。函數(shù)原型:void OSTaskCreateHook(OS_TCB *ptcb)
(3)OSTaskDelHook 當(dāng)任務(wù)被刪除的時(shí)候就會(huì)調(diào)用OSTaskDelHook()。該函數(shù)在把任務(wù)從uCOS-II 的內(nèi)部任 務(wù)鏈表中解開(kāi)之前被調(diào)用。當(dāng)OSTaskDelHook()被調(diào)用的時(shí)候,它會(huì)收到指向正被刪除任務(wù) 的OS_TCB 的指針,這樣它就可以訪問(wèn)所有的結(jié)構(gòu)成員了。OSTaskDelHook()可以來(lái)檢驗(yàn)TCB擴(kuò)展是否被建立(一個(gè)非空指針)并進(jìn)行一些清除操作。函數(shù)原型:void OSTaskDelHook(OS_TCB *ptcb)(4)OSTaskSwHook 當(dāng)發(fā)生任務(wù)切換的時(shí)候就會(huì)調(diào)用OSTaskSwHook()。OSTaskSwHook()可以直接訪問(wèn) OSTCBCur 和OSTCBHighRdy,因?yàn)樗鼈兪侨肿兞俊STCBCur 指向被切換出去的任務(wù) OS_TCB,而OSTCBHighRdy 指向新任務(wù)OS_TCB。注意在調(diào)用OSTaskSwHook()期間中斷 一直是被禁止的。因此用戶應(yīng)盡量減少該函數(shù)中的代碼以縮短中斷的響應(yīng)時(shí)間。函數(shù)原型:void OSTaskSwHook(void)
(5)OSTaskStatHook OSTaskStatHook()每秒鐘都會(huì)被OSTaskStat()調(diào)用一次。用戶可以用OSTaskStatHook()
來(lái)擴(kuò)展統(tǒng)計(jì)功能。例如,用戶可以保持并顯示每個(gè)任務(wù)的執(zhí)行時(shí)間,每個(gè)任務(wù)所用的CPU 份額,以及每個(gè)任務(wù)執(zhí)行的頻率等。函數(shù)原型:void OSTaskStatHook(void)(6)OSTimeTickHook OSTimeTickHook()在每個(gè)時(shí)鐘節(jié)拍都會(huì)被OSTaskTick()調(diào)用。實(shí)際上OSTimeTickHook()是在節(jié)拍被uCOS-II 真正處理,并通知用戶的移植實(shí)例或應(yīng)用程序之前被調(diào)用的。函數(shù)原型:void OSTimeTickHook(void)
7.7 實(shí)驗(yàn)結(jié)果總結(jié)
在超級(jí)終端上輸出輪流交替run task1和run task2,表明系統(tǒng)正在不斷交替運(yùn)行2個(gè)任務(wù)。
7.8 心得體會(huì)
在這個(gè)實(shí)驗(yàn)中我們初步了解和測(cè)試了實(shí)驗(yàn)的內(nèi)容和源代碼實(shí)驗(yàn)結(jié)果基本上符合預(yù)期的要求。了解了μC/OS-II 內(nèi)核的主要結(jié)構(gòu)和ARM7處理器結(jié)構(gòu),掌握了將μC/OS-II 內(nèi)核移植到ARM 7 處理器上的基本原理與嵌入式編程實(shí)現(xiàn)方法。
8.實(shí)驗(yàn)八
8.1 實(shí)驗(yàn)名稱(chēng)
各接口模塊相互銜接綜合實(shí)驗(yàn)
8.2 實(shí)驗(yàn)?zāi)康?/p>
利用前7次實(shí)驗(yàn)所學(xué)的知識(shí),綜合設(shè)計(jì)一個(gè)至少含有5個(gè)模塊的實(shí)驗(yàn)。
8.3 實(shí)驗(yàn)環(huán)境
硬件:ARM 嵌入式開(kāi)發(fā)平臺(tái)、用于ARM7TDMI 的JTAG 仿真器、PC 機(jī)Pentium100 以 上、串口線。
軟件:PC 機(jī)操作系統(tǒng)win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開(kāi)發(fā)環(huán)境、仿真器驅(qū)動(dòng)程序、超級(jí)終端通訊程序。
8.4 實(shí)驗(yàn)內(nèi)容及要求
1.回顧串口、鍵盤(pán)、LED接口、A/D、電機(jī)轉(zhuǎn)動(dòng)、定時(shí)器中斷、LCD接口及觸摸屏驅(qū)動(dòng)控制接口模塊驅(qū)動(dòng)設(shè)計(jì)及開(kāi)發(fā)方法。
2.綜合應(yīng)用以上全部或者部分模塊,實(shí)現(xiàn)一個(gè)嵌入式綜合應(yīng)用系統(tǒng),要求至少5個(gè)模塊。
3.盡量使綜合應(yīng)用具有合理功能。
8.5 實(shí)驗(yàn)設(shè)計(jì)與實(shí)驗(yàn)步驟
1.新建工程,添加所需的文件。
2.編寫(xiě)計(jì)算器的計(jì)算程序caculator.c以及caculator.h文件。3.編寫(xiě)音樂(lè)播放文件play.c以及play.h文件。
4.修改鍵盤(pán)映射表讓鍵盤(pán)上的數(shù)字與LCD與LED屏幕上顯示的數(shù)字相對(duì)應(yīng)。5.對(duì)輸出在LCD屏幕上的顯示結(jié)構(gòu)進(jìn)行設(shè)計(jì)
6.進(jìn)行裁剪和移植功能設(shè)計(jì)和完成。編譯生成system.bin文件,將文件拷貝至實(shí)驗(yàn)臺(tái)內(nèi),重啟實(shí)驗(yàn)臺(tái)即可看到實(shí)驗(yàn)效果
8.6 實(shí)驗(yàn)過(guò)程與分析
1.完成10以內(nèi)的加減乘除的計(jì)算功能,通過(guò)鍵盤(pán)輸入,可在LCD屏幕上顯示輸入的表達(dá)式以及得到的輸出結(jié)果。如“2+3=5”。
2.按任務(wù)切換鍵,實(shí)現(xiàn)任務(wù)的切換。3.任務(wù)被切換到播放音樂(lè)的任務(wù)中去。
4.任務(wù)切換過(guò)程將會(huì)在串口的超級(jí)終端界面有所顯示,同時(shí)我們?cè)O(shè)置的將LCD上顯示的結(jié)果同步到超級(jí)終端上。實(shí)現(xiàn)串口通信。
5.利用到了直流電機(jī),如果運(yùn)算范圍超出我們規(guī)定的運(yùn)算范圍,則電機(jī)轉(zhuǎn)動(dòng),來(lái)提示錯(cuò)誤。
6.實(shí)現(xiàn)裁剪與移植功能。
8.7 實(shí)驗(yàn)結(jié)果總結(jié)
在這次實(shí)驗(yàn)中,我們利用前面所學(xué)習(xí)的知識(shí),綜合利用在此次實(shí)驗(yàn)中,我們利用了前面好所學(xué)知識(shí)中的6個(gè)模塊,分別是串口通訊,鍵盤(pán)控制,LED與LCD的輸出,電機(jī)控制,以及裁剪與移植的功能。通過(guò)這些功能的結(jié)合,我們實(shí)現(xiàn)自己所設(shè)計(jì)的實(shí)驗(yàn)的功能。
8.8 心得體會(huì)
在此次實(shí)驗(yàn)中,我們遇到了一些問(wèn)題但是過(guò)程中遇到了不少問(wèn)題,說(shuō)明對(duì)實(shí)驗(yàn)原理和語(yǔ)句編寫(xiě)還不是很熟悉。總的來(lái)說(shuō),通過(guò)這段時(shí)間的訓(xùn)練,我也學(xué)會(huì)了不少東西,了解了ARM的基本結(jié)構(gòu),功能等。
9.實(shí)驗(yàn)總結(jié)與心得體會(huì)
通過(guò)這次為期一周的嵌入式課程實(shí)驗(yàn),我對(duì)于嵌入式有了更加深刻的了解與認(rèn)識(shí)。我是第一次接觸嵌入式,以前對(duì)于嵌入式的知識(shí)了解甚少,但是通過(guò)此次實(shí)驗(yàn),我不僅了解了嵌入式,也學(xué)會(huì)了許多關(guān)于嵌入式方面的知識(shí)。
通過(guò)前面的基礎(chǔ)實(shí)驗(yàn),我們對(duì)于ARM環(huán)境有了更深的了解,掌握了博創(chuàng)平臺(tái)的使用方法,例如如何使用小鍵盤(pán),如何使用LCD、LED屏幕,如何控制終端,如何進(jìn)行多任務(wù)之間的切換等等。通過(guò)這幾次的基礎(chǔ)課程實(shí)驗(yàn),我們最后出了計(jì)算器,能夠?qū)崿F(xiàn)10以內(nèi)的加減乘除,在此基礎(chǔ)上我們利用多任務(wù),實(shí)現(xiàn)播放音樂(lè)與計(jì)算的切換,還利用點(diǎn)擊的轉(zhuǎn)動(dòng)來(lái)提示運(yùn)算過(guò)程中出現(xiàn)的問(wèn)題。
通過(guò)這幾次實(shí)驗(yàn),為我們以后的課程設(shè)計(jì)實(shí)驗(yàn)打下了堅(jiān)實(shí)的基礎(chǔ),相信有了這幾天系統(tǒng)實(shí)驗(yàn)的培訓(xùn),我們的課程設(shè)計(jì)實(shí)驗(yàn)做起來(lái)會(huì)更加輕松。
第四篇:嵌入式系統(tǒng)實(shí)驗(yàn)報(bào)告
嵌入式系統(tǒng)設(shè)計(jì)實(shí)驗(yàn)報(bào)告
班 級(jí): 學(xué) 號(hào): 姓 名: 成 績(jī): 指導(dǎo)教師:
1.實(shí)驗(yàn)一
1.1 實(shí)驗(yàn)名稱(chēng)
博創(chuàng)UP-3000實(shí)驗(yàn)臺(tái)基本結(jié)構(gòu)及使用方法
1.2 實(shí)驗(yàn)?zāi)康?/p>
1.學(xué)習(xí)嵌入式系統(tǒng)開(kāi)發(fā)流程。
2.熟悉UP-net3000實(shí)驗(yàn)平臺(tái)的核心硬件電路和外設(shè)。
3.增加對(duì)各個(gè)外設(shè)的了解,為今后各個(gè)接口實(shí)驗(yàn)打下基礎(chǔ)。
1.3 實(shí)驗(yàn)環(huán)境
博創(chuàng)UP-NETARM3000 嵌入式開(kāi)發(fā)平臺(tái)
1.4 實(shí)驗(yàn)內(nèi)容及要求
(1)嵌入式系統(tǒng)開(kāi)發(fā)流程概述
(2)熟悉UP-net3000實(shí)驗(yàn)平臺(tái)的核心硬件電路和外設(shè)(3)ARM JTAG的安裝與使用
(4)通過(guò)操作系統(tǒng)自帶的通訊軟件超級(jí)終端,檢驗(yàn)各個(gè)外設(shè)的工作狀態(tài)(5)通過(guò)本次課程對(duì)各個(gè)外設(shè)的了解,為今后各個(gè)接口實(shí)驗(yàn)打下基礎(chǔ)
1.5 實(shí)驗(yàn)設(shè)計(jì)與實(shí)驗(yàn)步驟
1.硬件安裝 2.軟件安裝
(1)超級(jí)終端:
運(yùn)行Windows 系統(tǒng)下的超級(jí)終端(HyperTerminal)應(yīng)用程序,新建一個(gè)通信終端;在接下來(lái)的對(duì)話框中選擇 ARM開(kāi)發(fā)平臺(tái)實(shí)際連接的PC機(jī)串口;完成新建超級(jí)終端的設(shè)置以后,可以選擇超級(jí)終端文件菜單中的保存,將當(dāng)前設(shè)置保存為一個(gè)特定超級(jí)終端到桌面上,以備后用。
(2)JTAG 驅(qū)動(dòng)程序的安裝:
執(zhí)行armJtag目錄下armJtagSetup.exe程序,選擇安裝目錄,安裝 JTAG 軟件。
1.6 實(shí)驗(yàn)過(guò)程與分析
(1)了解嵌入式系統(tǒng)開(kāi)發(fā)流程(2)對(duì)硬件的安裝(3)對(duì)軟件的安裝
1.7 實(shí)驗(yàn)結(jié)果總結(jié)
通過(guò)本次實(shí)驗(yàn)對(duì)嵌入式系統(tǒng)開(kāi)發(fā)流程進(jìn)行了了解,并且對(duì)硬件環(huán)境和軟件環(huán)境進(jìn)行了安裝配置,通過(guò)本次實(shí)驗(yàn)對(duì)以后的接口實(shí)驗(yàn)打了基礎(chǔ)。
1.8 心得體會(huì)
通過(guò)本次實(shí)驗(yàn)對(duì)嵌入式實(shí)驗(yàn)有了初步的了解,對(duì)基本開(kāi)發(fā)流程也有了初步的了解。
2.實(shí)驗(yàn)二
2.1 實(shí)驗(yàn)名稱(chēng)
ADS1.2軟件開(kāi)發(fā)環(huán)境使用方法
2.2 實(shí)驗(yàn)?zāi)康?/p>
熟悉ADS1.2開(kāi)發(fā)環(huán)境,學(xué)會(huì) ARM仿真器的使用。使用 ADS 編譯、下載、調(diào)試并跟蹤一段已有的程序,了解嵌入式開(kāi)發(fā)的基本思想和過(guò)程。
2.3 實(shí)驗(yàn)環(huán)境
(1)ADS1.2開(kāi)發(fā)環(huán)境
(2)博創(chuàng)UP-NETARM3000 嵌入式開(kāi)發(fā)平臺(tái)(3)PC(4)串口線
2.4 實(shí)驗(yàn)內(nèi)容及要求
本次實(shí)驗(yàn)使用ADS 集成開(kāi)發(fā)環(huán)境,新建一個(gè)簡(jiǎn)單的工程文件,并編譯這個(gè)工程文件。學(xué)習(xí)ARM仿真器的使用和開(kāi)發(fā)環(huán)境的設(shè)置。下載已經(jīng)編譯好的文件到嵌入式控制器中運(yùn)行。學(xué)會(huì)在程序中設(shè)置斷點(diǎn),觀察系統(tǒng)內(nèi)存和變量,為調(diào)試應(yīng)用程序打下基礎(chǔ)。
2.5 實(shí)驗(yàn)設(shè)計(jì)與實(shí)驗(yàn)步驟
(1)運(yùn)行ADS1.2開(kāi)發(fā)環(huán)境(2)新建工程文件(3)編譯工程文件
(4)下載編譯好的文件到嵌入式控制器中運(yùn)行
2.6 實(shí)驗(yàn)過(guò)程與分析
(1)實(shí)現(xiàn)Hello World!
最終在輸出了Hello World(2)編程實(shí)現(xiàn)ARM 和計(jì)算機(jī)之間的串行通訊
實(shí)現(xiàn)了串口通信,用ARM監(jiān)視串口,接收到的字符串由ARM通過(guò)串口發(fā)送給超級(jí)終端,最終在超級(jí)終端上顯示了按下的鍵。學(xué)習(xí)了串行通訊原理,了解串行通訊控制器,閱讀ARM 芯片文檔,掌握ARM 的UART相關(guān)寄存器的功能,熟悉ARM 系統(tǒng)硬件的UART 相關(guān)接口。
2.7 實(shí)驗(yàn)結(jié)果總結(jié)
對(duì)ADS 1.2開(kāi)發(fā)環(huán)境使用和AXD Debugger使用方法有了初步的了解,基本成功運(yùn)行了編譯好的工程文件。
2.8 心得體會(huì)
學(xué)習(xí)了ADS1.2開(kāi)發(fā)環(huán)境的使用方法和調(diào)試方法。使用 ADS 編譯、下載、調(diào)試并跟蹤一段已有的程序,了解了嵌入式開(kāi)發(fā)的基本思想和過(guò)程。
3.實(shí)驗(yàn)三
3.1 實(shí)驗(yàn)名稱(chēng)
鍵盤(pán)控制方法及LED驅(qū)動(dòng)設(shè)計(jì)
3.2 實(shí)驗(yàn)?zāi)康?/p>
熟悉ZLG7289芯片的內(nèi)部結(jié)構(gòu),掌握用ZLG7289驅(qū)動(dòng)鍵盤(pán)和LED的方法,掌握ARM匯編語(yǔ)言和C語(yǔ)言的編程方法編寫(xiě)出一段程序,要求能在LED上顯示出小鍵盤(pán)上按下的4位數(shù)字。
3.3 實(shí)驗(yàn)環(huán)境
(1)ADS1.2開(kāi)發(fā)環(huán)境
(2)博創(chuàng)UP-NETARM3000 嵌入式開(kāi)發(fā)平臺(tái)(3)PC(4)串口線
3.4 實(shí)驗(yàn)內(nèi)容及要求
通過(guò)ZLG7289芯片驅(qū)動(dòng)17鍵的鍵盤(pán)和8個(gè)共陰極LED,將按鍵值在LED 上顯示出來(lái)。
3.5 實(shí)驗(yàn)設(shè)計(jì)與實(shí)驗(yàn)步驟
(1)新建工程,將“Exp3鍵盤(pán)及LED 驅(qū)動(dòng)實(shí)驗(yàn)”中的文件添加到工程。(2)定義ZLG7289 寄存器(3)編寫(xiě)ZLG7289 驅(qū)動(dòng)函數(shù)(4)定義鍵盤(pán)映射表(5)定義鍵值讀取函數(shù)
(6)編寫(xiě)主函數(shù)
3.6 實(shí)驗(yàn)過(guò)程與分析
(1)定義ZLG7289寄存器 #define ZLG7289_CS #define ZLG7289_KEY #define ZLG7289_ENABLE()do{ZLG7289SIOBand=rSBRDR;ZLG7289SIOCtrl=rSIOCON;rSIOCON=0x31;rSBRDR=0xff;rPDATB&=(~ZLG7289_CS);}while(0)#define ZLG7289_DISABLE()do{rPDATB|=ZLG7289_CS;rSBRDR=ZLG7289SIOBand;rSIOCON=ZLG7289SIOCtrl;}while(0)(2)主函數(shù)中需要在開(kāi)始初始化zlg7289。編寫(xiě)驅(qū)動(dòng)和鍵值映射之后,在一個(gè)循環(huán)里面從鍵盤(pán)中讀取按鍵的號(hào)碼,根據(jù)鍵值映射讀出按鍵的值。然后在主函數(shù)中,將讀出的按鍵值在數(shù)碼管上顯示出來(lái)。
(3)Main函數(shù)的主要功能部分,GetKey()函數(shù)得到按鍵值是調(diào)用zlg7289獲取鍵盤(pán)事件和核心。
3.7 實(shí)驗(yàn)結(jié)果總結(jié)
通過(guò)實(shí)驗(yàn)最終LED燈上能顯示數(shù)字,即實(shí)現(xiàn)了通過(guò)鍵值控制LED燈
3.8 心得體會(huì)
通過(guò)本次實(shí)驗(yàn)對(duì)ZLG7289芯片的內(nèi)部結(jié)構(gòu)有了更進(jìn)一步的了解,對(duì)ZLG7289驅(qū)動(dòng)鍵盤(pán)和LED的方法也更進(jìn)一步的進(jìn)行了學(xué)習(xí)。
4.實(shí)驗(yàn)四
4.1 實(shí)驗(yàn)名稱(chēng)
電機(jī)轉(zhuǎn)動(dòng)控制及中斷實(shí)驗(yàn)
4.2 實(shí)驗(yàn)?zāi)康?/p>
(1)熟悉ARM本身自帶的六路即三對(duì)PWM,掌握相應(yīng)寄存器的配置
(2)編程實(shí)現(xiàn) ARM系統(tǒng)的PWM 輸出和I/O 輸出,前者用于控制直流電機(jī),后者用于控制步進(jìn)電機(jī)。
(3)了解直流電機(jī)和步進(jìn)電機(jī)的工作原理,學(xué)會(huì)用軟件的方法實(shí)現(xiàn)步進(jìn)電機(jī)的脈沖分配,即用軟件的方法代替硬件的脈沖分配器。
(4)掌握帶有PWM 和I/O 的CPU 編程實(shí)現(xiàn)其相應(yīng)功能的主要方法。
4.3 實(shí)驗(yàn)環(huán)境
(1)ADS1.2開(kāi)發(fā)環(huán)境
(2)博創(chuàng)UP-NETARM3000 嵌入式開(kāi)發(fā)平臺(tái)(3)PC(4)串口線
4.4 實(shí)驗(yàn)內(nèi)容及要求
學(xué)習(xí)步進(jìn)電機(jī)和直流電機(jī)的工作原理,了解實(shí)現(xiàn)兩個(gè)電機(jī)轉(zhuǎn)動(dòng)對(duì)于系統(tǒng)的軟件和硬件要求。學(xué)習(xí)ARM知識(shí),掌握PWM 的生成方法,同時(shí)也要掌握I/O 的控制方法。
(1)編程實(shí)現(xiàn)ARM芯片的一對(duì)PWM 輸出用于控制直流電機(jī)的轉(zhuǎn)動(dòng),通過(guò)A/D 旋鈕控制其正反轉(zhuǎn)及轉(zhuǎn)速
(2)編程實(shí)現(xiàn)ARM的四路I/O 通道實(shí)現(xiàn)環(huán)形脈沖分配用于控制步進(jìn)電機(jī)的轉(zhuǎn)動(dòng),通過(guò)A/D 旋鈕轉(zhuǎn)角控制步進(jìn)電機(jī)的轉(zhuǎn)角。
(3)通過(guò)超級(jí)終端來(lái)控制直流電機(jī)與步進(jìn)電機(jī)的切換。4.5 實(shí)驗(yàn)設(shè)計(jì)與實(shí)驗(yàn)步驟
(1)新建工程,將“電機(jī)轉(zhuǎn)動(dòng)控制實(shí)驗(yàn)”中的文件添加到工程(2)編寫(xiě)直流電機(jī)初始化數(shù)(MotorCtrl.c)(3)控制直流電機(jī)與步進(jìn)電機(jī)
4.6 實(shí)驗(yàn)過(guò)程與分析
(1)通過(guò)把從串口中得到控制信息的代碼修改成從zlg7289芯片中讀取小鍵盤(pán)信息,從而利用試驗(yàn)臺(tái)的小鍵盤(pán)來(lái)控制步進(jìn)電機(jī)和直流電機(jī)的切換
(2)A/D轉(zhuǎn)換可以把電信號(hào)轉(zhuǎn)換成數(shù)字信號(hào)來(lái)控制電機(jī)的轉(zhuǎn)速。for(;;)
{ loop:
//if((rUTRSTAT0 & 0x1))//有輸入,則返回
if(rPDATG&ZLG7289_KEY)//17鍵小鍵盤(pán)控制電機(jī)
{
*Revdata=RdURXH0();
goto begin;
}
Delay(10);ADData=GetADresult(0);
if(abs(lastADData-ADData)<20)
goto loop;Delay(10);count=-(ADData-lastADData)*3;
//(ADData-lastADData)*270/1024為ad旋鈕轉(zhuǎn)過(guò)的角度,360/512為步距角,//由于接了1/8減速器,兩者之商再乘以8為步進(jìn)電機(jī)相應(yīng)轉(zhuǎn)過(guò)的角度
if(count>=0)
{//轉(zhuǎn)角大于零
for(j=0;j { for(i=0;i<=7;i++) { SETEXIOBITMASK(stepdata[i], 0xf0); Delay(200); } } } else {//轉(zhuǎn)角小于零 count=-count; for(j=0;j { for(i=7;i>=0;i--) { SETEXIOBITMASK(stepdata[i], 0xf0); Delay(200); } } } lastADData=ADData; } } (3)S3C44B0X 具有6 個(gè)16bit定時(shí)器,每個(gè)定時(shí)器可以基于中斷模式或 DMA模式運(yùn)行。在定時(shí)中斷服務(wù)程序中寫(xiě)需要定時(shí)處理的程序,每隔一段時(shí)間就會(huì)運(yùn)行一次。 4.7 實(shí)驗(yàn)結(jié)果總結(jié) 利用A/D轉(zhuǎn)換器實(shí)現(xiàn)了對(duì)直流電機(jī)和步進(jìn)電機(jī)的控制,利用實(shí)驗(yàn)設(shè)備上自帶的小鍵盤(pán)實(shí)現(xiàn)了A/D轉(zhuǎn)換器對(duì)兩個(gè)電機(jī)控制的切換。 4.8 心得體會(huì) 通過(guò)本次實(shí)驗(yàn),熟悉了ARM自帶的六路(三對(duì))PWM,并對(duì)直流電機(jī)和步進(jìn)電機(jī)的工作原理有了進(jìn)一步的了解。 5.實(shí)驗(yàn)五 5.1 實(shí)驗(yàn)名稱(chēng) LCD驅(qū)動(dòng)及觸摸屏實(shí)驗(yàn) 5.2 實(shí)驗(yàn)?zāi)康?/p> 掌握LCD顯示原理及顯示驅(qū)動(dòng)的嵌入式系統(tǒng)編程實(shí)現(xiàn)方法;學(xué)習(xí)基于ARM的LCD 顯示驅(qū)動(dòng)控制方法,通過(guò)對(duì)ARM 內(nèi)置的LCD 控制器進(jìn)行編程實(shí)現(xiàn)驅(qū)動(dòng)LCD顯示屏;學(xué)習(xí)觸摸屏基本原理,理解觸摸屏的輸出標(biāo)定以及與LCD 顯示器配合的過(guò)程,編程對(duì)觸摸屏進(jìn)行控制。 5.3 實(shí)驗(yàn)環(huán)境 (1)ADS1.2開(kāi)發(fā)環(huán)境(2)博創(chuàng)UP-NETARM3000 嵌入式開(kāi)發(fā)平臺(tái)(3)PC(4)串口線 5.4 實(shí)驗(yàn)內(nèi)容及要求 (1)學(xué)習(xí)LCD顯示器的基本原理,理解其驅(qū)動(dòng)控制方法(2)編程對(duì)觸摸屏進(jìn)行控制,實(shí)現(xiàn): 1.點(diǎn)擊觸摸屏上兩點(diǎn)后,兩點(diǎn)之間畫(huà)出一條直線。2.點(diǎn)擊觸摸屏并在其上移動(dòng),顯示移動(dòng)軌跡 (3)編程實(shí)現(xiàn)總線方式驅(qū)動(dòng)模塊的LCD和ARM內(nèi)置的LCD控制器來(lái)驅(qū)動(dòng)LCD 5.5 實(shí)驗(yàn)設(shè)計(jì)與實(shí)驗(yàn)步驟 (1)新建工程 (2)定義有關(guān)常量與宏 #define LCDWIDTH 320 #define LCDHEIGHT 240 U32* pLCDBuffer16=(U32*)0xc000000;// 一級(jí)緩存指針 U32 LCDBuffer[LCDHEIGHT][LCDWIDTH];//二級(jí)緩存(3)編寫(xiě)LCD 初始化函數(shù)(4)編寫(xiě)LCD 刷新函數(shù)(5)編寫(xiě)主函數(shù) 5.6 實(shí)驗(yàn)過(guò)程與分析 (1)通過(guò)不斷刷新的方式獲得LCD液晶屏幕的動(dòng)畫(huà)。即刷新函數(shù)將二級(jí)緩存LCDBuffer 的數(shù)據(jù)由32 位彩色圖形信息轉(zhuǎn)換成8 位256 色的圖形信息,然后放到pLCDBuffer16指向的一級(jí)緩存。 (2)觸摸屏的先得到觸屏輸出的電信號(hào)的值,然后轉(zhuǎn)換為實(shí)際的屏幕坐標(biāo),再根據(jù)動(dòng)作來(lái)決定如何處理緩存信息,刷新LCD。 LCD二級(jí)緩存矩陣: for(i=0;i<9;i++){ switch(i){ case 0: jcolor=0x00000000;// 黑色 break;case 1: jcolor=0x000000e0;// 紅色 break;case 2: jcolor=0x0000d0e0;// 橙色 break;case 3: jcolor=0x0000e0e0;// 黃 break;case 4: jcolor=0x0000e000;// 綠色 break;case 5: jcolor=0x00e0e000;// 青色 break;case 6: jcolor=0x00e00000;// 藍(lán)色 break;case 7: jcolor=0x00e000e0;// 紫色 break;case 8: jcolor=0x00e0e0e0;// 白色 break;} for(k=0;k<240;k++)for(j=i*32;j 5.7 實(shí)驗(yàn)結(jié)果總結(jié) 本次實(shí)驗(yàn)由于坐標(biāo)設(shè)定的問(wèn)題并沒(méi)有成功實(shí)現(xiàn)觸摸痕跡的顯示,但在測(cè)試過(guò)程中,在觸摸屏上點(diǎn)擊或移動(dòng)時(shí)會(huì)在超級(jí)終端上有顯示。 5.8 心得體會(huì) 雖然本次實(shí)驗(yàn)不太成功實(shí)現(xiàn),但對(duì)LCD屏幕和觸摸屏的工作原理有了進(jìn)一步的了解,更好的掌握了LCD顯示原理及顯示驅(qū)動(dòng)的嵌入式系統(tǒng)編程實(shí)現(xiàn)方法。 6.實(shí)驗(yàn)六 6.1 實(shí)驗(yàn)名稱(chēng) ucos-II裁剪實(shí)驗(yàn) 6.2 實(shí)驗(yàn)?zāi)康?掌握μcos-II裁剪的基本原理與嵌入式編程實(shí)現(xiàn)方法;學(xué)習(xí)如何根據(jù)具體情況對(duì)μcos-II操作系統(tǒng)進(jìn)行裁剪,從而得到即滿足需要,又非常緊湊的應(yīng)用軟件系統(tǒng)。 6.3 實(shí)驗(yàn)環(huán)境 (1)ADS1.2開(kāi)發(fā)環(huán)境 (2)博創(chuàng)UP-NETARM3000 嵌入式開(kāi)發(fā)平臺(tái)(3)PC(4)串口線 6.4 實(shí)驗(yàn)內(nèi)容及要求 (1)通過(guò)對(duì)μcos-II配置文件(OS_CFG.H)中相關(guān)的配置常量進(jìn)行設(shè)置,實(shí)現(xiàn)對(duì)μcos-II的裁剪 (2)給出裁剪的詳細(xì)過(guò)程與裁剪結(jié)果說(shuō)明,并生成裁剪后的操作系統(tǒng)文件。 6.5 實(shí)驗(yàn)設(shè)計(jì)與實(shí)驗(yàn)步驟 (1)新建工程,將ucosII移植的文件添加到工程中。 (2)編輯os_cfg.h頭文件。 (3)將裁減后的系統(tǒng)所需用到的功能宏定義配置常量置為1,實(shí)現(xiàn)系統(tǒng)的裁減。(4)編譯生成新的ucosII系統(tǒng)。 6.6 實(shí)驗(yàn)過(guò)程與分析 (1)配置功能常量,將裁剪后的系統(tǒng)需要用到的功能配置常量設(shè)為1(2)裁減信號(hào)量數(shù)據(jù)(3)配置數(shù)據(jù)結(jié)構(gòu) OS_MAX_TASKS,若程序中用到了三個(gè)任務(wù),則該值的最小值為3 OS_LOWEST_PRIO設(shè)置程序中最低任務(wù)的優(yōu)先級(jí) OS_TASK_IDLE_STK_SIZE設(shè)置UC/OS操作系統(tǒng)中空閑任務(wù)堆棧的容量 OS_TASK_STAT_STK_SIZE設(shè)定統(tǒng)計(jì)任務(wù)的任務(wù)堆棧容量 6.7 實(shí)驗(yàn)結(jié)果總結(jié) 通過(guò)本次實(shí)驗(yàn),裁減了系統(tǒng),修改了某些數(shù)據(jù)結(jié)構(gòu)相關(guān)的常量,節(jié)省了內(nèi)存空間 6.8 心得體會(huì) 通過(guò)本次實(shí)驗(yàn)主要學(xué)習(xí)到了如何根據(jù)具體情況對(duì)μcos-II操作系統(tǒng)進(jìn)行裁剪,從而得到即滿足需要,又非常緊湊的應(yīng)用軟件系統(tǒng)。 7.實(shí)驗(yàn)七 7.1 實(shí)驗(yàn)名稱(chēng) ucos-II移植實(shí)驗(yàn) 7.2 實(shí)驗(yàn)?zāi)康?/p> 了解μC/OS-II 內(nèi)核的主要結(jié)構(gòu),掌握ARM的C語(yǔ)言和匯編語(yǔ)言的編程方法;了解ARM7處理器結(jié)構(gòu);掌握將μC/OS-II 內(nèi)核移植到ARM 7 處理器上的基本原理與嵌入式編程實(shí)現(xiàn)方法 7.3 實(shí)驗(yàn)環(huán)境 (1)ADS1.2開(kāi)發(fā)環(huán)境 (2)博創(chuàng)UP-NETARM3000 嵌入式開(kāi)發(fā)平臺(tái)(3)PC(4)串口線 7.4 實(shí)驗(yàn)內(nèi)容及要求 (1)將μC/OS-II 內(nèi)核移植到ARM7 微處理器S3C44B0上。(2)編寫(xiě)兩個(gè)簡(jiǎn)單任務(wù),在超級(jí)終端上觀察兩個(gè)任務(wù)的切換。 7.5 實(shí)驗(yàn)設(shè)計(jì)與實(shí)驗(yàn)步驟 (1)新建工程 (2)該實(shí)驗(yàn)的文件分為兩類(lèi),其一是 STARTUP目錄下的系統(tǒng)初始化、配置等文件,其二是uCOS-II 的全部源碼,arch 目錄下的3 個(gè)文件是和處理器架構(gòu)相關(guān)的3.定義驅(qū)動(dòng)函數(shù)(tchscr.c)(3)設(shè)置os_cpu.h 中與處理器和編譯器相關(guān)的代碼(4)用C 語(yǔ)言編寫(xiě)6 個(gè)操作系統(tǒng)相關(guān)的函數(shù)(5)用匯編語(yǔ)言編寫(xiě)4 個(gè)與處理器相關(guān)的函數(shù) (6)編寫(xiě)一個(gè)簡(jiǎn)單的多任務(wù)程序來(lái)測(cè)試一下移植是否成功(7)編譯并下載移植后的uCOS-II 7.6 實(shí)驗(yàn)過(guò)程與分析 (1)首先需要對(duì)相關(guān)寄存器做詳細(xì)的設(shè)定(2)用匯編語(yǔ)言編寫(xiě)與處理器相關(guān)的函數(shù)(3)用分時(shí)的方法同時(shí)運(yùn)行兩個(gè)任務(wù) OS_STK TaskName_Stack[STACKSIZE]={0, };//任務(wù)堆棧 void TaskName(void *Id);//任務(wù)函數(shù) #define TaskName_Prio N //任務(wù)優(yōu)先級(jí) 在main()函數(shù)中調(diào)用OSStart()函數(shù)之前用下列語(yǔ)句創(chuàng)建任務(wù): OSTaskCreate(TaskName,(void*)0,(OS_STK*)&TaskName_Stack[STACKSIZE-1], TaskName_Prio);OSTaskCreate()函數(shù)的原型是: INT8U OSTaskCreate(void(*task)(void *pd), void *p_arg, OS_STK *ptos, INT8U prio);(4)編寫(xiě)任務(wù)函數(shù) 7.7 實(shí)驗(yàn)結(jié)果總結(jié) 通過(guò)實(shí)驗(yàn)達(dá)到了ucosII系統(tǒng)移植的目的,并編寫(xiě)了一個(gè)簡(jiǎn)單的多任務(wù)程序,分時(shí)運(yùn)行。 7.8 心得體會(huì) 通過(guò)本次實(shí)驗(yàn)了解了μC/OS-II 內(nèi)核的主要結(jié)構(gòu),掌握了ARM的C語(yǔ)言和匯編語(yǔ)言的編程方法。 8.實(shí)驗(yàn)八 8.1 實(shí)驗(yàn)名稱(chēng) 各接口模塊相互銜接綜合實(shí)驗(yàn) 8.2 實(shí)驗(yàn)?zāi)康?/p> (1)回顧串口、鍵盤(pán)、LED接口、A/D、電機(jī)轉(zhuǎn)動(dòng)、定時(shí)器中斷、LCD接口及觸摸屏驅(qū)動(dòng)控制等接口模塊驅(qū)動(dòng)設(shè)計(jì)及開(kāi)發(fā)方法 (2)綜合應(yīng)用以上全部或者部分模塊,實(shí)現(xiàn)一個(gè)嵌入式綜合應(yīng)用系統(tǒng),要求至少用到8個(gè)模塊中的5個(gè) 8.3 實(shí)驗(yàn)環(huán)境 (1)ADS1.2開(kāi)發(fā)環(huán)境 (2)博創(chuàng)UP-NETARM3000 嵌入式開(kāi)發(fā)平臺(tái)(3)PC(4)串口線 8.4 實(shí)驗(yàn)內(nèi)容及要求 (1)綜合應(yīng)用串口、鍵盤(pán)、LED接口、A/D、電機(jī)轉(zhuǎn)動(dòng)、定時(shí)器中斷、LCD接口及觸摸屏驅(qū)動(dòng)控制等全部或者部分模塊(2)實(shí)現(xiàn)一個(gè)嵌入式綜合應(yīng)用系統(tǒng),要求至少用到8個(gè)模塊中的5個(gè),盡量使綜合應(yīng)用系統(tǒng)具備合理的功能。 8.5 實(shí)驗(yàn)設(shè)計(jì)與實(shí)驗(yàn)步驟 (1)運(yùn)行ADS1.2開(kāi)發(fā)環(huán)境(2)新建工程文件 (3)將綜合實(shí)驗(yàn)中用到的文件放到這個(gè)工程文件中(4)下載編譯好的文件到嵌入式控制器中運(yùn)行 8.6 實(shí)驗(yàn)過(guò)程與分析 (1)本次實(shí)驗(yàn)設(shè)計(jì)主要是通過(guò)中斷來(lái)實(shí)現(xiàn),設(shè)定了flag=1,2,3,4,5,6六個(gè)標(biāo)志位,對(duì)應(yīng)不同的鍵值來(lái)實(shí)現(xiàn)功能的切換 (2)通過(guò)num/lock鍵來(lái)控制直流電機(jī)(3)通過(guò)“/”鍵來(lái)控制步進(jìn)電機(jī) (4)通過(guò)“*”鍵來(lái)控制屏輸出“hello world”(5)通過(guò)“+”鍵來(lái)實(shí)現(xiàn)LED燈的計(jì)時(shí) (6)通過(guò)“DEL”鍵來(lái)實(shí)現(xiàn)清屏和LED燈的清除 (7)通過(guò)“enter”鍵來(lái)進(jìn)入到鍵值控制LED顯示的功能 8.7 實(shí)驗(yàn)結(jié)果總結(jié) 實(shí)驗(yàn)最終能實(shí)現(xiàn)5個(gè)功能的切換,但不足的是未涉及到觸摸屏的設(shè)計(jì),并且最后的鍵值控制LED燈不能實(shí)現(xiàn)正常的中斷跳轉(zhuǎn)。 8.8 心得體會(huì) 通過(guò)本次綜合性的實(shí)驗(yàn)來(lái)綜合之前做的串口、鍵盤(pán)、LED接口、A/D、電機(jī)轉(zhuǎn)動(dòng)、定時(shí)器中斷、LCD接口及觸摸屏驅(qū)動(dòng)控制實(shí)驗(yàn),回顧了之前的知識(shí),對(duì)整體的運(yùn)用有了進(jìn)一步的了解,但是實(shí)驗(yàn)結(jié)果仍有很多的不足,需要改進(jìn)。 9.實(shí)驗(yàn)總結(jié)與心得體會(huì) 通過(guò)之前的串口、鍵盤(pán)、LED接口、A/D、電機(jī)轉(zhuǎn)動(dòng)、定時(shí)器中斷、LCD接口及觸摸屏驅(qū)動(dòng)控制實(shí)驗(yàn)這7個(gè)小模塊的實(shí)驗(yàn),對(duì)嵌入式系統(tǒng)的開(kāi)發(fā)流程有了基本的了解,熟悉了博創(chuàng)UP-NETARM3000實(shí)驗(yàn)臺(tái)和ADS1.2軟件的實(shí)驗(yàn)環(huán)境,同時(shí)也掌握了各模塊功能實(shí)現(xiàn)功能的基本原理。在最后的綜合性實(shí)驗(yàn)中,通過(guò)對(duì)以上知識(shí)的掌握和理解,進(jìn)一步的對(duì)以上知識(shí)進(jìn)行了加深和鞏固,雖然有幾次實(shí)驗(yàn)實(shí)現(xiàn)的實(shí)驗(yàn)結(jié)果并不是很成功,但還是達(dá)到了學(xué)習(xí)和理解的效果。 嵌入式系統(tǒng)實(shí)驗(yàn)報(bào)告 學(xué) 號(hào): 姓 名: 班 級(jí):13電子信息工程 指導(dǎo)老師: 蘇州大學(xué) 電子信息學(xué)院 2016年12月 實(shí)驗(yàn)一:一個(gè)燈的閃爍 1、實(shí)驗(yàn)要求 實(shí)現(xiàn)PF6-10端口所連接的任意一個(gè)LED燈點(diǎn)亮 2、電路原理圖 圖1 LED燈硬件連接圖 3、軟件分析 RCC_Configuration();/* 配置系統(tǒng)時(shí)鐘 */ GPIO_Configuration(); /* 配置GPIO IO口初始化 */ for(;;) { GPIOF->ODR = 0xfcff; /* PF8=0--> 點(diǎn)亮D3 */ Delay(1000000); GPIOF->ODR = 0xffff; /* PF8=1--> 熄滅D3 */ Delay(1000000); 4、實(shí)驗(yàn)現(xiàn)象 通過(guò)對(duì)GPIOF8的操作,可以使LED3閃爍 5、實(shí)驗(yàn)總結(jié) 這是第一次使用STM32開(kāi)發(fā)板,主要內(nèi)容是對(duì)IO端口進(jìn)行配置,點(diǎn)亮與IO端口相連接的LED燈,閃爍周期為2S。通過(guò)本實(shí)驗(yàn)對(duì)STM32開(kāi)發(fā)板的硬件原理有了初步了解。 實(shí)驗(yàn)二:流水燈 1、實(shí)驗(yàn)要求 實(shí)現(xiàn)PF6-10端口所連接的5個(gè)LED燈順次亮滅 2、電路原理圖 圖1 流水燈硬件連接圖 3、軟件分析 int main(void){ RCC_Configuration();/* 配置系統(tǒng)時(shí)鐘 */ GPIO_Configuration();/* 配置GPIO IO口初始化 */ for(;;) { GPIOF->ODR = 0xffbf; /* PF6=0--> 點(diǎn)亮LED1 */ Delay(5000000);GPIOF->ODR = 0xff7f; } /* PF7=0--> 點(diǎn)亮LED2 */ Delay(5000000); GPIOF->ODR = 0xfeff; /* PF8=0--> 點(diǎn)亮LED3 */ Delay(5000000); GPIOF->ODR = 0xfdff; /* PF9=0--> 點(diǎn)亮LED4 */ Delay(5000000); GPIOF->ODR = 0xfbff; /* PF10=0--> 點(diǎn)亮LED5 */ } 4、實(shí)驗(yàn)現(xiàn)象 LED1~LED5依次點(diǎn)亮,亮滅的時(shí)間間隔都為1S。 5、實(shí)驗(yàn)總結(jié) 本次實(shí)驗(yàn)對(duì)STM32開(kāi)發(fā)板的GPIO端口進(jìn)行進(jìn)一步學(xué)習(xí),通過(guò)程序可以實(shí)現(xiàn)流水燈的閃爍。 實(shí)驗(yàn)三:?jiǎn)渭?jí)外部中斷 1、實(shí)驗(yàn)要求 按下某個(gè)按鍵,觸發(fā)中斷,中斷服務(wù)程序改變LED燈狀態(tài) 2、電路原理圖 圖3 SW1硬件原理圖 3、軟件分析 int main() { RCC_Configuration(); GPIO_Configuration(); GPIO_Write(GPIOF,0xffff);Delay(5000); while(1) { } /* 配置系統(tǒng)時(shí)鐘 */ /* IO口初始化 */ /* 全滅 */ if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8)==0)/* 如果SW1 PA8=0 */ { GPIO_SetBits(GPIOF, GPIO_Pin_6); /* LED1點(diǎn)亮 */ Delay(0x1FFFFF); GPIO_ResetBits(GPIOF, GPIO_Pin_6); /* LED1 熄滅 */ Delay(0x1FFFFF);} } 4、實(shí)驗(yàn)現(xiàn)象 原來(lái)5個(gè)LED燈都處于熄滅狀態(tài),按下SW1,觸發(fā)中斷程序,LED1點(diǎn)亮。 5、實(shí)驗(yàn)總結(jié) 通過(guò)本次實(shí)驗(yàn),可以對(duì)某一狀態(tài)通過(guò)外部中斷,改變其當(dāng)前狀態(tài)。 實(shí)驗(yàn)四:多中斷嵌套 1、實(shí)驗(yàn)要求 按下某個(gè)按鍵,觸發(fā)中斷,中斷服務(wù)程序改變LED燈狀態(tài) 2、電路原理圖 圖4 SW1,SW2,SW3硬件原理圖 3、軟件分析 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel; //設(shè)定中斷源為PA0 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//中斷占優(yōu)先級(jí)為0 NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQChannel; //設(shè)定中斷源為PD3 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//中斷占優(yōu)先級(jí)為1 NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;//設(shè)定中斷源為PA8 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;//中斷占優(yōu)先級(jí)為2 void EXTI0_IRQHandler(void){ int i=0;if(EXTI_GetITStatus(EXTI_Line0)!= RESET){ for(i=0;i<10;i++){ GPIO_Write(GPIOF,0xffff); GPIO_SetBits(GPIOF, GPIO_Pin_6);/* LED1 點(diǎn)亮 */ Delay(0x5fFFFF);GPIO_ResetBits(GPIOF, GPIO_Pin_6);/* LED1 熄滅 */ Delay(0x5fFFFF);EXTI_ClearITPendingBit(EXTI_Line0);} } } void EXTI3_IRQHandler(void)if(EXTI_GetITStatus(EXTI_Line3)!= RESET){ { int i=0;for(i=0;i<10;i++){ GPIO_Write(GPIOF,0xffff); GPIO_SetBits(GPIOF, GPIO_Pin_7);/* LED2 點(diǎn)亮 */ Delay(0x5fFFFF);GPIO_ResetBits(GPIOF, GPIO_Pin_7);/* LED2 熄滅 */ Delay(0x5fFFFF);EXTI_ClearITPendingBit(EXTI_Line3);} } } void EXTI9_5_IRQHandler(void){ int i=0; if(EXTI_GetITStatus(EXTI_Line8)!= RESET){ for(i=0;i<10;i++){ GPIO_Write(GPIOF,0xffff); GPIO_SetBits(GPIOF, GPIO_Pin_8);/* LED3 點(diǎn)亮 */ Delay(0x5fFFFF); GPIO_ResetBits(GPIOF, GPIO_Pin_8);/* LED3 熄滅 */ Delay(0x5fFFFF); EXTI_ClearITPendingBit(EXTI_Line8);} } } 4、實(shí)驗(yàn)現(xiàn)象 中斷優(yōu)先級(jí)從高到低依次為:SW3,SW2,SW1 原來(lái)5個(gè)LED燈都處于熄滅狀態(tài),按下SW1,LED3應(yīng)該閃爍10次,當(dāng)其閃爍5次后按下SW2,LED2也應(yīng)該閃爍10次,當(dāng)其閃爍4次后按下SW3,LED1也應(yīng)該閃爍10次,則當(dāng)LED1閃爍完10次后,LED2繼續(xù)閃爍6次,之后LED1繼續(xù)閃爍5次。 5、實(shí)驗(yàn)總結(jié) 通過(guò)本次實(shí)驗(yàn),可以對(duì)LED狀態(tài)實(shí)行中斷嵌套,由以上實(shí)驗(yàn)現(xiàn)象,得出以下結(jié)論:高中斷優(yōu)先級(jí)可以打斷低優(yōu)先級(jí),中斷系統(tǒng)正在執(zhí)行一個(gè)中斷服務(wù)時(shí),有另一個(gè)優(yōu)先級(jí)更高的中斷提出中斷請(qǐng)求,這時(shí)會(huì)暫時(shí)終止當(dāng)前正在執(zhí)行的級(jí)別較低的中斷源的服務(wù)程序,去處理級(jí)別更高的中斷源,待處理完畢,再返回到被中斷了的中斷服務(wù)程序繼續(xù)執(zhí)行,反之,低中斷優(yōu)先級(jí)不可以打斷高優(yōu)先級(jí)。 實(shí)驗(yàn)五:TIM2的基本應(yīng)用 1、實(shí)驗(yàn)要求 TIM2定時(shí)器將LED燈定時(shí)點(diǎn)亮和熄滅一定的時(shí)間 2、電路原理圖 3、軟件分析 TIM_Cmd(TIM2, ENABLE); /* TIM2 enable counter */ TIM_TimeBaseStructure.TIM_Period = 1999; TIM_TimeBaseStructure.TIM_Prescaler = 35999; //定時(shí)時(shí)間為1s void TIM2_IRQHandler(void){ TIM_ClearITPendingBit(TIM2, TIM_IT_Update); GPIO_WriteBit(GPIOF, GPIO_Pin_6,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOF, GPIO_Pin_6)));} 4、實(shí)驗(yàn)現(xiàn)象 LED1燈按照1S的定時(shí)時(shí)間不斷閃爍 5、實(shí)驗(yàn)總結(jié) 通過(guò)本次實(shí)驗(yàn),可以實(shí)現(xiàn)對(duì)LED燈進(jìn)行定時(shí)控制其閃爍,而不需要延時(shí)函數(shù)控制了,定時(shí)時(shí)間較為精準(zhǔn)。實(shí)驗(yàn)六:TIM2,TIM3,TIM4多定時(shí)器的應(yīng)用 1、實(shí)驗(yàn)要求 利用TIM2,TIM3,TIM4定時(shí)器使LED燈以不同的頻率閃爍 2、電路原理圖 3、軟件分析 NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;此處比上一個(gè)實(shí)驗(yàn)增加了2個(gè)定時(shí)器,同時(shí)又增加了一個(gè)優(yōu)先級(jí) 4、實(shí)驗(yàn)現(xiàn)象 中斷優(yōu)先級(jí)從高到低依次為:TIM2,TIM3,TIM4 首先LED1以1S的定時(shí)時(shí)間閃爍5次,之后LED2以2S的定時(shí)時(shí)間閃爍5次,最后LED3以3S的定時(shí)時(shí)間閃爍5次 5、實(shí)驗(yàn)總結(jié) 利用定時(shí)器可以同時(shí)使LED燈按照不同的頻率閃爍,但是為了現(xiàn)象明顯,可以加一個(gè)優(yōu) 先級(jí),分別觀察現(xiàn)象。 實(shí)驗(yàn)七:串口USART1讀取CPU的ID號(hào) 1、實(shí)驗(yàn)要求 通過(guò)USART1讀取 CPU 的 96 bit ID 2、電路原理圖 圖 開(kāi)發(fā)板USART原理圖 3、軟件分析 void Get_ChipID(void)/* 獲取芯片ID */ { ChipUniqueID[0] = *(u32 *)(0X1FFFF7F0);/* 高字節(jié) */ ChipUniqueID[1] = *(u32 *)(0X1FFFF7EC); ChipUniqueID[2] = *(u32 *)(0X1FFFF7E8);/* 低字節(jié) */ } void USART_Configuration(void){ USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure); USART_ITConfig(USART1, USART_IT_TXE, ENABLE); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); USART_ClearFlag(USART1, USART_FLAG_TC); USART_Cmd(USART1, ENABLE); /* Enable USART1 */ } 4、實(shí)驗(yàn)現(xiàn)象 PA9連接的是USART1 Tx,PA10連接的是USART1 Rx,再通過(guò)串口調(diào)試助手就可 以在電腦上面顯示出CPU的ID以及flash容量大小。 5、實(shí)驗(yàn)總結(jié) 本次實(shí)驗(yàn)實(shí)現(xiàn)了串口和PC機(jī)的傳輸,可以通過(guò)USART1將CPU的ID在電腦上顯示出來(lái)。 實(shí)驗(yàn)八:異步通信USART2的重映射 1、實(shí)驗(yàn)要求 實(shí)現(xiàn)異步通信USART2的重映射,將數(shù)據(jù)傳送到PC機(jī)上 2、電路原理圖 圖 開(kāi)發(fā)板USART原理圖 3、軟件分析 void GPIO_Configuration() /* IO口初始化 */ { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; /* USART2 Tx--> PD05 */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;/* PD05--> JP7 WR */ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; /* USART2 Rx--> PD06 */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOD, &GPIO_InitStructure);GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);} 該程序?qū)SART2重映射到PD05,PD06引腳 4、實(shí)驗(yàn)現(xiàn)象 PD05連接的是USART2 Tx,PD06連接的是USART2 Rx,通過(guò)串口調(diào)試助手就可以在電腦上面顯示Program Running! 5、實(shí)驗(yàn)總結(jié) 通過(guò)本次實(shí)驗(yàn),可以實(shí)現(xiàn)對(duì)異步通信USART2的重映射,再通過(guò)串口調(diào)試助手在電腦上顯示出來(lái)。第五篇:嵌入式系統(tǒng)實(shí)驗(yàn)報(bào)告