版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 《LED和UART》課程設(shè)計</p><p><b> 報 告 書</b></p><p> 題 目 LED和UART </p><p><b> 目錄</b></p><p><b> 目錄2</b></p>
2、;<p> 一、課程設(shè)計基本要求3</p><p> 1.1課程設(shè)計目的3</p><p><b> 1.2基本要求3</b></p><p> 二ARM裸機開發(fā)環(huán)境搭建及配置3</p><p> 2.1所需要的軟件3</p><p><b> 2.2
3、所需硬件4</b></p><p> 2.3燒寫SD卡4</p><p> 2.4配置虛擬機環(huán)境5</p><p> 2.4.1系統(tǒng)—管理—防火墻,點擊禁用,應(yīng)用;5</p><p> 2.4.2系統(tǒng)—管理—服務(wù),將vsftpd啟用;5</p><p> 2.4.3找到并用tar解壓ar
4、m-linux-gcc-4.5.1-v6-vfp-2.1.103.tgz,解壓完回到原來的路徑找到我們以后編譯代碼所需要的文件。6</p><p> 2.4.4找到解壓的絕對路徑7</p><p> 2.4.5執(zhí)行vi /etc/profile 在文件的最后加入如圖所示的代碼:8</p><p> 2.4.6執(zhí)行命令vi /etc/vsftpd/vsft
5、pd.conf8</p><p> 2.4.7更新已經(jīng)配置好的環(huán)境變量10</p><p><b> 三、LED燈10</b></p><p><b> 3.1走馬燈10</b></p><p> 3.1.1原理圖10</p><p> 3.1.2操作方法
6、11</p><p> 3.1.3測試結(jié)果12</p><p> 3.2按鍵控制LED的亮與滅13</p><p> 3.2.1原理圖13</p><p> 3.2.2操作方法13</p><p> 3.2.3測試結(jié)果13</p><p> 3.3LED燈所用到的相關(guān)寄存
7、器14</p><p> 四.UART通信14</p><p><b> 4.1原理圖14</b></p><p> 4.2與硬件連接寄存器配置15</p><p> 4.2.1. 設(shè)置各PLL的LOCK_TIME,使用默認值15</p><p> 4.2.2 設(shè)置為異步模式(
8、Asynchronous mode)15</p><p> 4.2.3. 設(shè)置分頻系數(shù)15</p><p> 4.2.4. 設(shè)置PLL,放大時鐘15</p><p> 4.3操作方法15</p><p> 4.4測試結(jié)果16</p><p> 4.4.1超級終端的結(jié)果:16</p>
9、<p> 4.4.2串口大師的結(jié)果:16</p><p> 4.5所用到的相關(guān)寄存器17</p><p> 五.優(yōu)勢與不足17</p><p><b> 六.代碼實現(xiàn)17</b></p><p> 6.1LED走馬燈與按鍵控制LED燈的代碼匯總17</p><p>
10、 6.2UART通信19</p><p> 6.2.1 main.c19</p><p> 6.2.2 uart.c20</p><p> 6.2.13uart.c21</p><p><b> 七.心得體會23</b></p><p> 一、課程設(shè)計基本要求</p>
11、;<p><b> 1.1課程設(shè)計目的</b></p><p> 注重培養(yǎng)學生綜合運用所學知識、獨立分析和解決實際問題的能力,培養(yǎng)創(chuàng)新意識和創(chuàng)新能力,并獲得科學研究的基礎(chǔ)訓練。</p><p> 了解所選擇的ARM芯片各個引腳功能,工作方式,計數(shù)/定時、I/O口、終端等相關(guān)原理,并鞏固學習嵌入式的相關(guān)內(nèi)容知識。</p><p&g
12、t; 通過軟件的設(shè)計實現(xiàn)利用ARM芯片對按鍵、LED、UART的操作</p><p><b> 1.2基本要求</b></p><p> 查閱相關(guān)文獻資料,熟悉所選ARM芯片各個硬件連接的寄存器操作及配置。</p><p><b> 總體設(shè)計方案規(guī)劃</b></p><p> 能夠熟練看懂
13、硬件原理圖,理解并明白按鍵、LED、UART的硬件連接原理及操作方法。</p><p> 系統(tǒng)軟件設(shè)計,包括按鍵響應(yīng)、LED控制、UART操作的軟件實現(xiàn),用C語言編程實現(xiàn)。</p><p><b> 設(shè)計心得體會及總結(jié)</b></p><p> 二ARM裸機開發(fā)環(huán)境搭建及配置</p><p><b>
14、2.1所需要的軟件</b></p><p> 虛擬機、CuteFTP、USB下載驅(qū)動FriendlyARM USB Download Driver Setup_20090421、</p><p> dnw、SecureCRT、超級終端</p><p><b> 2.2所需硬件</b></p><p>&
15、lt;b> 嵌入式的試驗箱</b></p><p><b> 2.3燒寫SD卡</b></p><p> 2.3.1需要用到一個軟件SD-Flasher、和一個Superboot-6410.bin文件</p><p> 打開SD-Flasher軟件會出現(xiàn)</p><p><b> 2
16、.3.2在第一個</b></p><p> 選擇Superboot-6410.bin文件</p><p> 2.3.3點擊Scane,如若第三個Reports沒有錯誤則少些成功、否則不成功;</p><p> 2.3.4在超級終端檢查SD卡是否燒好,如若將SD卡在嵌入式箱子連上以后出現(xiàn)如下圖所示,則表示SD卡已經(jīng)燒好。</p><
17、;p> 2.4配置虛擬機環(huán)境</p><p> 2.4.1系統(tǒng)—管理—防火墻,點擊禁用,應(yīng)用;</p><p> 2.4.2系統(tǒng)—管理—服務(wù),將vsftpd啟用;</p><p> 2.4.找到并用tar解壓arm-linux-gcc-4.5.1-v6-vfp-2.1.103.tgz,</p><p> 并找到解壓文件所在的文
18、件夾,可以看到我們以后有編譯所用到的各種文件:</p><p> 2.4.4找到解壓的絕對路徑</p><p> 2.4.5執(zhí)行vi /etc/profile 在文件的最后加入如圖所示的代碼:</p><p> 2.4.6執(zhí)行命令vi /etc/vsftpd/vsftpd.conf</p><p><b> 進行如下修改:&
19、lt;/b></p><p> 2.4.7更新已經(jīng)配置好的環(huán)境變量</p><p><b> 三、LED燈</b></p><p><b> 3.1走馬燈</b></p><p><b> 3.1.1原理圖</b></p><p><
20、b> 3.1.2操作方法</b></p><p> 先將代碼由ftp上傳到虛擬機中。</p><p> 在虛擬機中找到這個文件。</p><p> 用命令make編譯這幾個文件編譯完如圖所示:</p><p> 將編譯完的文件中的main.bin用ftp拷到F盤的hh文件夾中</p><p>
21、; 將SD卡插到板子中,連接板子。</p><p> 用usb下載驅(qū)動的FriendlyARM USB Download Driver Setup_20090421連接板子上的驅(qū)動。</p><p> 打開超級終端連接板子,確認SD卡已經(jīng)連接無錯誤,輸入d,如圖所示:</p><p> 打開dnw,點擊第二個USB Port 中的Transmit/Resto
22、re,選擇剛在保存到hh文件夾中的main.bin文件。</p><p><b> 3.1.3測試結(jié)果</b></p><p> 3.2按鍵控制LED的亮與滅</p><p><b> 3.2.1原理圖</b></p><p><b> 3.2.2操作方法</b><
23、;/p><p> 參考3.1.2的操作方法</p><p><b> 3.2.3測試結(jié)果</b></p><p> 3.3LED燈所用到的相關(guān)寄存器</p><p><b> 四.UART通信</b></p><p><b> 4.1原理圖</b>
24、</p><p> 4.2與硬件連接寄存器配置</p><p> 4.2.1. 設(shè)置各PLL的LOCK_TIME,使用默認值 </p><p> APLL_LOCK = 0xffff;// APLL_LOCK,供cpu使用 </p><p> MPLL_LOCK = 0xffff;// MPLL_LOCK,
25、供AHB(存儲/中斷 /lcd等控制器)或者APB(看門狗,定時器,SD等)總線上的設(shè)備使用</p><p> EPLL_LOCK = 0xffff;// EPLL_LOCK,供UART,IIS,IIC使用 </p><p> 4.2.2 設(shè)置為異步模式(Asynchronous mode) </p><p> OTHERS &a
26、mp;= ~0xc0; //《linux installation for u-boot》3.7中:用MPLL作為HCLK和PCLK的Source是異步(ASYNC)模式,用APLL是同步(SYNC)模式</p><p> while ((OTHERS & 0xf00) != 0);</p><p> 4.2.3. 設(shè)置分頻系數(shù)
27、</p><p> CLK_DIV0 = (ARM_RATIO) | (MPLL_RATIO << 4) | (HCLK_RATIO << 8) | (HCLKX2_RATIO << 9) | (PCLK_RATIO << 12);</p><p> 4.2.4. 設(shè)置PLL,放大時鐘 </p><p> AP
28、LL_CON = APLL_CON_VAL; </p><p> MPLL_CON = MPLL_CON_VAL; </p><p> 4.2.5. 選擇PLL的輸出作為時鐘源 </p><p> CLK_SRC = 0x03;</p><p><b> 4.3操作方法</b></p><
29、p> 參考3.1.2的操作方法</p><p><b> 4.4測試結(jié)果</b></p><p> 4.4.1超級終端的結(jié)果:</p><p> 4.4.2串口大師的結(jié)果:</p><p> 4.5所用到的相關(guān)寄存器</p><p><b> 五.優(yōu)勢與不足</b
30、></p><p> 優(yōu)勢:我們將基本的LED燈的走馬燈和按鍵控制都實現(xiàn)了,還有UART的串口也可以實現(xiàn)輸出我們組員的名字和按鍵a則輸出b的功能。</p><p> 不足:UART只能以字母的形式輸出組員的名字,而不是以中文簡體的形式輸出。</p><p><b> 六.代碼實現(xiàn)</b></p><p>
31、6.1LED走馬燈與按鍵控制LED燈的代碼匯總</p><p> #define GPKCON (*(volatile unsigned long *)0x7F008800)</p><p> #define GPKDAT (*(volatile unsigned long *)0x7F008808)</p><p> #define GPNCON (*(vo
32、latile unsigned long *)0x7F008830)</p><p> #define GPNDAT (*(volatile unsigned long *)0x7F008834)</p><p> void delay()</p><p><b> {</b></p><p> volatile
33、 int i = 0x100000;</p><p> while (i--);</p><p><b> }</b></p><p> void main(void)</p><p><b> {</b></p><p> int dat =0;</p>
34、;<p><b> int i;</b></p><p> for(i=0;i<3;i++)</p><p><b> {</b></p><p> GPKDAT = 0xE0;//二進制11100000;</p><p><b> delay();</
35、b></p><p> GPKDAT = 0xD0;//11010000</p><p><b> delay();</b></p><p> GPKDAT = 0xB0;//10110000</p><p><b> delay();</b></p><p>
36、 GPKDAT = 0x70;//1110000</p><p><b> delay();</b></p><p><b> }</b></p><p> GPKCON=0x11110000;//所有燈都滅的;</p><p> GPKDAT=0x000000f0;</p>
37、<p><b> GPNCON=0;</b></p><p><b> while(1)</b></p><p><b> {</b></p><p> dat = GPNDAT;</p><p> if(dat & (1<<0))&l
38、t;/p><p> GPKDAT |= 1<<4;</p><p><b> else</b></p><p> GPKDAT &= ~(1<<4);</p><p> if(dat & (1<<1))</p><p> GPKDAT |=
39、 1<<5;</p><p><b> else</b></p><p> GPKDAT &= ~(1<<5);</p><p> if(dat & (1<<2))</p><p> GPKDAT |= (1<<6);</p><
40、p><b> else</b></p><p> GPKDAT &= ~(1<<6);</p><p> if(dat & (1<<3))</p><p> GPKDAT |= 1<<7;</p><p><b> else</b>
41、</p><p> GPKDAT &= ~(1<<7);</p><p><b> }</b></p><p><b> }</b></p><p><b> 6.2UART通信</b></p><p> 6.2.1 mai
42、n.c</p><p> #include "uart.h"</p><p> #define GPKCON0 (*(volatile unsigned long *)0x7F008800)</p><p> #define GPKDAT (*(volatile unsigned long *)0x7F008808)</p>
43、<p> #define GPNCON (*(volatile unsigned long *)0x7F008830)</p><p> #define GPNDAT (*(volatile unsigned long *)0x7F008834)</p><p> void say(char s[],int j){</p><p><b>
44、 int i;</b></p><p> putchar('\n');</p><p> for(i=0;i<j;i++){</p><p> putchar(s[i]);</p><p><b> }</b></p><p> putchar(
45、9;\n');</p><p><b> }</b></p><p> int main()</p><p><b> {</b></p><p> int dat = 0;</p><p><b> char c;</b></p
46、><p> char s[] = "zu yuan: houboyu tianzhuoying liujiayu lizhipeng";</p><p> char s1[] = "xiao huo ban: Sorry!";</p><p> char s2[] = " test :";</p&
47、gt;<p> init_uart();</p><p> say(s,48);</p><p> say(s1,20);</p><p> say(s2,8);</p><p> // 配置GPK4-7為輸出功能</p><p> GPKCON0 = 0x11110000;</p>
48、;<p> // 所有LED熄滅</p><p> GPKDAT = 0x000000f0;</p><p><b> while (1)</b></p><p><b> {</b></p><p> c = getchar();</p><p>
49、 if (c=='1'){if(GPKDAT&(1<<4))GPKDAT &=~(1<<4); else GPKDAT |=(1<<4); } </p><p> else if (c=='2'){if(GPKDAT&(1<<5))GPKDAT &=~(1<<5); else GPKDA
50、T |=(1<<5); } </p><p> else if (c=='3'){if(GPKDAT&(1<<6))GPKDAT &=~(1<<6); else GPKDAT |=(1<<6); } </p><p> else if (c=='4'){if(GPKDAT&(1&
51、lt;<7))GPKDAT &=~(1<<7); else GPKDAT |=(1<<7); } </p><p> else if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))</p><p> pu
52、tchar(c+1);</p><p><b> else</b></p><p> putchar(c);</p><p> int i=100;</p><p> while(i--);</p><p> //GPKDAT = 0x000000f0;</p><
53、p><b> }</b></p><p><b> return 0;</b></p><p><b> }</b></p><p> 6.2.2 uart.c</p><p> // 功能:初始化串口</p><p> #includ
54、e "uart.h" </p><p> #define ULCON0 (*((volatile unsigned long *)0x7F005000))</p><p> #define UCON0 (*((volatile unsigned long *)0x7F005004))</p><p> #define UF
55、CON0 (*((volatile unsigned long *)0x7F005008))</p><p> #define UMCON0 (*((volatile unsigned long *)0x7F00500C))</p><p> #define UTRSTAT0 (*((volatile unsigned long *)0x7F005010))<
56、/p><p> #define UFSTAT0 (*((volatile unsigned long *)0x7F005018))</p><p> #define UTXH0 (*((volatile unsigned char *)0x7F005020))</p><p> #define URXH0 (*((volatile uns
57、igned char *)0x7F005024))</p><p> #define UBRDIV0 (*((volatile unsigned short *)0x7F005028))</p><p> #define UDIVSLOT0 (*((volatile unsigned short *)0x7F00502C))</p><p> #def
58、ine GPACON (*((volatile unsigned long *)0x7F008000))</p><p> void init_uart(void)</p><p><b> {</b></p><p> /* 1. 配置引腳 */</p><p> GPACON &= ~0xff
59、;</p><p> GPACON |= 0x22;</p><p> /* 2. 設(shè)置數(shù)據(jù)格式等 */</p><p> ULCON0 = 0x3; // 數(shù)據(jù)位:8, 無校驗, 停止位: 1, 8n1 </p><p> UCON0 = 0x5; // 時鐘:PCLK,禁止中斷,使能UART發(fā)送、接收 &
60、lt;/p><p> UFCON0 = 0x01; // FIFO ENABLE</p><p> UMCON0 = 0;// 無流控</p><p> /* 3. 設(shè)置波特率 */</p><p> // DIV_VAL = (PCLK / (bps x 16 ) ) - 1 = (66500000/(115200
61、x16))-1 = 35.08</p><p> // DIV_VAL = 35.08 = UBRDIVn + (num of 1’s in UDIVSLOTn)/16 </p><p> UBRDIV0 = 35;</p><p> UDIVSLOT0 = 0x1;</p><p><b> }</b>&l
62、t;/p><p> /* 接收一個字符 */</p><p> char getchar(void)</p><p><b> {</b></p><p> while ((UFSTAT0 & 0x7f) == 0); // 如果RX FIFO空,等待 </p><p> retu
63、rn URXH0; // 取數(shù)據(jù) </p><p><b> }</b></p><p> /* 發(fā)送一個字符 */</p><p> void putchar(char c)</p><p><b> {</b></p><p>
64、 while (UFSTAT0 & (1<<14)); // 如果TX FIFO滿,等待 </p><p> UTXH0 = c; // 寫數(shù)據(jù) </p><p><b> }</b></p><p> 6.2.13uart.c</p><p>
65、 // 功能:c語言初始化時鐘</p><p> #define APLL_LOCK (*((volatile unsigned long *)0x7E00F000))</p><p> #define MPLL_LOCK (*((volatile unsigned long *)0x7E00F004))</p><p> #define EPLL_LOCK
66、(*((volatile unsigned long *)0x7E00F008))</p><p> #define OTHERS (*((volatile unsigned long *)0x7e00f900))</p><p> #define CLK_DIV0 (*((volatile unsigned long *)0x7E00F020))</p><
67、;p> #define ARM_RATIO 0 // ARMCLK = DOUTAPLL / (ARM_RATIO + 1) = 532/(0+1) = 532 MHz</p><p> #define MPLL_RATIO 0 // DOUTMPLL = MOUTMPLL / (MPLL_RATIO + 1) = 532/(0+1) = 532
68、MHz</p><p> #define HCLKX2_RATIO 1 // HCLKX2 = HCLKX2IN / (HCLKX2_RATIO + 1) = 532/(1+1) = 266 MHz</p><p> #define HCLK_RATIO 1 // HCLK = HCLKX2 / (HCLK_RATIO + 1) = 2
69、66/(1+1) = 133 MHz</p><p> #define PCLK_RATIO 3 // PCLK = HCLKX2 / (PCLK_RATIO + 1) = 266/(3+1) = 66.5 MHz</p><p> #define APLL_CON (*((volatile unsigned long *)0x7E00F00C))
70、</p><p> #define APLL_CON_VAL ((1<<31) | (266 << 16) | (3 << 8) | (1))</p><p> #define MPLL_CON (*((volatile unsigned long *)0x7E00F010))</p><p> #define MPLL
71、_CON_VAL ((1<<31) | (266 << 16) | (3 << 8) | (1))</p><p> #define CLK_SRC (*((volatile unsigned long *)0x7E00F01C))</p><p> void clock_init(void)</p><p><b&
72、gt; {</b></p><p> /* 1. 設(shè)置各PLL的LOCK_TIME,使用默認值 */</p><p> APLL_LOCK = 0xffff;// APLL_LOCK,供cpu使用 </p><p> MPLL_LOCK = 0xffff;// MPLL_LOCK,供AHB(存儲/中斷/lcd等控制器
73、)/APB(看門狗,定時器,SD等)總線上的設(shè)備使用</p><p> EPLL_LOCK = 0xffff;// EPLL_LOCK,供UART,IIS,IIC使用 </p><p> /* 2. 設(shè)置為異步模式(Asynchronous mode) */</p><p> OTHERS &= ~0xc0;//《linux
74、 installation for u-boot》3.7中:用MPLL作為HCLK和PCLK的Source是異步(ASYNC)模式,用APLL是同步(SYNC)模式</p><p> while ((OTHERS & 0xf00) != 0);</p><p> /* 3. 設(shè)置分頻系數(shù) */</p><p> CLK_DIV0 = (ARM_RATI
75、O) | (MPLL_RATIO << 4) | (HCLK_RATIO << 8) | (HCLKX2_RATIO << 9) | (PCLK_RATIO << 12);</p><p> /* 4. 設(shè)置PLL,放大時鐘 */</p><p> APLL_CON = APLL_CON_VAL; </p><p&
76、gt; MPLL_CON = MPLL_CON_VAL; </p><p> /* 5. 選擇PLL的輸出作為時鐘源 */</p><p> CLK_SRC = 0x03;</p><p><b> }</b></p><p><b> 七.心得體會</b></p><
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 流水燈課程設(shè)計
- 流水燈課程設(shè)計
- 流水燈課程設(shè)計
- 花樣流水燈課程設(shè)計
- plc課程設(shè)計--流水燈
- 流水燈課程設(shè)計告
- 流水燈課程設(shè)計 (2)
- 花樣流水燈課程設(shè)計
- 課程設(shè)計---流水燈設(shè)計報告
- eda課程設(shè)計----流水燈設(shè)計
- 簡易音樂流水燈課程設(shè)計
- eda流水燈電路課程設(shè)計
- 心形流水燈課程設(shè)計
- 課程設(shè)計--流水燈設(shè)計與制作
- 十位流水燈課程設(shè)計
- 課程設(shè)計--多功能流水燈
- 單片機流水燈課程設(shè)計
- 單片機課程設(shè)計---流水燈
- dsp_流水燈的課程設(shè)計
- 流水燈課程設(shè)計--流水彩燈控制器
評論
0/150
提交評論