電子科技大學(xué)研究生嵌入式系統(tǒng)實(shí)驗(yàn)03.docx_第1頁(yè)
電子科技大學(xué)研究生嵌入式系統(tǒng)實(shí)驗(yàn)03.docx_第2頁(yè)
電子科技大學(xué)研究生嵌入式系統(tǒng)實(shí)驗(yàn)03.docx_第3頁(yè)
電子科技大學(xué)研究生嵌入式系統(tǒng)實(shí)驗(yàn)03.docx_第4頁(yè)
電子科技大學(xué)研究生嵌入式系統(tǒng)實(shí)驗(yàn)03.docx_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余38頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

電 子 科 技 大 學(xué)實(shí) 驗(yàn) 報(bào) 告學(xué)生姓名:雷棟梁 學(xué) 號(hào):201522240226 指導(dǎo)教師:陳麗蓉 實(shí)驗(yàn)地點(diǎn):清水河校區(qū)科研樓 A2-412 實(shí)驗(yàn)時(shí)間:2015.06.08 一、實(shí)驗(yàn)室名稱(chēng):計(jì)算機(jī)實(shí)驗(yàn)教學(xué)示范中心研究生實(shí)驗(yàn)室 二、實(shí)驗(yàn)項(xiàng)目名稱(chēng):C13-MC9S12綜合應(yīng)用實(shí)驗(yàn)三、實(shí)驗(yàn)學(xué)時(shí):2 四、實(shí)驗(yàn)環(huán)境 (一)硬件環(huán)境 l MPC5634 嵌入式硬件開(kāi)發(fā)板:1 個(gè) l PC 機(jī):1 臺(tái) l P&E 仿真器:1 個(gè) (二)軟件環(huán)境 PC 上的軟件環(huán)境為: l 操作系統(tǒng):Windows XP/Windows 7 及以上 l 嵌入式軟件集成開(kāi)發(fā)環(huán)境軟件:CodeWarrior For MPC55xx、MPC56xx:CW55xx v2.5 SE 注:由于兼容性問(wèn)題,如果使用 Windows Vista 或 Windows 7 作為 PC 機(jī)的操作系統(tǒng),則使用 CW55xx v2.10 SE 版本。 l 安裝 P&E 仿真器的驅(qū)動(dòng)程序 l 串口調(diào)試助手軟件 (三)實(shí)驗(yàn)器材(設(shè)備、元器件) l MPC5634 開(kāi)發(fā)板的配套附件: n 電源:1 個(gè) n 串口線(xiàn):1 根 n USB 線(xiàn):1 根 n 跳線(xiàn):若干 l P&E 仿真器配套附件: n 電源:1 個(gè) n JTAG 數(shù)據(jù)線(xiàn):1 根 n USB 線(xiàn):1 根 五、實(shí)驗(yàn)?zāi)康?本實(shí)驗(yàn)的目的在于: l 搭建基于 MPC5634 的嵌入式軟件交叉開(kāi)發(fā)環(huán)境 l 熟悉環(huán)境建立的過(guò)程、方法 l 熟悉開(kāi)發(fā)環(huán)境對(duì)硬件資源、軟件資源等的要求,包括硬件物理連接與軟件的邏輯連接細(xì)節(jié) l 熟悉嵌入式軟件開(kāi)發(fā)環(huán)境及工具的基本使用 六、實(shí)驗(yàn)內(nèi)容 本實(shí)驗(yàn)的主要內(nèi)容涉及: 1) 設(shè)置硬件物理連接 2) 開(kāi)發(fā)環(huán)境軟件的基本使用 3) 運(yùn)行簡(jiǎn)單的測(cè)試程序,驗(yàn)證環(huán)境建立的正確性 七、實(shí)驗(yàn)設(shè)計(jì)說(shuō)明 本實(shí)驗(yàn)采用一個(gè)簡(jiǎn)單的嵌入式設(shè)備驅(qū)動(dòng)程序SCI 驅(qū)動(dòng)程序的運(yùn)行,驗(yàn)證本實(shí)驗(yàn)環(huán)境建立的正確性。首先保證 PC 機(jī)的串口與 MPC5634 開(kāi)發(fā)板上的串口在物理上正確連接(如果 PC 上沒(méi)有串口,比如使用筆記本電腦時(shí)),則可以使用一個(gè) USB 轉(zhuǎn)串口線(xiàn),PC 端接 USB 接口,在 PC 上安裝 USB 轉(zhuǎn)串口的驅(qū)動(dòng)程序即可。 SCI 驅(qū)動(dòng)程序的設(shè)計(jì)思路為:這是一個(gè)交互式的程序,當(dāng)所開(kāi)發(fā)的 SCI 驅(qū)動(dòng)測(cè)試程序被下載到 MPC5634 開(kāi)發(fā)板上運(yùn)行時(shí),測(cè)試程序通過(guò)其串口輸出一些指示信息,PC 機(jī)上的串口調(diào)試助手收到信息后進(jìn)行顯示,提示實(shí)驗(yàn)者下一步的操作;實(shí)驗(yàn)者根據(jù)提示信息通過(guò) PC 機(jī)的鍵盤(pán)輸入相應(yīng)的字符,串口調(diào)試助手再將這些字符發(fā)送給MPC5634 開(kāi)發(fā)板接收,后者又將收到的字符重新通過(guò)串口輸出。 本測(cè)試程序的目的是為驗(yàn)證 MPC5634 上的 SCI 驅(qū)動(dòng)程序的正確性,主要驗(yàn)證其串口輸入以及輸出字符的功能。 八、實(shí)驗(yàn)參數(shù)設(shè)置/* 任務(wù)對(duì)象定義 */Task對(duì)象序號(hào)定義#defineTask10#defineTask21#defineTask32#defineTask43#defineTask54#defineTask65#defineTask7 6/任務(wù)入口函數(shù)引用/externvoidFuncTaskError(void);externvoidFuncTask1(void);externvoidFuncTask2(void);externvoidFuncTask3(void);externvoidFuncTask4(void);externvoidFuncTask5(void);externvoidFuncTask6(void);externvoidFuncTask7(void);extern voidFuncIdle(void);/資源的定義#defineResource1&osekResource_ResourceTable0#defineResource2&osekResource_ResourceTable1/任務(wù)總數(shù)包含空閑任務(wù)#defineOCC_NTSKS8/就緒任務(wù)隊(duì)列最大數(shù)#defineOCC_TOTALACTIVENUMBER8/ALARM對(duì)象總數(shù)#defineOCC_NALMS6 /Alarm總數(shù)/定義需要使用的資源數(shù)#defineOCC_NALLRES2(T_OSEK_TASK_Entry)FuncTask1ms, Task1ms,0, /可搶占,不可擴(kuò)展,不自動(dòng)激活0,0,20,1,(T_OSEK_TASK_Entry)FuncTask10ms, Task10ms,0 ,0,0,18,1,(T_OSEK_TASK_Entry)FuncTask20ms, Task20ms,0 ,0,0,17,1,(T_OSEK_TASK_Entry)FuncTask50ms, Task50ms,0 ,0,0,16,1,(T_OSEK_TASK_Entry)FuncTask100ms,Task100ms,0 ,0,0,15,1,(T_OSEK_TASK_Entry)FuncTask200ms,Task200ms,0 , /0,0,14,1,(T_OSEK_TASK_Entry)FuncTask500ms,Task500ms,0 ,0,0,13,1,(T_OSEK_TASK_Entry)FuncTask1000ms,Task1000ms,0 ,0,0,12,1,(T_OSEK_TASK_Entry)Funcfaultrecord,/錯(cuò)誤記錄faultrecord,0 |OSEK_TASK_EXTENDED|OSEK_TASK_ACTIVE ,0,0,19,1,/* ALARM對(duì)象配置表 */T_OSEK_ALARM_ConfigTable osekConfig_AlarmTableOCC_NALMS = Task1ms,#if (defined(OCC_ECC1) | defined(OCC_ECC2) & defined(OCC_ALMSETEVENT)0,#endifCounter1,Task10ms,#if (defined(OCC_ECC1) | defined(OCC_ECC2) & defined(OCC_ALMSETEVENT)0,#endifCounter1,Task20ms,#if (defined(OCC_ECC1) | defined(OCC_ECC2) & defined(OCC_ALMSETEVENT)0,#endifCounter1,Task50ms,#if (defined(OCC_ECC1) | defined(OCC_ECC2) & defined(OCC_ALMSETEVENT)0,#endifCounter1,Task100ms,#if (defined(OCC_ECC1) | defined(OCC_ECC2) & defined(OCC_ALMSETEVENT)0,#endifCounter1,Task200ms,#if (defined(OCC_ECC1) | defined(OCC_ECC2) & defined(OCC_ALMSETEVENT)0,#endifCounter1, Task500ms,#if (defined(OCC_ECC1) | defined(OCC_ECC2) & defined(OCC_ALMSETEVENT)0,#endifCounter1,Task1000ms,#if (defined(OCC_ECC1) | defined(OCC_ECC2) & defined(OCC_ALMSETEVENT)0,#endifCounter1,;9、 源代碼及實(shí)驗(yàn)運(yùn)行結(jié)果分析 /*電子科技大學(xué)-嵌入式軟件工程中心* Copyright (C) 2005-2012 ESEC UESTC. All Rights Reserved.*/#include t_suite.h#include Test.h#include dio.h#include wdg.hWorkStatusInfo work_status;extern uint16 adc_buffer;StatusType MessageInit(void);uint8 FlipLevel(uint8 level);void Sci_ReadString(uint8 *buf);uint8 GetArguments(uint8 *argv, uint8 *pbuf);uint16 StringToInt(uint8 *nptr);void ini_LLD()Sci_WriteString(ini_LLD is running.rn);void HLS_ini()Sci_WriteString(ini_LLD is running.rn);void HLS_inisyn()Sci_WriteString(HLS_ini is running.rn);void HLS_ini2()Sci_WriteString(HLS_ini2 is running.rn);void ini_LLD2()Sci_WriteString(ini_LLD2 is running.rn);/* * brief * 初始化任務(wù) * * paramin無(wú) * * return無(wú) */TASK(TaskStart) /* 調(diào)用EMS系統(tǒng)初始化功能函數(shù) */ ini_LLD(); HLS_ini();HLS_inisyn();HLS_ini2();ini_LLD2(); /* 獲取調(diào)度器資源,防止初始化時(shí)被其他任務(wù)搶占 */ GetResource(RES_SCHEDULER); /* 設(shè)置所有的Alarm */SetRelAlarm(Alarm1ms, 0, 1); SetRelAlarm(Alarm10ms, 0, 10); SetRelAlarm(Alarm20ms, 0, 20); SetRelAlarm(Alarm50ms, 0, 50); SetRelAlarm(Alarm100ms, 0, 100); SetRelAlarm(Alarm200ms, 0, 200); SetRelAlarm(Alarm500ms, 0, 500); SetRelAlarm(Alarm1000ms, 0, 1000); /* 設(shè)置轉(zhuǎn)換組0的結(jié)果緩存 */ Adc_SetupResultBuffer(0, &adc_buffer0); /* 設(shè)置watchdog為慢模式 */ Wdg_SetMode(WDGIF_SLOW_MODE); StartCOM();/* 釋放調(diào)度器資源 */ ReleaseResource(RES_SCHEDULER); TerminateTask();TASK(Task1ms) TerminateTask();TASK(Task10ms) TerminateTask();TASK(Task20ms) TerminateTask();TASK(Task50ms) /* 每隔50ms啟動(dòng)一次ad轉(zhuǎn)換,對(duì)用戶(hù)輸入進(jìn)行采集 */ Adc_StartGroupConversion(0); TerminateTask();TASK(Task100ms)if (work_status.power 0) /* 油量未耗完時(shí),每隔100ms激活TaskEngineRunning任務(wù) */ ActivateTask(TaskEngineRunning); else if (work_status.flag_syn = 1) /* 油耗完時(shí)且處于同步狀態(tài),激活HLS_rstsyn任務(wù) */ ActivateTask(HLS_rstsyn); TerminateTask();TASK(Task200ms) TerminateTask();TASK(Task500ms)/輸出工況信息。Sci_WriteString(dangqiangongkuangcanshun); TerminateTask();TASK(Task1000ms) /* 每隔1s進(jìn)行一次喂狗 */Wdg_Trigger(); TerminateTask();/* * brief * 串口通信任務(wù), 以輪詢(xún)的方式讀取 * 用戶(hù)串口輸入的指令,解析并執(zhí)行 * 相應(yīng)的指令 * * paramin無(wú) * * return無(wú) */TASK(TaskUart) uint8 data;uint8 buf255;uint8 arguments232; uint8 is_cmd = 0; while (1) is_cmd = 0; /* 清除上次執(zhí)行的指令 */ arguments00 = 0; arguments10 = 0;Sci_WriteString(Cmd);Sci_ReadString(buf); if (GetArguments(arguments, buf) = 0) Sci_WriteString(Command not found!rn); continue; /* 加油命令 */ if (strcmp(arguments0, power) = 0) is_cmd = 1; /* 獲取標(biāo)準(zhǔn)資源, 防止參數(shù)在顯示過(guò)程中被更改 */GetResource(STA_RESOURCE); /* 在key-off狀態(tài)下才能加油 */ if (work_status.key = 1) Sci_WriteString(Please turn off the engine!rn); else work_status.power += StringToInt(arguments1); /* 釋放標(biāo)準(zhǔn)資源 */ReleaseResource(STA_RESOURCE); else if (strcmp(arguments0, print) = 0) /* 顯示工況參數(shù)命令 */ /* 獲取標(biāo)準(zhǔn)資源,防止參數(shù)在顯示過(guò)程中被更改 */ GetResource(STA_RESOURCE); if (strcmp(arguments1, all) = 0 | strcmp(arguments1, key) = 0) is_cmd = 1; if (work_status.key = 1) Sci_WriteString(key-onrn); else Sci_WriteString(key-offrn); if (strcmp(arguments1, all) = 0 | strcmp(arguments1, power) = 0) is_cmd = 1; Sci_WriteString(power:); Sci_WriteInt(work_status.power); Sci_WriteString(rn); if (strcmp(arguments1, all) = 0 | strcmp(arguments1, analog) = 0) is_cmd = 1; Sci_WriteString(analog:); Sci_WriteInt(work_status.analog_var); Sci_WriteString(rn); if (strcmp(arguments1, all) = 0 | strcmp(arguments1, speed) = 0) is_cmd = 1; Sci_WriteString(speed:); Sci_WriteInt(work_status.speed); Sci_WriteString(rn); (strcmp(arguments1, all) = 0 | strcmp(arguments1, chechuang) = 0) is_cmd = 1; SetEvent(faultrecord, 0x02); /* 釋放標(biāo)準(zhǔn)資源 */ ReleaseResource(STA_RESOURCE); else if (strcmp(arguments0, shutdown) = 0 & strcmp(arguments1, os) = 0) /* 關(guān)閉os命令 */ is_cmd = 1; ShutdownOS(0xff); /* 指令不正確 */ if (is_cmd = 0) Sci_WriteString(Command not found!rn); TerminateTask();/* * brief * 工況任務(wù), 更新工況參數(shù), * 執(zhí)行相應(yīng)工況的任務(wù) * * paramin無(wú) * * return無(wú) */TASK(TaskWorkStatus) ReceiveMessage(MSG_ADC, &MSG_ADC_BUFFER_OUT); if (MSG_ADC_BUFFER_OUT.msg_buffer0 200) if (work_status.key = 0) /* 如果是key-on狀態(tài), 點(diǎn)亮接通指示燈 */ work_status.key = 1;Dio_WriteChannel(KEY_LED, 0); if (work_status.power 0) /* 如果油量未耗完, 更新當(dāng)前發(fā)動(dòng)機(jī)運(yùn)轉(zhuǎn)速度 */ work_status.speed = MSG_ADC_BUFFER_OUT.msg_buffer1; else /* 如果油量耗完, 設(shè)置運(yùn)轉(zhuǎn)速度為0 */ work_status.speed = 0; else if (work_status.key = 1) /* 如果進(jìn)入key-off狀態(tài), 激活afterrun任務(wù) */ work_status.key = 0;ActivateTask(afterrun); /* 在key-off狀態(tài)下, 設(shè)置運(yùn)轉(zhuǎn)速度為0 */work_status.speed = 0; /* 更新模擬量 */work_status.analog_var = MSG_ADC_BUFFER_OUT.msg_buffer3; TerminateTask(); /* * brief * 發(fā)動(dòng)機(jī)模擬任務(wù), 該任務(wù)用于模擬發(fā)動(dòng)機(jī) * 運(yùn)轉(zhuǎn),每次激活后更新counter值,產(chǎn)生 * 相應(yīng)的同步點(diǎn) * * paramin無(wú) * * return無(wú) */TASK(TaskEngineRunning)static uint16 counter = 0;static uint8 level = 0;static uint8 injection_flag = 0;static uint8 fire_flag = 0;const uint16 max_count = 1024; /* 如果是key-off狀態(tài), 結(jié)束任務(wù) */if (work_status.key = 0) TerminateTask(); /* 根據(jù)當(dāng)前的運(yùn)轉(zhuǎn)速度, 更新counter值 */counter += work_status.speed; /* 如果完成一次發(fā)動(dòng)機(jī)的運(yùn)轉(zhuǎn)周期*/ if (counter = max_count) /* 更新發(fā)動(dòng)機(jī)指示燈 */ level = FlipLevel(level); Dio_WriteChannel(ENGINE_LED, level); /* 清除上一周期的噴油點(diǎn)火標(biāo)記*/injection_flag = 0; fire_flag = 0; /* counter值回繞 */counter -= max_count; /* 如果運(yùn)轉(zhuǎn)到了噴油點(diǎn) */if (counter 256 & injection_flag = 0) /* 設(shè)置全局噴油標(biāo)記 */ work_status.flag_inject = 1; /* 設(shè)置發(fā)動(dòng)機(jī)當(dāng)前周期的噴油標(biāo)記 */ injection_flag = 1; /* 啟動(dòng)ad轉(zhuǎn)換,觸發(fā)中斷產(chǎn)生相應(yīng)同步點(diǎn) */ Adc_StartGroupConversion(1); /* 如果運(yùn)轉(zhuǎn)到了點(diǎn)火點(diǎn) */if (counter 768 & fire_flag = 0) /* 設(shè)置全局點(diǎn)火標(biāo)記 */ work_status.flag_fire = 1; /* 設(shè)置發(fā)動(dòng)機(jī)當(dāng)前周期的點(diǎn)火標(biāo)記 */ fire_flag = 1; /* 啟動(dòng)ad轉(zhuǎn)換,觸發(fā)中斷產(chǎn)生相應(yīng)同步點(diǎn) */ Adc_StartGroupConversion(1); TerminateTask();/* * brief * 噴油任務(wù) * * paramin無(wú) * * return無(wú) */TASK(TaskInjection)static uint8level = 0;constuint16max_injection = 512;uint16 cur_injection; while (1) ClearEvent(EVENT_INJECTION); /* 等待噴油事件 */ WaitEvent(EVENT_INJECTION); /* 更新噴油指示燈 */level = FlipLe

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論