嵌入式 综合应用实验报告 (1).doc

上传人:苏美尔 文档编号:6079626 上传时间:2020-09-06 格式:DOC 页数:14 大小:78.50KB
返回 下载 相关 举报
嵌入式 综合应用实验报告 (1).doc_第1页
第1页 / 共14页
嵌入式 综合应用实验报告 (1).doc_第2页
第2页 / 共14页
嵌入式 综合应用实验报告 (1).doc_第3页
第3页 / 共14页
嵌入式 综合应用实验报告 (1).doc_第4页
第4页 / 共14页
嵌入式 综合应用实验报告 (1).doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《嵌入式 综合应用实验报告 (1).doc》由会员分享,可在线阅读,更多相关《嵌入式 综合应用实验报告 (1).doc(14页珍藏版)》请在三一文库上搜索。

1、嵌入式系统与接口技术实验综合设计报告班级 13物联网 姓名 黄梓恩 学号 1308040106 指导教师 沈兰 【综合应用实验目的】【综合应用实验题目】利用GEC2410实验板,设计并实现一个综合应用系统【综合应用实验要求】要用到已学过的所有GEC2410模块,包括:l GPIO端口控制:LED灯模块l 中断控制:按键外部中断,内部中断(Timer or Tick time)l UART串口:键盘输入,显示器输出l PWM定时器:定时中断,tout0输出驱动蜂鸣器l 蜂鸣器:l 实时时钟:当前时间,闹钟,节拍中断l 看门狗定时器:WTD中断,Reset【相关理论知识】【实现方案】主函数#inc

2、lude 2410addr.h#include 2410lib.h#include def.hextern void watchdog_test(void);extern void _irq watchdog_int(void);extern void _irq Tick_Isr(void);extern void OpenRtc(void);extern void BUZZER_PWM_Test( void );extern void Eint_Init(void);extern void Enable_Eint(void);extern void watchdog_test(void);e

3、xtern char t;int Main(void)char a,b,c;ChangeClockDivider(1,1); ChangeMPllValue(0xa1,0x3,0x1); Port_Init(); Uart_Select(0); Uart_Init(0,115200); Eint_Init();/ 外部中断初始化 OpenRtc();/打开实时时钟节拍中断 watchdog_test();Uart_Printf(*HELLO*n);Uart_Printf(1.Plano whit LEDn);Uart_Printf(2.Piano2n);DisableIrq(BIT_WDT);

4、DisableIrq(BIT_EINT0);DisableIrq(BIT_EINT2);DisableIrq(BIT_EINT8_23);/关这4个中断,为了在键盘没按1或3之前拒绝产生这4种中断Uart_Printf(n1.2.3n);/1是键盘电子琴,2是开发板按键电子琴 ,3跑马灯while(1) a=Uart_Getch();Delay(300); if(a=1)Uart_Printf(ESC back to menun);BUZZER_PWM_Test();if(a=2) Uart_Printf(ESC back to menun); Enable_Eint(); b=Uart_Ge

5、tch();Delay(300); if(b=ESC_KEY)break; elseUart_Printf(Error!please try again);#include 2410addr.h#include 2410lib.h#include def.h/使用K1按键触发EINT0,EINT0GPF0/使用K3按键触发EINT2,EINT2GPF2/使用K5按键触发EINT11,EINT11GPG3/使用K7按键触发EINT19,EINT19GPG11/KSCAN0GPE11int k=1;char t;char *week8 = ,SUN,MON, TUES, WED, THURS,FR

6、I, SAT ;int year,month,date,weekday,hour,min,sec;void _irq watchdog_int(void);void _irq Tick_Isr(void);void Get_Rtc(void);void Buzzer_Freq_Set( U32 freq );void Buzzer_Stop( void );void _irq Eint0_ISR(void);void _irq Eint2_ISR(void);void _irq Eint11_19_ISR(void);void watchdog_test(void) /initialize i

7、nterrupt registers 允许WatchDog中断 ClearPending(BIT_WDT); /往中断向量表填WatchDog中断向量 pISR_WDT=(unsigned)watchdog_int; /Prescaler value=100、clock division factor=128 /t_watchdog=1/PCLK/(Prescaler value+1)/Division_factor=0.00025856 /disable watchdog rWTCON=(1008)|(33); /看门狗时钟周期T=WTCNT*t_watchdog=4S /看门狗喂狗 rWT

