第一篇:嵌入式實(shí)訓(xùn) LED顯示+文件系統(tǒng)定制實(shí)驗(yàn)報(bào)告
LED顯示控制+文件系統(tǒng)定制
系
名:
專
業(yè):
指導(dǎo)教師:
姓
名:
學(xué)
號(hào):
班
級(jí):
組
員:
科
目:
二○一 年 月
目 錄
一、設(shè)計(jì)任務(wù)和技術(shù)要求:.....................................................................................................................二、器件介紹……………………………………………………………………………………………
三、設(shè)計(jì)代碼:………………………………………………………………………………………….四、設(shè)計(jì)結(jié)果:.......................................................................................................................................五、系統(tǒng)評(píng)價(jià):.......................................................................................................................................六、心得體會(huì):.......................................................................................................................................一、設(shè)計(jì)任務(wù)和技術(shù)要求: ? 編寫LED驅(qū)動(dòng)程序,驅(qū)動(dòng)程序采用手動(dòng)定義設(shè)備名稱(自己姓名拼音_led)和主設(shè)備號(hào),設(shè)備號(hào)必須是系統(tǒng)尚未使用的設(shè)備號(hào) ? 編寫對(duì)應(yīng)驅(qū)動(dòng)的makefile文件
? 將驅(qū)動(dòng)程序編譯成模塊,并實(shí)現(xiàn)模塊的加載及卸載
? 編寫驅(qū)動(dòng)測(cè)試程序,要求運(yùn)行該測(cè)試程序后,能夠?qū)ed設(shè)備打開成功與否做出判斷;能夠顯示led控制菜單選項(xiàng)(至少2個(gè)控制選項(xiàng)),例如,選擇“1”,led等循環(huán)點(diǎn)亮;選擇“2”,指定led1燈點(diǎn)亮
? 編寫對(duì)應(yīng)測(cè)試程序的makefile 文件
文件系統(tǒng)定制 要求:
? 制作文件系統(tǒng)類型為yaffs的文件系統(tǒng); ? 文件系統(tǒng)啟動(dòng)時(shí)顯示小組成員信息; ? 文件系統(tǒng)啟動(dòng)時(shí)需要按提示輸入用戶名信息;
? 文件系統(tǒng)成功掛載后,通過串口傳送剛剛編寫的led控制程序,并運(yùn)行該led控制程序,要求能夠按照規(guī)定的控制方式實(shí)現(xiàn)led燈的控制
二、設(shè)計(jì)代碼
程序清單:
應(yīng)用程序測(cè)試leds_test.c如下:
#include
#define IOCTL_LED_ON 1 #define IOCTL_LED_OFF 5 #define IOCTL_LED_RUN 3
void usage(char *exename){ printf(“Usage:n”);printf(“
%s
led_no = 1, 2, 3 or 4n”);}
int main(int argc, char **argv){ unsigned int led_no;int fd =-1;
unsigned int count=10;
if(argc > 3 || argc == 1)
goto err;
fd = open(“/dev/cylled”, 0);// 打開設(shè)備
if(fd < 0){
printf(“Can't open /dev/fdwled,n”);
return-1;}
if(argc == 2){
if(!strcmp(argv[1], “run”))
{
ioctl(fd, IOCTL_LED_RUN, count);
//運(yùn)行跑馬燈
} else {
goto err;
} }
if(argc == 3){
led_no = strtoul(argv[1], NULL, 0)-1;
// 操作哪個(gè)LED?
if(led_no > 3)
goto err;
if(!strcmp(argv[2], “on”)){
ioctl(fd, IOCTL_LED_ON, led_no);
// 點(diǎn)亮
} else if(!strcmp(argv[2], “off”)){
ioctl(fd, IOCTL_LED_OFF, led_no);
// 熄滅
} else {
goto err;
} }
close(fd);return 0;
err:
按鍵驅(qū)動(dòng):
/* * linux/drivers/char/mini210_buttons.c * * This program is free software;you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation.*/
#include
#include
#define DEVICE_NAME “buttons”
struct button_desc { int gpio;int number;char *name;struct timer_list timer;};
static struct button_desc buttons[] = { { S5PV210_GPH2(0), 0, “KEY0” }, { S5PV210_GPH2(1), 1, “KEY1” }, { S5PV210_GPH2(2), 2, “KEY2” }, { S5PV210_GPH2(3), 3, “KEY3” }, { S5PV210_GPH3(0), 4, “KEY4” }, { S5PV210_GPH3(1), 5, “KEY5” }, { S5PV210_GPH3(2), 6, “KEY6” }, { S5PV210_GPH3(3), 7, “KEY7” },static volatile char key_values[] = { '0', '0', '0', '0', '0', '0', '0', '0' };
static DECLARE_WAIT_QUEUE_HEAD(button_waitq);
static volatile int ev_press = 0;
static void mini210_buttons_timer(unsigned long _data){ struct button_desc *bdata =(struct button_desc *)_data;int down;int number;unsigned tmp;
tmp = gpio_get_value(bdata->gpio);
/* active low */ down =!tmp;printk(“KEY %d: %08xn”, bdata->number, down);
number = bdata->number;if(down!=(key_values[number] & 1)){ key_values[number] = '0' + down;
ev_press = 1;wake_up_interruptible(&button_waitq);} }
static irqreturn_t button_interrupt(int irq, void *dev_id){ struct button_desc *bdata =(struct button_desc *)dev_id;mod_timer(&bdata->timer, jiffies + msecs_to_jiffies(40));
return IRQ_HANDLED;}
static int mini210_buttons_open(struct inode *inode, struct file *file){ int irq;int i;int err = 0;
for(i = 0;i < ARRAY_SIZE(buttons);i++){ if(!buttons[i].gpio)continue;
setup_timer(&buttons[i].timer, mini210_buttons_timer,(unsigned long)&buttons[i]);
irq = gpio_to_irq(buttons[i].gpio);err = request_irq(irq, button_interrupt, IRQ_TYPE_EDGE_BOTH, buttons[i].name,(void *)&buttons[i]);if(err)break;} if(err){ i--;for(;i >= 0;i--){ if(!buttons[i].gpio)continue;
irq = gpio_to_irq(buttons[i].gpio);disable_irq(irq);free_irq(irq,(void *)&buttons[i]);del_timer_sync(&buttons[i].timer);}
return-EBUSY;}
ev_press = 1;return 0;}
static int mini210_buttons_close(struct inode *inode, struct file *file){ int irq, i;
for(i = 0;i < ARRAY_SIZE(buttons);i++){ if(!buttons[i].gpio)continue;
irq = gpio_to_irq(buttons[i].gpio);free_irq(irq,(void *)&buttons[i]);
del_timer_sync(&buttons[i].timer);} return 0;}
static int mini210_buttons_read(struct file *filp, char __user *buff, size_t count, loff_t *offp){ unsigned long err;
if(!ev_press){ if(filp->f_flags & O_NONBLOCK)else wait_event_interruptible(button_waitq, ev_press);}
ev_press = 0;
err = copy_to_user((void *)buff,(const void *)(&key_values), min(sizeof(key_values), count));
return err ?-EFAULT : min(sizeof(key_values), count);}
static unsigned int mini210_buttons_poll(struct file *file, struct poll_table_struct *wait){ unsigned int mask = 0;
poll_wait(file, &button_waitq, wait);if(ev_press)mask |= POLLIN | POLLRDNORM;
return mask;}
static struct file_operations dev_fops = {.owner = THIS_MODULE,.open = mini210_buttons_open,.release = mini210_buttons_close,.read = mini210_buttons_read,.poll = mini210_buttons_poll, };
static struct miscdevice misc = {.minor = MISC_DYNAMIC_MINOR,.fops = &dev_fops, };
static int __init button_dev_init(void){ int ret;
ret = misc_register(&misc);
printk(DEVICE_NAME“tinitializedn”);
return ret;}
static void __exit button_dev_exit(void){ misc_deregister(&misc);}
module_init(button_dev_init);module_exit(button_dev_exit);
MODULE_LICENSE(“GPL”);MODULE_AUTHOR(“FriendlyARM Inc.”);程序cylled.c如下(基于實(shí)驗(yàn)11的代碼進(jìn)行更改):
#include
#include #define DEVICE_NAME “cylled” #define LED_MAJOR 222 #define IOCTL_LED_ON 1 #define IOCTL_LED_OFF 5 #define IOCTL_LED_RUN 3 %定義三個(gè)宏 #define LED_NUM ARRAY_SIZE(led_gpios) static int led_gpios[]={ S5PV210_GPJ2(0), S5PV210_GPJ2(1), S5PV210_GPJ2(2), S5PV210_GPJ2(3), }; static long mini210_leds_ioctl(struct file *filp,unsigned int cmd,unsigned long arg){ int i;int j;switch(cmd){ case IOCTL_LED_RUN: %定義RUN,用了兩個(gè)for循環(huán)。 for(i=0;i { for(j=0;j<4;j++) { gpio_set_value(led_gpios[j],0); msleep(100); gpio_set_value(led_gpios[j],1); } } break; case IOCTL_LED_ON: if(arg>LED_NUM) { return-EINVAL; } gpio_set_value(led_gpios[arg],0); break; case IOCTL_LED_OFF: if(arg>LED_NUM) { return-EINVAL; } gpio_set_value(led_gpios[arg],1); break; default: return-EINVAL;} return 0;} static struct file_operations mini210_led_dev_fops={.owner =THIS_MODULE,.unlocked_ioctl =mini210_leds_ioctl, }; static int __init mini210_led_dev_init(void){ int ret;int i;for(i=0;i ret=gpio_request(led_gpios[i],“LED”); if(ret) { printk(“%s: request GPIO %d for LED failed, ret=%dn”,DEVICE_NAME ,led_gpios[i],ret); return ret; } s3c_gpio_cfgpin(led_gpios[i],S3C_GPIO_OUTPUT); gpio_set_value(led_gpios[i],1);} ret=register_chrdev(LED_MAJOR,DEVICE_NAME,&mini210_led_dev_fops);if(ret<0){ printk(“%s can't register major numbern”,DEVICE_NAME); return ret;} return 0;} static void __exit mini210_led_dev_exit(void){ int i;for(i=0;i gpio_free(led_gpios[i]); } unregister_chrdev(LED_MAJOR,DEVICE_NAME);} module_init(mini210_led_dev_init);module_exit(mini210_led_dev_exit); MODULE_LICENSE(“GPL”);MODULE_AUTHOR(“cyl”); 五.設(shè)計(jì)結(jié)果: Makefile Serial COM1 命令代碼 第一盞燈亮 第二盞燈亮 第三盞燈亮 顯示小組成員信息(文件系統(tǒng)) 用戶名122014021登陸 加載驅(qū)動(dòng) 創(chuàng)建設(shè)備名 卸載驅(qū)動(dòng) 運(yùn)行跑馬燈命令 點(diǎn)燈關(guān)燈 6.心得體會(huì): 在了解了基礎(chǔ)知識(shí)之后,我開始進(jìn)行上機(jī)操作,當(dāng)然,其中遇到很多的難題,很多東西都是第一次接觸,又沒有別人在旁邊指導(dǎo)操作,完全憑借自己去摸索練習(xí)。其 中的困難可想而知。然而堅(jiān)持就是勝利,牙一咬眼一閉堅(jiān)持做下去,而通過本次實(shí)驗(yàn),我感覺收獲還是蠻多的??赡芪覍?duì)于嵌入式的知識(shí)學(xué)習(xí)的還是不太多,但是這 之外的東西收獲頗豐。它讓我學(xué)會(huì)了如何通過自己的努力去認(rèn)知一個(gè)新事物,更重要的是端正自己的學(xué)習(xí)態(tài)度,只有真正下功夫去學(xué)習(xí),才能有收獲,正所謂“一份 耕耘,一份收獲?!睕]有付出,何談回報(bào)呢?再者,通過本次實(shí)驗(yàn),我也學(xué)會(huì)了如何去分析問題,如何找出自己設(shè)計(jì)中的不足,繼而去排除解決問題,這就是一個(gè)自 我學(xué)習(xí)的過程。當(dāng)我們通過實(shí)驗(yàn)去學(xué)習(xí)理論知識(shí)時(shí),自己動(dòng)手得出的結(jié)論,不僅能加深我們對(duì)嵌入式的理解,更能加深我們對(duì)此的記憶。學(xué)習(xí)到一個(gè)實(shí)驗(yàn)的完成過程。更深刻地了解arm的工作原理及其應(yīng)用,對(duì)比出之前單片機(jī)系統(tǒng)應(yīng)用的不同。 桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 J-LINK 仿真器設(shè)置 設(shè)置步驟: 1.連接J-LINL仿真器USB到電腦。J-LINK仿真器指示燈閃爍,電腦開始自動(dòng)安裝驅(qū)動(dòng)程序,完成驅(qū)動(dòng)程序安裝后指示燈常亮。2.連接J-LINL仿真器的JTAG扁平排線到LPC22EB06-I實(shí)驗(yàn)系統(tǒng)的JTAG模塊CON19插座。連接完成后D12貼片LED常亮。3.連接LPC22EB06-I實(shí)驗(yàn)系統(tǒng)左側(cè)USB供電接口到電腦,將LPC22EB06-I實(shí)驗(yàn)系統(tǒng)右下角的電源開關(guān)打到“ON”狀態(tài)。此時(shí)系統(tǒng)上電,左下角的D4 LED燈亮度。4.將LPC22EB06-I實(shí)驗(yàn)系統(tǒng)右下角的SW1撥碼開關(guān)S3撥到“ON”,其余全為“OFF”。5.在電腦上打開KEIL 4軟件,建立一個(gè)工程,并新建一個(gè)C文件添加到工程中。 6.點(diǎn)擊“Project”-“Options for Target ‘Target 1’”-Debug 選項(xiàng)卡,點(diǎn)擊選擇右側(cè)的Use,然后在下拉列表中選擇“J-LINK/J-TRACE”。再點(diǎn)擊“Settings”按鈕。在彈出的“J-LINK/JTrace Interface Driver Setup”對(duì)話框中點(diǎn)擊右下方的“Target”按鈕,如果彈出的信息中“ARM CPU ID:”為“0x4F1F0F0F”,說明目標(biāo)芯片連接成功,否則請(qǐng)檢查原因。點(diǎn)擊“OK”按鈕確定。7.返回“Options for Target ‘Target 1’”對(duì)話框,選擇`“Utilities”選項(xiàng)卡,單擊選擇“Use Target Driver for Flash Programming”, 然后在下拉列表中選擇“J-LINK/J-TRACE”。勾選“Update Target before Debugging”選項(xiàng)。至此J-LINK仿真設(shè)置完成。 注意事項(xiàng): LPC22EB06-I實(shí)驗(yàn)系統(tǒng)外部時(shí)鐘:Fosc = 10 MHz Fcclk = 50 MHz Pclk = Fcclk/4 桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 實(shí)驗(yàn)一 GPIO輸出實(shí)驗(yàn)(2學(xué)時(shí)) 一、實(shí)驗(yàn)?zāi)康?/p> 1、了解ARM7TDMI內(nèi)核處理器。 2、掌握在Keil軟件中編制源程序。 3、掌握在Keil軟件調(diào)試源程序。 4、掌握在LPC22EB6-I實(shí)驗(yàn)系統(tǒng)的使用。 二、實(shí)驗(yàn)內(nèi)容 1、基本要求: 編寫程序驅(qū)動(dòng)LPC22EB6-I實(shí)驗(yàn)系統(tǒng)上的D5、D6 LED 閃爍。 2、擴(kuò)展要求: 編寫延時(shí)子程序,使得D5、D6的閃爍頻率約為1Hz和0.5Hz。 三、硬件電路 圖1 LED電路 四、基本要求源程序 #include PINSEL2 = 0x04; //包含所需的文件 IO2DIR |=(1 << 23);IO2DIR |=(1 << 24); 桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 while(1){for(j=0;j<6;j++) { if(0 ==(IO2PIN &(1 << 23)))IO2SET |=(1 << 23); } {if(0 ==(IO2PIN &(1 << 24)))IO2SET |=(1 << 24); else IO2CLR |=(1 << 24);for(i=0;i<1000000;i++);for(i=0;i<1000000;i++);else IO2CLR |=(1 << 23); for(j=0;j<6;j++) }//end of for }//end of while }//end of main 五、基本實(shí)驗(yàn)步驟 1.打開Keil軟件,新建立一個(gè)工程Lab01.uvproj,在Select Device for Target ‘Target 1’對(duì)話框的‘Data base’選擇“NXP(founder by Philips)”中的‘LPC2294’芯片。確定后彈出的確認(rèn)框,選擇“是”。2.新建一個(gè)后綴名為.c文件,輸入上述源代碼,編譯。 3.按《J-LINK 仿真器設(shè)置》設(shè)置好J-LINK仿真器; 4.點(diǎn)擊“Project”-“Options for Target ‘Target 1’”-Output 選項(xiàng)卡, 勾選擇“Creat HEX File”,然后編譯連接生成HEX文件。 5.選擇“Debug”-“Start/Stop Debug Session”開始調(diào)試源代碼。選擇“Debug”-“Step”或者按F11可單步調(diào)試程序。選擇“Debug”-“Run”或者F5全速運(yùn)行程序。觀察運(yùn)行輸出情況,修改程序。 六、擴(kuò)展實(shí)驗(yàn)要求 1.理解基本要求實(shí)驗(yàn)源程序,將基本要求的閃爍周期調(diào)整到約1Hz和0.5Hz。2.根據(jù)實(shí)驗(yàn)內(nèi)容的擴(kuò)展要求,在Keil軟件中編寫該要求的源程序。 3.編譯通過并產(chǎn)生機(jī)器碼,下載到LPC22EB6-I實(shí)驗(yàn)系統(tǒng),并運(yùn)行看實(shí)驗(yàn)現(xiàn)象。 七、實(shí)驗(yàn)報(bào)告要求 1.預(yù)習(xí)報(bào)告中要體現(xiàn)實(shí)現(xiàn)內(nèi)容的基本要求中的源程序理解,程序框圖繪制和現(xiàn)實(shí)現(xiàn)擴(kuò)展實(shí)驗(yàn)要求的實(shí)現(xiàn)原理。 2.實(shí)驗(yàn)報(bào)告中要體現(xiàn)擴(kuò)展實(shí)驗(yàn)要求的的源程序理解,包括源程序注釋及框圖繪制。3.實(shí)驗(yàn)報(bào)告中要有實(shí)驗(yàn)心得體會(huì)。 桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 實(shí)驗(yàn)二 基于GPIO數(shù)碼管驅(qū)動(dòng)實(shí)驗(yàn)(2學(xué)時(shí)) 一、實(shí)驗(yàn)?zāi)康?/p> 1.2.3.4.了解ARM7TDMI內(nèi)核處理器。掌握在Keil軟件中編制源程序。掌握在Keil軟件調(diào)試源程序。 掌握74HC595芯片工作時(shí)序及動(dòng)態(tài)數(shù)碼管的驅(qū)動(dòng)程序編寫。 二、實(shí)驗(yàn)內(nèi)容 1.基本要求: 在LPC22EB6-I實(shí)驗(yàn)系統(tǒng)上,編寫程序模擬SPI時(shí)序驅(qū)動(dòng)兩個(gè)四位動(dòng)態(tài)共陰數(shù)碼管LAM1、LAM2。顯示內(nèi)容“12345678” 2.擴(kuò)展要求: 編寫程序?qū)崿F(xiàn)動(dòng)態(tài)數(shù)碼顯示的左移、右移、單個(gè)位閃爍功能。 三、硬件電路 圖1 動(dòng)態(tài)數(shù)碼管電路 桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 圖2 74HC595工作時(shí)序圖 四、基本要求源程序 #include (1)(~OUTPUT)(6)(4)(19)(18)(OUTPUT << SDI_BIT)(OUTPUT << SRCLK_BIT)(OUTPUT << RCLK_BIT)(OUTPUT << G_BIT) //共陰數(shù)碼管編碼,#define SRCLK_BIT #define HC595_SDI #define HC595_SRCLK #define HC595_RCLK #define HC595_G unsigned char const LEDSEG[]={ 0x3F, //“0” 0x06, //“1” 0x5B, //“2” 0x4F, //“3” 桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 0x66, //“4” 0x6D, //“5” 0x7D, //“6” 0x07, //“7” 0x7F, //“8” 0x6F, //“9” };unsigned char const LEDDEG[]={0xF7,0xFB,0xFD,0xFE,0x7F,0xBF,0xDF,0xEF};unsigned char Display_Buffer[] = {1,2,3,4,5,6,7,8};void Send_Two_byte(unsigned int Data);void Delay_us(unsigned long int temp);void System_Int(void);/***************************************************************/ int main(void){ } void Send_Two_byte(unsigned int Data){ } void Delay_us(unsigned long int temp) long i;IO2CLR =(IO2CLR & ~(1 << G_BIT))|(1 << G_BIT);for(i=0;i<16;i++){ } IO2SET =(1 << RCLK_BIT);Delay_us(1);IO2CLR =(1 << RCLK_BIT);IO2SET =(1 << G_BIT);if((Data &(1 << 15))==(1 << 15))IO0SET =(1 << SDI_BIT);IO0CLR =(1 << SDI_BIT);else Delay_us(1);IO0SET =(1 << SRCLK_BIT);Delay_us(1);IO0CLR =(1 << SRCLK_BIT);Delay_us(1);Data <<= 1;long i;PINSEL2 = 0x04;System_Int();while(1){ } for(i=0;i //配置J-LINK 桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 { } void System_Int(void){ } IO0DIR = HC595_SDI;IO0DIR = HC595_SRCLK;IO2DIR = HC595_RCLK;IO2DIR = HC595_G;temp = temp*10;while(temp > 0){ } temp--; 五、基本實(shí)驗(yàn)步驟 1.打開Keil軟件,新建立一個(gè)工程Lab02.uvproj,在Select Device for Target ‘Target 1’對(duì)話框的‘Data base’選擇“NXP(founder by Philips)”中的‘LPC2294’芯片。確定后彈出的確認(rèn)框,選擇“是”。2.新建一個(gè)后綴名為.C文件,輸入上述源代碼,編譯。 3.按《J-LINK 仿真器設(shè)置》設(shè)置好J-LINK仿真器。4.點(diǎn)擊“Project”-“Options for Target ‘Target 1’”-Output 選項(xiàng)卡, 勾選擇“Creat HEX File”,然后編譯連接生成HEX文件。 5.選擇“Debug”-“Start/Stop Debug Session”開始調(diào)試源代碼。選擇“Debug”-“Step”或者按F11可單步調(diào)試程序。選擇“Debug”-“Run”或者F5全速運(yùn)行程序。 六、擴(kuò)展實(shí)驗(yàn)要求 1.根據(jù)實(shí)驗(yàn)內(nèi)容的擴(kuò)展要求,理解74HC595工作時(shí)序及SPI協(xié)議原理,繪畫該要求的程序流程圖。2.根據(jù)實(shí)驗(yàn)內(nèi)容的擴(kuò)展要求,在Keil軟件中編寫該要求的源程序。 3.編譯通過并產(chǎn)生機(jī)器碼,下載到LPC22EB6-I實(shí)驗(yàn)系統(tǒng),并運(yùn)行看實(shí)驗(yàn)現(xiàn)象。 七、實(shí)驗(yàn)報(bào)告要求 1.預(yù)習(xí)報(bào)告中要體現(xiàn)實(shí)現(xiàn)內(nèi)容的基本要求中的源程序理解,包括源程序注釋及程序框圖繪制和現(xiàn)實(shí)現(xiàn)擴(kuò)展實(shí)驗(yàn)要求的實(shí)現(xiàn)原理; 2.實(shí)驗(yàn)報(bào)告中要體現(xiàn)擴(kuò)展實(shí)驗(yàn)要求的的源程序理解,包括源程序注釋及程序框圖繪畫; 3.實(shí)驗(yàn)報(bào)告中要有實(shí)驗(yàn)心得體會(huì); 桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 實(shí)驗(yàn)三 GPIO輸入實(shí)驗(yàn)(2學(xué)時(shí)) 一、實(shí)驗(yàn)?zāi)康?/p> 1.了解并掌握Keil軟件的工程設(shè)計(jì)。 2.掌握在Keil軟件中編制源程序、編譯通過并產(chǎn)生機(jī)器碼。3.掌握在LPC22EB6-I實(shí)驗(yàn)系統(tǒng)中運(yùn)行程序。 4.掌握在LPC22EB6-I實(shí)驗(yàn)系統(tǒng)中實(shí)現(xiàn)外部信息號(hào)的輸入及其程序編寫。 二、實(shí)驗(yàn)內(nèi)容 1.基本要求: 利用LPC22EB6-I實(shí)驗(yàn)系統(tǒng)的外部按鈕SW19,SW18手動(dòng)輸入開關(guān)信息,SW19按下一次D5的狀態(tài)轉(zhuǎn)換一次,SW18按下一次D6狀態(tài)轉(zhuǎn)換一次。要求有去抖功能。 2.擴(kuò)展要求: 利用LPC22EB6-I實(shí)驗(yàn)系統(tǒng)的SW2—SW17 4x4鍵盤做為輸入按鍵,并將被按下的按鍵編號(hào)顯示在U17動(dòng)態(tài)數(shù)碼管上。 三、硬件電路 圖1 按鍵電路 圖2 LED輸出電路 桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 圖3 矩陣鍵盤電路 四、基本要求源程序 #include long j;PINSEL2 = 0x04;IO2DIR |=(1 << D5);IO2DIR |=(1 << D6);IO1DIR &=(0 << SW_19);IO1DIR &=(0 << SW_18);IO2SET |=(1 << D5);IO2SET |=(1 << D6);IO1SET |=(1 << SW_19);IO1SET |=(1 << SW_18);while(1){ if((IO1PIN &(1 << SW_19))== 0){ for(j=0;j<10000;j++);if((IO1PIN &(1 << SW_19))== 0){ if((IO2PIN &(1 << D5))== 0)IO2SET |=(1 << D5);IO2CLR |=(1 << D5); else(23)(24)(25)#define SW_18(24)桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 } } } if((IO1PIN &(1 << SW_18))== 0){ } for(j=0;j<10000;j++);if((IO1PIN &(1 << SW_18))== 0){ } if((IO2PIN &(1 << D6))== 0)IO2SET |=(1 << D6);IO2CLR |=(1 << D6);else while((IO1PIN &(1 << SW_18))== 0);} while((IO1PIN &(1 << SW_19))== 0); 五、基本實(shí)驗(yàn)步驟 1.打開Keil軟件,新建立一個(gè)工程Lab03.uvproj,在Select Device for Target ‘Target 1’對(duì)話框的‘Data base’選擇“NXP(founder by Philips)”中的‘LPC2294’芯片。確定后彈出的確認(rèn)框,選擇“是”。2.新建一個(gè)后綴名為.C文件,按照原理圖4和原理圖5編寫輸入上述源代碼,編譯并排除錯(cuò)誤。3.按《J-LINK 仿真器設(shè)置》設(shè)置好J-LINK仿真器; 4.點(diǎn)擊“Project”-“Options for Target ‘Target 1’”-Output 選項(xiàng)卡, 勾選擇“Creat HEX File”,然后編譯連接生成HEX文件。5.選擇“Debug”-“Start/Stop Debug Session”開始調(diào)試源代碼。選擇“Debug”-“Step”或者按F11可單步調(diào)試程序。選擇“Debug”-“Run”或者F5全速運(yùn)行程序。 六、擴(kuò)展實(shí)驗(yàn)要求 1.根據(jù)實(shí)驗(yàn)內(nèi)容的擴(kuò)展要求,理解74HC595、矩陣鍵盤和動(dòng)態(tài)數(shù)碼管工作時(shí)序與原理,繪制該要求的程序流程圖。 2.根據(jù)實(shí)驗(yàn)內(nèi)容的擴(kuò)展要求,在Keil軟件中編寫該要求的源程序。 3.編譯通過并產(chǎn)生機(jī)器碼,下載到LPC22EB6-I實(shí)驗(yàn)系統(tǒng),并運(yùn)行看實(shí)驗(yàn)現(xiàn)象。 七、實(shí)驗(yàn)報(bào)告要求 1.預(yù)習(xí)報(bào)告中要體現(xiàn)實(shí)現(xiàn)內(nèi)容的基本要求中的源程序理解,包括源程序注釋及程序框圖繪制和現(xiàn)實(shí)現(xiàn)擴(kuò)展實(shí)驗(yàn)要求的實(shí)現(xiàn)原理; 2.實(shí)驗(yàn)報(bào)告中要體現(xiàn)擴(kuò)展實(shí)驗(yàn)要求的的源程序理解,包括源程序注釋及程序框圖繪制; 3.實(shí)驗(yàn)報(bào)告中要有實(shí)驗(yàn)心得體會(huì); 桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 實(shí)驗(yàn)四 基于定時(shí)器的LED閃爍實(shí)驗(yàn)(2學(xué)時(shí)) 一、實(shí)驗(yàn)?zāi)康?/p> 1.了解并掌握Keil軟件的工程設(shè)計(jì)。 2.掌握在Keil軟件中編制源程序、編譯通過并產(chǎn)生機(jī)器碼。3.掌握LPC2294處理器的定時(shí)器程序編寫。4.掌握在LPC22EB6-I實(shí)驗(yàn)系統(tǒng)中運(yùn)行程序。 二、實(shí)驗(yàn)內(nèi)容 1.基本要求: 在Keil軟件中編寫基于定時(shí)器的LED閃爍程序,頻率:D5為1Hz,D6為2Hz。 2.擴(kuò)展要求: 在基本要求的基礎(chǔ)上,使用LAM1或者LAM2動(dòng)態(tài)數(shù)碼管設(shè)計(jì)實(shí)現(xiàn)一個(gè)簡(jiǎn)單秒表。 三、硬件電路 圖1 LED輸出電路 桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 圖2動(dòng)態(tài)數(shù)碼管電路 四、基本要求源程序 #include unsigned long temp = 0;PINSEL2 = 0x04;IO2DIR |=(1 << D5);IO2DIR |=(1 << D6);T0TC = 0;T0PR = 10000;T0MCR = 0x06;T0MR0 = 250;while(1){ T0TCR = 0x01;while(T0TCR == 0x01);temp++;if(temp == 2){ } if((IO2PIN &(1 << D6))== 0)IO2SET |=(1 << D6); if((IO2PIN &(1 << D5))== 0)IO2SET |=(1 << D5);IO2CLR |=(1 << D5);else temp = 0; (23)(24) //VPB = Fosc/4=2.5MHz 桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 } } else IO2CLR |=(1 << D6); 五、基本實(shí)驗(yàn)步驟 1.打開Keil軟件,新建立一個(gè)工程Lab04.uvproj,在Select Device for Target ‘Target 1’對(duì)話框的‘Data base’選擇“NXP(founder by Philips)”中的‘LPC2294’芯片。確定后彈出的確認(rèn)框,選擇“是”。2.新建一個(gè)后綴名為.C文件,按照原理圖1和原理圖2編寫輸入上述源代碼,編譯并排除錯(cuò)誤。3.按《J-LINK 仿真器設(shè)置》設(shè)置好J-LINK仿真器; 4.點(diǎn)擊“Project”-“Options for Target ‘Target 1’”-Output 選項(xiàng)卡, 勾選擇“Creat HEX File”,然后編譯連接生成HEX文件。 5.選擇“Debug”-“Start/Stop Debug Session”開始調(diào)試源代碼。選擇“Debug”-“Step”或者按F11可單步調(diào)試程序。選擇“Debug”-“Run”或者F5全速運(yùn)行程序。 六、擴(kuò)展實(shí)驗(yàn)要求 1.根據(jù)實(shí)驗(yàn)內(nèi)容的擴(kuò)展要求,理解74HC595、矩陣鍵盤和動(dòng)態(tài)數(shù)碼管工作時(shí)序與原理,繪制該要求的程序流程圖。 2.根據(jù)實(shí)驗(yàn)內(nèi)容的擴(kuò)展要求,在Keil軟件中編寫該要求的源程序。 3.編譯通過并產(chǎn)生機(jī)器碼,下載到LPC22EB6-I實(shí)驗(yàn)系統(tǒng),并運(yùn)行看實(shí)驗(yàn)現(xiàn)象。 七、實(shí)驗(yàn)報(bào)告要求 1.預(yù)習(xí)報(bào)告中要體現(xiàn)實(shí)現(xiàn)內(nèi)容的基本要求中的源程序理解,包括源程序注釋及程序框圖繪制和現(xiàn)實(shí)現(xiàn)擴(kuò)展實(shí)驗(yàn)要求的實(shí)現(xiàn)原理; 2.實(shí)驗(yàn)報(bào)告中要體現(xiàn)擴(kuò)展實(shí)驗(yàn)要求的源程序理解,包括源程序注釋及程序框圖繪畫; 3.實(shí)驗(yàn)報(bào)告中要有實(shí)驗(yàn)心得體會(huì); 桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 實(shí)驗(yàn)五 外部中斷實(shí)驗(yàn)(2學(xué)時(shí)) 一、實(shí)驗(yàn)?zāi)康?/p> 1.了解并掌握Keil軟件的工程設(shè)計(jì)。 2.掌握在Keil軟件中編制源程序、編譯通過并產(chǎn)生機(jī)器碼。3.掌握LPC2294處理器的外部中斷程序編寫。4.掌握在LPC22EB6-I實(shí)驗(yàn)系統(tǒng)中運(yùn)行程序。 二、實(shí)驗(yàn)內(nèi)容 1.基本要求: 在Keil軟件中編寫外部中斷EXTIN0的中斷程序,并對(duì)中斷進(jìn)行計(jì)數(shù),然后將計(jì)數(shù)值以二進(jìn)制形式從D5、D6輸出。 2.擴(kuò)展要求: 在基本要求的基礎(chǔ)上,編寫基于外部中斷EINT3和矩陣鍵盤的輸入程序。并將按鍵編號(hào)顯示在LAM1或者LAM2動(dòng)態(tài)數(shù)碼管上。 三、硬件電路 圖1按鍵電路 圖2 LED輸出電路 桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 圖2 矩陣鍵盤電路 四、基本要求源程序 #include } void EXTIN0_FIQ(void){ if((IO2PIN &(1 << D5))== 0)IO2SET |=(1 << D5);IO2CLR |=(1 << D5); else PINSEL2 = 0x04;PINSEL1 =(PINSEL1 & ~(3 << 28)|(2 << 28));VICIntSelect =(1 << 17);VICIntEnable =(1 << 17);EXTMODE = EXTMODE|0x08;EXTPOLAR = EXTPOLAR&0x07;IO2DIR |=(1 << D5);IO2SET |=(1 << D5);IO1DIR |=(1 << KEY16);IO1CLR |=(1<< KEY16);while(1); while((EXTINT&(1 << 3))!=0){ EXTINT =(1<<3);桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 } } 在Startup.s 文件 桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 實(shí)驗(yàn)六 PWM實(shí)驗(yàn)(2學(xué)時(shí)) 一、實(shí)驗(yàn)?zāi)康?/p> 1.了解并掌握Keil軟件的工程設(shè)計(jì)。 2.掌握在Keil軟件中編制源程序、編譯通過并產(chǎn)生機(jī)器碼。3.掌握LPC2294處理器PWM波型輸出程序的編寫。4.掌握在LPC22EB6-I實(shí)驗(yàn)系統(tǒng)中運(yùn)行程序。 二、實(shí)驗(yàn)內(nèi)容 1.基本要求: 在Keil軟件中編寫PWM程序。編寫LPC2294程序從PWM3輸出1KHz的PWM信號(hào)驅(qū)動(dòng)蜂鳴器發(fā)出聲音。 2.擴(kuò)展要求: 在基本要求的基礎(chǔ)上,將輸出的PWM信號(hào)驅(qū)動(dòng)直流電機(jī),有關(guān)電路如圖1,圖2所示。并使用《實(shí)驗(yàn)3》圖1中的SW18或者SW19按鍵實(shí)現(xiàn)對(duì)直流電機(jī)的簡(jiǎn)單調(diào)速。 三、硬件電路 圖1 基本要求電路 桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 圖2 擴(kuò)展要求電路A 四、基本要求源程序 #include //Fosc = 10MHz pclk = Fosc/4=2.5MHz PWM_EN(21)BUZZER(1)int main(void) 桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 { PINSEL2 = 0x04;PINSEL0 |=(PINSEL0 & ~(3 << 2))|(2 << 2);IO0DIR |=(1 << BUZZER);IO2DIR |=(1 << PWM_EN);IO2CLR =(1 << PWM_EN);PWMMCR |=(1 << 1);PWMPCR =(1 << 11);PWMPR = 10;PWMPC = 0;PWMMR0 = 250;PWMMR3 = 250/2;PWMLER =(0x09);PWMTCR = 0x09;while(1);} 五、基本實(shí)驗(yàn)步驟 1.打開Keil軟件,新建立一個(gè)工程Lab05uvproj,在Select Device for Target ‘Target 1’對(duì)話框的‘Data base’選擇“NXP(founder by Philips)”中的‘LPC2294’芯片。確定后彈出的確認(rèn)框,選擇“是”。2.新建一個(gè)后綴名為.C文件,按照原理圖1和原理圖4編寫輸入上述源代碼,編譯并排除錯(cuò)誤。3.按《J-LINK 仿真器設(shè)置》設(shè)置好J-LINK仿真器; 4.點(diǎn)擊“Project”-“Options for Target ‘Target 1’”-Output 選項(xiàng)卡, 勾選擇“Creat HEX File”,然后編譯連接生成HEX文件。5.選擇“Debug”-“Start/Stop Debug Session”開始調(diào)試源代碼。選擇“Debug”-“Step”或者按F11可單步調(diào)試程序。選擇“Debug”-“Run”或者F5全速運(yùn)行程序。6.觀察LPC22EB6-I實(shí)驗(yàn)系統(tǒng)右下角的Buzzer蜂鳴器現(xiàn)象,并記錄。 六、擴(kuò)展實(shí)驗(yàn)要求 1.理解基本要求實(shí)驗(yàn)源程序,如何配置不同的PWM頻率和占空比。 2.根據(jù)實(shí)驗(yàn)內(nèi)容的擴(kuò)展要求,在Keil軟件中編寫該要求的源程序,編譯通過生成HEX文件,下載到LPC22EB6-I實(shí)驗(yàn)系統(tǒng)。3.觀察LPC22EB6-I實(shí)驗(yàn)系統(tǒng)上DC/STEP MOTOR 模塊左邊的直流電機(jī)的運(yùn)行情況。 七、實(shí)驗(yàn)報(bào)告要求 1.預(yù)習(xí)報(bào)告中要體現(xiàn)實(shí)現(xiàn)內(nèi)容的基本要求中的源程序理解,包括源程序注釋及程序框圖繪制和現(xiàn)實(shí)現(xiàn)擴(kuò)展實(shí)驗(yàn)要求的實(shí)現(xiàn)原理。 2.實(shí)驗(yàn)報(bào)告中要體現(xiàn)擴(kuò)展實(shí)驗(yàn)要求的源程序理解,包括源程序注釋及程序框圖繪制。3.實(shí)驗(yàn)報(bào)告中要有實(shí)驗(yàn)心得體會(huì)。 桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 實(shí)驗(yàn)七 SPI驅(qū)動(dòng)實(shí)驗(yàn)(2學(xué)時(shí)) 一、實(shí)驗(yàn)?zāi)康?/p> 1.了解并掌握Keil軟件的工程設(shè)計(jì)。 2.掌握在Keil軟件中編制源程序、編譯和產(chǎn)生機(jī)器碼。3.掌握LPC2294處理器SPI時(shí)序波型輸出程序的編寫。4.掌握在LPC22EB6-I實(shí)驗(yàn)系統(tǒng)中運(yùn)行程序。 二、實(shí)驗(yàn)內(nèi)容 1.基本要求: 在LPC22EB6-I實(shí)驗(yàn)系統(tǒng)上,編寫SPI驅(qū)動(dòng)程序點(diǎn)亮LAM1、LAM2動(dòng)態(tài)數(shù)碼管。 2.擴(kuò)展要求: 在基本要求基礎(chǔ)上,編寫D/A芯片CS4334的SPI驅(qū)動(dòng)程序并使之播放一段音樂。 三、硬件電路 圖1動(dòng)態(tài)數(shù)碼管電路 桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 圖2 CS4334工作時(shí)序圖 桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 圖3 D/A轉(zhuǎn)換電路 桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 圖3 使能電路 四、基本要求源程序 #include (1)(0)(0 << 3)(0 << 4)(1 << 5)(1 << 6)(MSTR|CP0L|CPHA)(18)(19)(OUTPUT << G_BIT)(6)(5)(4)(7)(INPUT << SSEL0)(OUTPUT << MOSI_BIT)(OUTPUT << SCK_BIT)#define SPI_MODE #define G_BIT #define RCLK_BIT #define HC595_G #define MOSI_BIT #define MISO_BIT #define SCK_BIT #define SSEL0 #define HC595_SSEL #define HC595_SDI #define HC595_SRCLK unsigned char const LEDSEG[]={ 0x3F, //“0” 0x06, //“1” 桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 0x5B, //“2” 0x4F, //“3” 0x66, //“4” 0x6D, //“5” 0x7D, //“6” 0x07, //“7” 0x7F, //“8” 0x6F, //“9” };unsigned char const LEDDEG[]={0xF7,0xFB,0xFD,0xFE,0x7F,0xBF,0xDF,0xEF};unsigned char Display_Buffer[]={1,2,3,4,5,6,7,8};void Delay_us(unsigned long temp);void SPI_Send_Data(unsigned char TEMP);void SPI_Ini(unsigned char fdiv);int main(void){ } void SPI_Ini(unsigned char fdiv){ } void SPI_Send_Data(unsigned char TEMP) if(fdiv < 8)fdiv = 8;S0SPCCR = fdiv & 0xFE;S0SPCR = SPI_MODE;unsigned char i;PINSEL2 |= 0x04;PINSEL0 =(PINSEL0 & ~(3 << SSEL0*2))|(1 << SSEL0*2);PINSEL0 =(PINSEL0 & ~(3 << MISO_BIT*2))|(1 << MISO_BIT*2);PINSEL0 =(PINSEL0 & ~(3 << MOSI_BIT*2))|(1 << MOSI_BIT*2);PINSEL0 =(PINSEL0 & ~(3 << SCK_BIT*2))|(1 << SCK_BIT*2);IO0DIR |=(1 << 24);IO0SET |=(1 << 24);IO2DIR |=(1 << RCLK_BIT);IO2DIR |=(1 << G_BIT);IO2CLR |=(1 << G_BIT);SPI_Ini(200);while(1){ } for(i=0;i < sizeof(Display_Buffer);i++){ } SPI_Send_Data(LEDDEG[i]);SPI_Send_Data(LEDSEG[Display_Buffer[i]]);IO2SET =(1 << RCLK_BIT);Delay_us(1);IO2CLR =(1 << RCLK_BIT);Delay_us(1000);桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 { } void Delay_us(unsigned long temp){ } temp = temp*10;while(temp > 0){temp--;} S0SPDR = TEMP;while((S0SPSR & 0x80)== 0); 五、基本實(shí)驗(yàn)步驟 1.打開Keil軟件,新建立一個(gè)工程Lab08uvproj,在Select Device for Target ‘Target 1’對(duì)話框的‘Data base’選擇“NXP(founder by Philips)”中的‘LPC2294’芯片。確定后彈出的確認(rèn)框,選擇“是”。2.新建一個(gè)后綴名為.C文件,按照?qǐng)D10原理編寫輸入上述源代碼,編譯并排除錯(cuò)誤。3.按《J-LINK 仿真器設(shè)置》設(shè)置好J-LINK仿真器; 4.點(diǎn)擊“Project”-“Options for Target ‘Target 1’”-Output 選項(xiàng)卡, 勾選擇“Creat HEX File”,然后編譯連接生成HEX文件。5.選擇“Debug”-“Start/Stop Debug Session”開始調(diào)試源代碼。選擇“Debug”-“Step”或者按F11可單步調(diào)試程序。選擇“Debug”-“Run”或者F5全速運(yùn)行程序。6.觀察動(dòng)態(tài)數(shù)碼管的顯示情況,修正程序,并記錄。 六、擴(kuò)展實(shí)驗(yàn)要求 1.理解基本要求實(shí)驗(yàn)源程序,如何配置不同的PWM頻率和占空比。 2.根據(jù)實(shí)驗(yàn)內(nèi)容的擴(kuò)展要求,在Keil軟件中編寫該要求的源程序,編譯通過生成HEX文件,下載到LPC22EB6-I實(shí)驗(yàn)系統(tǒng)。3.觀察聲音的情況; 七、實(shí)驗(yàn)報(bào)告要求 4.預(yù)習(xí)報(bào)告中要體現(xiàn)實(shí)現(xiàn)內(nèi)容的基本要求中的源程序理解,包括源程序注釋及程序框圖繪制和現(xiàn)實(shí)現(xiàn)擴(kuò)展實(shí)驗(yàn)要求的實(shí)現(xiàn)原理; 5.實(shí)驗(yàn)報(bào)告中要體現(xiàn)擴(kuò)展實(shí)驗(yàn)要求的源程序理解,包括源程序注釋及程序框圖繪制; 6.實(shí)驗(yàn)報(bào)告中要有實(shí)驗(yàn)心得體會(huì); 桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 實(shí)驗(yàn)八 A/D模數(shù)轉(zhuǎn)換實(shí)驗(yàn)(2學(xué)時(shí)) 一、實(shí)驗(yàn)?zāi)康?/p> 1. 了解并掌握Keil軟件的工程設(shè)計(jì)。 2. 掌握在Keil軟件中編制源程序、編譯通過并產(chǎn)生機(jī)器碼。3. 掌握LPC2294處理器A/D模數(shù)轉(zhuǎn)換程序的編寫。4. 掌握在LPC22EB6-I實(shí)驗(yàn)系統(tǒng)中運(yùn)行程序。 二、實(shí)驗(yàn)內(nèi)容 1. 基本要求: 在LPC22EB6-I實(shí)驗(yàn)系統(tǒng)上編寫程序,讀取AIN17電位器的輸出電壓的A/D轉(zhuǎn)換值,并以十進(jìn)制的形式顯示在動(dòng)態(tài)數(shù)碼管LAM1上。 2. 擴(kuò)展要求: 在基本要求的基礎(chǔ)上,將AIN7與AIN6輸出的通過A/D采集,并在LAM1與LAM2上分別顯示出來,實(shí)現(xiàn)簡(jiǎn)單的數(shù)字電壓表功能。所需原理圖參見圖1和圖2。 三、硬件電路 圖1 A/D轉(zhuǎn)換輸入電路 桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 圖 2 動(dòng)態(tài)數(shù)碼管電路 四、基本要求源程序 #include 31(1)(~OUTPUT)(6)(4)(19)(18) ((IO0DIR & ~(1 << SDI_BIT)|(OUTPUT << SDI_BIT)))((IO0DIR & ~(1 << SRCLK_BIT)|(OUTPUT << SRCLK_BIT)))((IO2DIR & ~(1 << RCLK_BIT)|(OUTPUT << RCLK_BIT)))((IO2DIR & ~(1 << G_BIT)|(OUTPUT << G_BIT)))(28) | | | | | | ((2500000/1000000-1)<< 8)|(0 << 16)(0 << 17)(1 << 21)(0 << 22)(1 << 24)(0 << 27); #define SRCLK_BIT #define HC595_SDI #define HC595_SRCLK #define HC595_RCLK #define HC595_G #define AIN7 #define START_ADC()ADCR =(1 << 7)桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 unsigned char const LEDSEG[]={ 0x3F, //“0” 0x06, //“1” 0x5B, //“2” 0x4F, //“3” 0x66, //“4” 0x6D, //“5” 0x7D, //“6” 0x07, //“7” 0x7F, //“8” 0x6F, //“9” };unsigned char const LEDDEG[]={0xF7,0xFB,0xFD,0xFE,0x7F,0xBF,0xDF,0xEF};unsigned char Display_Buffer[] = {0,0,0,0};void Send_Two_byte(unsigned int Data);void Delay_us(unsigned long int temp);void System_Int(void);int main(void){ } void Send_Two_byte(unsigned int Data){ long i; unsigned char i;unsigned int temp = 0;unsigned int ADC_Val;PINSEL2 = 0x04;PINSEL2 =(PINSEL2 & ~(3 << 4))|(3 << 4);PINSEL2 =(PINSEL2 & ~(1 << 7))|(1 << 7);System_Int();while(1){ } for(i=0;i<=GET_ADC_CNT;i++){ } Display_Buffer[0] = temp/1000;Display_Buffer[1] =(temp/100)% 10;Display_Buffer[2] =(temp/10)% 10;Display_Buffer[3] = temp % 10;for(i=0;i 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 } void Delay_us(unsigned long int temp){ } void System_Int(void){ } IO0DIR = HC595_SDI;IO0DIR = HC595_SRCLK;IO2DIR = HC595_RCLK;IO2DIR = HC595_G;temp = temp*10;while(temp > 0){ temp--;} IO2CLR =(IO2CLR & ~(1 << G_BIT))|(1 << G_BIT);for(i=0;i<16;i++){ } IO2SET =(1 << RCLK_BIT);Delay_us(1);IO2CLR =(1 << RCLK_BIT);IO2SET =(1 << G_BIT);if((Data &(1 << 15))==(1 << 15))IO0SET =(1 << SDI_BIT);IO0CLR =(1 << SDI_BIT);else Delay_us(1);IO0SET =(1 << SRCLK_BIT);Delay_us(1);IO0CLR =(1 << SRCLK_BIT);Delay_us(1);Data <<= 1; 五、基本實(shí)驗(yàn)步驟 1. 打開Keil軟件,新建立一個(gè)工程Lab08uvproj,在Select Device for Target ‘Target 1’對(duì)話框的‘Data base’選擇“NXP(founder by Philips)”中的‘LPC2294’芯片。確定后彈出的確認(rèn)框,選擇“是”。2. 新建一個(gè)后綴名為.C文件,按照?qǐng)D10原理編寫輸入上述源代碼,編譯并排除錯(cuò)誤。 3. 按《J-LINK 仿真器設(shè)置》設(shè)置好J-LINK仿真器; 4. 點(diǎn)擊“Project”-“Options for Target ‘Target 1’”-Output 選項(xiàng)卡, 勾選擇“Creat HEX File”,然后編譯連接生成HEX文件。 5. 選擇“Debug”-“Start/Stop Debug Session”開始調(diào)試源代碼。選擇“Debug”-“Step”或者按F11可單步調(diào)試程序。選擇“Debug”-“Run”或者F5全速運(yùn)行程序。6. 旋轉(zhuǎn)AIN7或者AIN6,觀察動(dòng)態(tài)數(shù)碼管的顯示情況,并記錄。 六、擴(kuò)展實(shí)驗(yàn)要求 1.理解基本要求實(shí)驗(yàn)源程序; 桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 2.根據(jù)實(shí)驗(yàn)內(nèi)容的擴(kuò)展要求,在Keil軟件中編寫該要求的源程序。 3.編譯通過并產(chǎn)生機(jī)器碼,加載LPC22EB6-I實(shí)驗(yàn)系統(tǒng)中,并運(yùn)行看實(shí)驗(yàn)現(xiàn)象。 七、實(shí)驗(yàn)報(bào)告要求 1.預(yù)習(xí)報(bào)告中要體現(xiàn)實(shí)現(xiàn)內(nèi)容的基本要求中的源程序理解,包括源程序注釋及程序框圖繪制和現(xiàn)實(shí)現(xiàn)擴(kuò)展實(shí)驗(yàn)要求的實(shí)現(xiàn)原理; 2.實(shí)驗(yàn)報(bào)告中要體現(xiàn)擴(kuò)展實(shí)驗(yàn)要求的源程序理解,包括源程序注釋及程序框圖繪制; 3.實(shí)驗(yàn)報(bào)告中要有實(shí)驗(yàn)心得體會(huì); 桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 實(shí)驗(yàn)九 串口通信實(shí)驗(yàn)(2學(xué)時(shí)) 一、實(shí)驗(yàn)?zāi)康?/p> 1.了解并掌握Keil軟件的工程設(shè)計(jì)。 2.掌握在Keil軟件中編制源程序、編譯通過并產(chǎn)生機(jī)器碼。3.掌握LPC2294處理器串行通信程序的編寫。4.掌握在LPC22EB6-I實(shí)驗(yàn)系統(tǒng)中運(yùn)行程序。 二、實(shí)驗(yàn)內(nèi)容 1.基本要求: 在LPC22EB6-I實(shí)驗(yàn)系統(tǒng)上編寫程序,從串口0(UART0)發(fā)送字符串“Hello ARM!”到計(jì)算機(jī)。 2.擴(kuò)展要求: 在基本要求的基礎(chǔ)上,實(shí)現(xiàn)在計(jì)算機(jī)輸入一個(gè)數(shù)值控制D5的閃爍速度,并回發(fā)此數(shù)值到計(jì)算機(jī)上。 三、硬件電路 圖1 UART0電路 桂林電子科技大學(xué) 應(yīng)用科技學(xué)院 《ARM嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》 圖2 撥碼開關(guān)電路 四、基本要求源程序 #include (1200)(50000000/4)unsigned char const String[]=“Hello ARM!”;void UART_Send_Byte(unsigned char data);void System_Int(void);void UART_Ini(void);int main(void){ unsigned long i = 0; } void System_Int(void){ } void UART_Ini(void){ unsigned int FDIV; PINSEL2 = 0x04;PINSEL0 =(PINSEL0 & ~(3 << 0))|(1 << 0);PINSEL0 =(PINSEL0 & ~(3 << 2))|(1 << 2);System_Int();UART_Ini();while(1){ } while(String[i]!= '
第二篇:電子信息專業(yè)_嵌入式實(shí)驗(yàn)報(bào)告實(shí)訓(xùn)指導(dǎo)書