嵌入式综合应用实验报告_第1页
嵌入式综合应用实验报告_第2页
嵌入式综合应用实验报告_第3页
嵌入式综合应用实验报告_第4页
嵌入式综合应用实验报告_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.z."嵌入式系统与接口技术实验"综合设计报告班级13物联网黄梓恩**1308040106指导教师沈兰【综合应用实验目的】【综合应用实验题目】利用GEC2410实验板,设计并实现一个综合应用系统【综合应用实验要求】要用到已学过的所有GEC2410模块,包括:GPIO端口控制:LED灯模块中断控制:按键外部中断,内部中断〔TimerorTicktime〕UART串口:键盘输入,显示器输出PWM定时器:定时中断,tout0输出驱动蜂鸣器蜂鸣器:实时时钟:当前时间,闹钟,节拍中断看门狗定时器:WTD中断,Reset【相关理论知识】【实现方案】主函数#include"2410addr.h"#include"2410lib.h"#include"def.h"e*ternvoidwatchdog_test(void);e*ternvoid__irqwatchdog_int(void);e*ternvoid__irqTick_Isr(void);e*ternvoidOpenRtc(void);e*ternvoidBUZZER_PWM_Test(void);e*ternvoidEint_Init(void);e*ternvoidEnable_Eint(void);e*ternvoidwatchdog_test(void);e*ternchart;intMain(void){ chara,b,c; ChangeClockDivider(1,1);ChangeMPllValue(0*a1,0*3,0*1);Port_Init();Uart_Select(0);Uart_Init(0,115200);Eint_Init();//外部中断初始化OpenRtc();//翻开实时时钟节拍中断watchdog_test(); Uart_Printf("**********HELLO**********\n"); Uart_Printf("1.PlanowhitLED\n"); Uart_Printf("2.Piano2\n"); DisableIrq(BIT_WDT); DisableIrq(BIT_EINT0); DisableIrq(BIT_EINT2); DisableIrq(BIT_EINT8_23);//关这4个中断,为了在键盘没按'1'或'3'之前拒绝产生这4种中断 Uart_Printf("\n1.2.3\n"); //1是键盘电子琴,2是开发板按键电子琴,3跑马灯 while(1) { a=Uart_Getch();Delay(300); if(a=='1') { Uart_Printf("ESCbacktomenu\n"); BUZZER_PWM_Test(); } if(a=='2') { Uart_Printf("ESCbacktomenu\n"); Enable_Eint(); { b=Uart_Getch();Delay(300); if(b==ESC_KEY)break; } } else Uart_Printf("Error!pleasetryagain"); } }#include"2410addr.h"#include"2410lib.h"#include"def.h"//使用K1按键触发EINT0,EINT0->GPF0//使用K3按键触发EINT2,EINT2->GPF2//使用K5按键触发EINT11,EINT11->GPG3//使用K7按键触发EINT19,EINT19->GPG11//KSCAN0->GPE11intk=1;chart;char*week[8]={"","SUN","MON","TUES","WED","THURS","FRI","SAT"};intyear,month,date,weekday,hour,min,sec;void__irqwatchdog_int(void);void__irqTick_Isr(void);voidGet_Rtc(void);voidBuzzer_Freq_Set(U32freq);voidBuzzer_Stop(void);void__irqEint0_ISR(void);void__irqEint2_ISR(void);void__irqEint11_19_ISR(void);voidwatchdog_test(void){//initializeinterruptregisters允许WatchDog中断ClearPending(BIT_WDT);//往中断向量表填WatchDog中断向量pISR_WDT=(unsigned)watchdog_int;//Prescalervalue=100、clockdivisionfactor=128//disablewatchdogrWTCON=((100<<8)|(3<<3));//看门狗时钟周期T=WTCNT*t_watchdog=4S//看门狗喂狗rWTDAT=15000;rWTCNT=15000;rWTCON|=((1<<5)|(1<<2));//enableWatchdogtimerangwatchdoginterrupt//开中断EnableIrq(BIT_WDT);}/****watchdog_int****/void__irqwatchdog_int(void){//去除中断 rGPFDAT=rGPFDAT&~(1<<7);Delay(2000);rGPFDAT=rGPFDAT|(1<<7); rGPFDAT=rGPFDAT&~(1<<6);Delay(2000);rGPFDAT=rGPFDAT|(1<<6); rGPFDAT=rGPFDAT&~(1<<5);Delay(2000);rGPFDAT=rGPFDAT|(1<<5); rGPFDAT=rGPFDAT&~(1<<4);Delay(2000);rGPFDAT=rGPFDAT|(1<<4); }void__irqTick_Isr(void){ k=-k; if(k==1) rGPFDAT=rGPFDAT&~(15<<4); if(k==-1) rGPFDAT=rGPFDAT|(15<<4); //Get_Rtc(); //Uart_Printf("RTCTIME:%4*-%02*-%02*-%s-%02*:%02*:%02*\n",year,month,date,week[weekday],hour,min,sec); ClearPending(BIT_TICK);}voidOpenRtc(void){pISR_TICK=(unsigned)Tick_Isr;rTICNT=0*BF;//Ticktimeinterruptenable;Ticktimecountvalue=63EnableIrq(BIT_TICK);//openRTCTICKINTERRUPT}voidGet_Rtc(void){rRTCCON=0*01; //RTC读写使能,选择BCD时钟、计数器,无复位,1/32768 if(rBCDYEAR==0*99) year=0*1999; else year=0*2000+rBCDYEAR; month=rBCDMON; date=rBCDDATE; weekday=rBCDDAY; hour=rBCDHOUR; min=rBCDMIN; sec=rBCDSEC;rRTCCON=0*0;//RTC读写制止,选择BCD时钟、计数器,无复位,1/32768}voidBUZZER_PWM_Test(void){ //U16freq; //Uart_Printf("\nKEYCONTROLBUZZER\n"); //Uart_Printf("Press'ESC'keytoE*itthisprogram!\n\n");while(1){ U8key=Uart_Getch();//通过异步串行通道Uart输入按键值 switch(key) { case'1':Buzzer_Freq_Set(200);rGPFDAT=rGPFDAT&~(1<<4);Delay(800);rGPFDAT=rGPFDAT|(1<<4);Buzzer_Stop();break; case'2':Buzzer_Freq_Set(300);rGPFDAT=rGPFDAT&~(1<<5);Delay(800);rGPFDAT=rGPFDAT|(1<<5);Buzzer_Stop();break; case'3':Buzzer_Freq_Set(500);rGPFDAT=rGPFDAT&~(1<<6);Delay(800);rGPFDAT=rGPFDAT|(1<<6);Buzzer_Stop();break; case'4':Buzzer_Freq_Set(800);rGPFDAT=rGPFDAT&~(1<<7);Delay(800);rGPFDAT=rGPFDAT|(1<<7);Buzzer_Stop();break; case'5':Buzzer_Freq_Set(1000);rGPFDAT=rGPFDAT&~(1<<4);Delay(800);rGPFDAT=rGPFDAT|(1<<4);Buzzer_Stop();break; case'6':Buzzer_Freq_Set(1200);rGPFDAT=rGPFDAT&~(1<<5);Delay(800);rGPFDAT=rGPFDAT|(1<<5);Buzzer_Stop();break; case'7':Buzzer_Freq_Set(1400);rGPFDAT=rGPFDAT&~(1<<6);Delay(200);rGPFDAT=rGPFDAT|(1<<6);Buzzer_Stop();break; } //Buzzer_Freq_Set(freq); //Uart_Printf("\tFreq=%d\n",freq);//通过异步串行通道Uart输出频率 if(key==ESC_KEY) { Buzzer_Stop();//停顿蜂鸣器 //{break;} //Uart_Printf("\nChoiceagain\n"); return; } }}voidBuzzer_Freq_Set(U32freq){ rGPBCON=rGPBCON&~(3<<0)|(1<<1);//setGPB0astout0,pwmoutput rTCFG0=rTCFG0&~0*ff|15;//prescaler=15 rTCFG1=rTCFG1&~0*f|2;//divider=1/8 rTCNTB0=(PCLK>>7)/freq;//rTCNTB0=PCLK/{(prescaler+1)*divider*freq} rTCMPB0=rTCNTB0>>1; //占空比50% //disabledeadzone,auto-reload,inv-off,updateTCNTB0&TCMPB0,starttimer0 rTCON=rTCON&~0*1f|(0<<4)|(1<<3)|(0<<2)|(1<<1)|(1); rTCON&=~(1<<1); //clearmanualupdatebit}voidBuzzer_Stop(void){ rGPBCON|=1; rGPBCON=rGPBCON&~3|1; //setGPB0asoutput rGPBDAT&=~1;//output0}/***********外部中断初始化************/voidEint_Init(void){//设置GPE11为输出0 rGPECON=(rGPECON|(3<<22))&~(2<<22); rGPEUP|=(1<<11); rGPEDAT&=~(1<<11);rGPFCON=rGPFCON&~(3)|(1<<1); //GPF0设置为EINT0rGPFCON=rGPFCON&~(3<<4)|(1<<5); //GPF2设置为EINT2 rGPGCON=rGPGCON&~(3<<6)|(1<<7); //GPG3设置为EINT11rGPGCON=rGPGCON&~(3<<22)|(1<<23);//GPG11设置为EINT19rGPFUP|=(1<<0);//disableGPF0pulluprGPFUP|=(1<<2);//disableGPF2pulluprGPGUP|=(1<<3);//disableGPG3pullup rGPGUP|=(1<<11);//disableGPG11pullup rE*TINT0=(rE*TINT0&~(7<<0))|(2<<0);//EINT0->fallingedgetriggered rE*TINT0=(rE*TINT0&~(7<<8))|(2<<8);//EINT2->fallingedgetriggered rE*TINT1=(rE*TINT1&~(7<<12))|(0*2<<12);//EINT11->fallingedgetriggered rE*TINT2=(rE*TINT2&~(7<<12))|(0*2<<12);//EINT19->fallingedgetriggered pISR_EINT0=(unsigned)Eint0_ISR;pISR_EINT2=(unsigned)Eint2_ISR;pISR_EINT8_23=(unsigned)Eint11_19_ISR;}/***********开外部中断************/voidEnable_Eint(void){rEINTPEND=0*ffffff;//toclearthepreviouspendingstatesrSRCPND|=BIT_EINT0|BIT_EINT2|BIT_EINT8_23;rINTPND|=BIT_EINT0|BIT_EINT2|BIT_EINT8_23;rEINTMASK=~((1<<11)|(1<<19));//rINTMSK=~(BIT_EINT0|BIT_EINT2|BIT_EINT8_23);EnableIrq(BIT_EINT0);EnableIrq(BIT_EINT2);EnableIrq(BIT_EINT8_23);}/***********外部中断效劳程序************/void__irqEint0_ISR(void){ ClearPending(BIT_EINT0);Buzzer_Freq_Set(300);//修改PMW频率Delay(800);Buzzer_Stop(); Uart_Printf("Freq=300\n");//通过异步串行通道Uart输出频率}void__irqEint2_ISR(void){ ClearPending(BIT_EINT2);Buzzer_Freq_Set(500);//修改PMW频率Delay(800);Buzze

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论