8、DAT=15000; rWTCNT=15000; rWTCON|=(15)|(12);/enable Watchdog timer ang watchdog interrupt /开中断 EnableIrq(BIT_WDT); /* watchdog_int */void _irq watchdog_int(void) /清除中断rGPFDAT=rGPFDAT&(17);Delay(2000);rGPFDAT=rGPFDAT|(17);rGPFDAT=rGPFDAT&(16);Delay(2000);rGPFDAT=rGPFDAT|(16);rGPFDAT=rGPFDAT&(15);Delay

9、(2000);rGPFDAT=rGPFDAT|(15);rGPFDAT=rGPFDAT&(14);Delay(2000);rGPFDAT=rGPFDAT|(14);void _irq Tick_Isr(void)k=-k;if(k=1)rGPFDAT=rGPFDAT&(154);if(k=-1)rGPFDAT=rGPFDAT|(154);/Get_Rtc();/Uart_Printf(RTC TIME : %4x-%02x-%02x - %s - %02x:%02x:%02xn,year,month,date,weekweekday,hour,min,sec);ClearPending(BIT

10、_TICK);void OpenRtc(void) pISR_TICK=(unsigned)Tick_Isr; rTICNT=0xBF;/Tick time interrupt enable;Tick time count value=63 EnableIrq(BIT_TICK);/open RTC TICK INTERRUPTvoid Get_Rtc(void) rRTCCON = 0x01;/RTC读写使能,选择BCD时钟、计数器,无复位,1/32768 if (rBCDYEAR = 0x99) year = 0x1999; else year = 0x2000 + rBCDYEAR; m

11、onth=rBCDMON; date=rBCDDATE; weekday=rBCDDAY; hour=rBCDHOUR; min=rBCDMIN; sec=rBCDSEC; rRTCCON = 0x0; /RTC读写禁止,选择BCD时钟、计数器,无复位,1/32768void BUZZER_PWM_Test( void )/U16 freq ;/Uart_Printf( n KEY CONTROL BUZZERn ); /Uart_Printf( Press ESC key to Exit this program !nn ); while( 1 ) U8 key = Uart_Getch()

12、;/通过异步串行通道Uart输入按键值switch(key)case 1:Buzzer_Freq_Set( 200 );rGPFDAT=rGPFDAT&(14);Delay(800);rGPFDAT=rGPFDAT|(14);Buzzer_Stop();break;case 2:Buzzer_Freq_Set( 300 );rGPFDAT=rGPFDAT&(15);Delay(800);rGPFDAT=rGPFDAT|(15);Buzzer_Stop();break;case 3:Buzzer_Freq_Set( 500 );rGPFDAT=rGPFDAT&(16);Delay(800);rG

13、PFDAT=rGPFDAT|(16);Buzzer_Stop();break;case 4:Buzzer_Freq_Set( 800 );rGPFDAT=rGPFDAT&(17);Delay(800);rGPFDAT=rGPFDAT|(17);Buzzer_Stop();break;case 5:Buzzer_Freq_Set(1000);rGPFDAT=rGPFDAT&(14);Delay(800);rGPFDAT=rGPFDAT|(14);Buzzer_Stop();break;case 6:Buzzer_Freq_Set(1200);rGPFDAT=rGPFDAT&(15);Delay(

14、800);rGPFDAT=rGPFDAT|(15);Buzzer_Stop();break;case 7:Buzzer_Freq_Set(1400);rGPFDAT=rGPFDAT&(16);Delay(200);rGPFDAT=rGPFDAT|(16);Buzzer_Stop();break;/Buzzer_Freq_Set( freq ) ;/Uart_Printf( tFreq = %dn, freq ) ;/通过异步串行通道Uart输出频率if(key=ESC_KEY)Buzzer_Stop();/停止蜂鸣器/break;/Uart_Printf(nChoice againn);ret

15、urn;void Buzzer_Freq_Set( U32 freq )rGPBCON = rGPBCON & (30)|(17)/freq;/rTCNTB0=PCLK/(prescaler+1) * divider *freqrTCMPB0 = rTCNTB01;/占空比50%/disable deadzone, auto-reload, inv-off, update TCNTB0&TCMPB0, start timer 0rTCON = rTCON & 0x1f|(04)|(13)|(02)|(11)|(1);rTCON &= (11);/clear manual update bitv

16、oid Buzzer_Stop( void )rGPBCON |= 1;rGPBCON = rGPBCON & 3|1;/set GPB0 as outputrGPBDAT &= 1;/output 0/* 外部中断初始化 */void Eint_Init(void) /设置GPE11为输出0rGPECON = (rGPECON|(322) & (222);rGPEUP |= (111);rGPEDAT &= (111); rGPFCON = rGPFCON & (3)|(11); /GPF0设置为EINT0 rGPFCON = rGPFCON & (34)|(15); /GPF2设置为EIN

17、T2 rGPGCON = rGPGCON & (36)|(17); /GPG3设置为EINT11 rGPGCON = rGPGCON & (322)|(123); /GPG11设置为EINT19 rGPFUP|=(10); /disable GPF0 pull up rGPFUP|=(12); /disable GPF2 pull up rGPGUP|=(13); /disable GPG3 pull up rGPGUP|=(111); /disable GPG11 pull uprEXTINT0 = (rEXTINT0 & (70)|(2falling edge triggeredrEXTI

18、NT0 = (rEXTINT0 & (78)|(2falling edge triggeredrEXTINT1 = (rEXTINT1 & (712)|(0x2falling edge triggeredrEXTINT2 = (rEXTINT2 & (712)|(0x2falling edge triggered pISR_EINT0 = (unsigned)Eint0_ISR; pISR_EINT2 = (unsigned)Eint2_ISR; pISR_EINT8_23 = (unsigned)Eint11_19_ISR;/* 开外部中断 */void Enable_Eint(void)

19、rEINTPEND = 0xffffff; /to clear the previous pending states rSRCPND |= BIT_EINT0|BIT_EINT2|BIT_EINT8_23; rINTPND |= BIT_EINT0|BIT_EINT2|BIT_EINT8_23; rEINTMASK=( (111)|(119) ); /rINTMSK=(BIT_EINT0|BIT_EINT2|BIT_EINT8_23); EnableIrq(BIT_EINT0); EnableIrq(BIT_EINT2); EnableIrq(BIT_EINT8_23); /* 外部中断服务

20、程序 */void _irq Eint0_ISR(void) ClearPending(BIT_EINT0); Buzzer_Freq_Set( 300 ) ;/修改PMW频率 Delay(800);Buzzer_Stop();Uart_Printf(Freq=300n) ;/通过异步串行通道Uart输出频率void _irq Eint2_ISR(void) ClearPending(BIT_EINT2); Buzzer_Freq_Set( 500 ) ;/修改PMW频率 Delay(800);Buzzer_Stop();Uart_Printf( Freq=500n ) ;/通过异步串行通道U

21、art输出频率void _irq Eint11_19_ISR(void) if(rEINTPEND & (111) Buzzer_Freq_Set( 800 ) ;/修改PMW频率 Delay(800);Buzzer_Stop();Uart_Printf(Freq=800n ) ;/通过异步串行通道Uart输出频率 rEINTPEND=(111);/清除子登记,方便下次中断,方法比较特别,在对应为写1将它清为0 ClearPending(BIT_EINT8_23); else if(rEINTPEND & (119) Buzzer_Freq_Set( 1000 ) ;/修改PMW频率 Dela

22、y(800);Buzzer_Stop();Uart_Printf( Freq=1000n ) ;/通过异步串行通道Uart输出频率 rEINTPEND=(119); ClearPending(BIT_EINT8_23); else Uart_Printf(others ENTs are occurredn); rEINTPEND=0xffffff; ClearPending(BIT_EINT8_23); 【实现过程及结果】开始菜单,选择1,为键盘电子琴,不同按键会有不同的灯亮起按ESC键返回选择菜单,若按了错误按键,系统提示错误,选择2为开发板按键电子琴,会显示你所按按键的频率【设计总结】【参考文献】1、2、3、

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1