当前位置:首页 > 述职报告 >

述职报告

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

2021-11-14 11:23:02述职报告
《嵌入式系统与接口技术实验》》综合设计报告班级 13物联网 姓名 黄梓恩 学号 1308040106

 《 嵌入式系统与接口技术实验》 》 综合设计报告 班级

 13 物联网

  姓名

  黄梓恩

 学号

  13 0804 0106

  指导教师

  沈兰

 【 综合应用实验 目得】

 【 综合应用实验 题目】

 利用 GEC2410实验板,设计并实现一个综合应用系统 【 综合应用实验 要求】

 要用到已学过得所有 GEC2410模块,包括:

  GPIO 端口控制:LED 灯模块  中断控制:按键外部中断,内部中断(Timer or Tick time)  UART串口:键盘输入,显示器输出  PWM 定时器:定时中断,tout0 输出驱动蜂鸣器  蜂鸣器:

  实时时钟:当前时间,闹钟,节拍中断  瞧门狗定时器:WTD 中断,Reset 【相关理论知识】

 【 实现 方案】

 主函数

 # #in clu de ”2410add r、h" # #i nclu de ” 2410lib 、h " # #incl ude "def 、h” extern void wa tc hdo g_test (void ); extern

 void __irq watc hdog _int (v oid ); exter n v oi d __ir q Tic k_ Isr(void ); extern void

 O penRtc (v oi d); ex te rn voi d

 BUZZ ER _PWM_Te st(

 vo id ); ex te rn vo id

 E int_ Init (void); e ex tern vo id Ena bl e_Eint( void ); ext ern void

 watchdo g_test (voi d); exte rn char

 t ; in t Main (v oi d)

 {cﻩ ch ar

 a,b ,c; gnahCﻩ ange Cloc kDivid er (1 ,1) ;

  C hangeMPll Va lu e(0xa1,0x3,0x1 );

  Port_Init ();

  Uart_Se lect (0);

 U art_Init( 0,1152 00) ;

 Ei nt_In it ();/ / 外部中断初始化

 O penRtc( );// 打开实时时钟节拍中断

 watch dog _test( ); traUﻩ rt_ Printf(” **** ** ****H ELL O*** *** ** ** \n" );

  ﻩUﻩ Uart_P rintf( "1 、Pl ano wh it LED\ n"); ; ﻩtraUﻩ t_ Print f("2 、Pi ano2\n” ); ﻩbasiDﻩﻩ abl eIrq (BIT _WDT) ;

  DisableI rq(BI T_ EI NT0) ;

  D Di sableIrq(BIT_EINT2 ); Dﻩﻩ Dis able Ir q(BI T_E INT8 _23 );//这 关这 4 个中断, 为了在键盘没按'1 ’或’3’之这 前拒绝产生这 4 种中断

 traUﻩ t_Printf("\n1 、2 、3\n ");

 1//琴子电键按板发开是就2,琴子电盘键是就ﻩﻩ 就是键盘电子琴,2就是开发板按键电子琴 ,3跑马灯

  w while (1 )

 ﻩ {

  aU=aﻩﻩ ar t_ Getc h();Delay (300) ;

 ﻩﻩ i f(a =="1’ )

 ﻩ

 {

 ﻩ raUﻩ rt_Pr intf (" ES C b ack t o menu\n") ;

 ﻩ

 B UZZE R_PWM_Test ();

  }ﻩﻩ ﻩ i if(a= =’2 2" )

 {ﻩ {

 Uﻩ Uart_Prin tf("ESC b ack t o m en u\n” );

 ﻩ

 E Enabl e_Ei nt();

  ﻩ

 {

 cteG_traU=bﻩ ch ();Dela y( 300 );

 ﻩﻩ

  (fiﻩ (b ==ESC_KEY )b reak; ﻩ

 }ﻩ }

 } }

  ﻩ

 ﻩﻩ

 esleﻩﻩﻩftnirP_traUﻩ ntf(”Err ror !p lease

 t ry again") ; }ﻩ }

 } } #i nclude ”2410a addr 、h” #includ e "241 0l ib 、h " # #in cl ude ”d de f、h " / /使用K1按键触发 EIN T0,EINT0- 〉GP F0 / /使用 K 3按键触发 E INT 2,EINT2— —〉 〉G PF2 // 使用 K 5按键触发 EINT11 ,EINT11 ->G PG3 // 使用 K7 按键触发 E INT19 ,EINT 19- >GPG11 / //KSCAN0 ->GPE 11 i nt k=1 ; char t; c har *week[8]

 = {

 ” ","SU, N",” MON”, , ”TUE S”,

 "WED”, ,

 " THU RS ","F FR I”, , "SAT " } ; int yea r, mon th ,date ,weekd ay, hour, min,sec; v oi d __irq wa tchd og_int( vo id); v oid

 __irq Tic k_Isr (v oid ); void Ge t_R tc (void ); vo id Buz ze r_F re q_ Set( U32 f re q ); void Buz zer _Sto p( voi d ); v oid __irq Ein t0_IS R(void) ; v oid __irq Ein t2_ISR (void ); v vo id __irq

 Ein t11_ 19_ISR (vo id ); voi d w atchd og_ tes t(void )

 {

 / /in itialize inter ru pt re gis te rs 允许 Wa tch Dog 中断

  Cl earPen ding(BIT_WDT);

 // 往中断向量表填 W atc hD og 中断向量

  pIS R_WDT =(uns ign ed)wat chdo g_ int;

  //P Pr res cale r

 val ue= 100 、clo ck division f ac tor=1 28

 //t_wat chdog= 1/[PCL K/(P rescaler value+1) /Division_fac tor ]=0、00 0025856

  //dis ab le w atchdog

  r WTCON=((100 〈〈8)| (3 <<3 ));

 // 瞧门狗时钟周期 T=WTCNT *t_w atchdog=4S

  // 瞧门狗喂狗

  rWT DAT =1 5000;

  rWTCN T= 15 000 ;

  rWT CON |=((1 〈< 5)| (1<<2 ));//ena ble Wat chd og

 ti mer

 ang w atchdo og in te rrup t

  // 开中断

  En ab leIrq (BIT_W DT );

  } /****

 watchd og_i nt

  ** **/ voi d __ir q watchd og _int (void )

 { {

  / /清除中断

 r GP FDAT= rGPF DAT &~(1<< 7);Del ay (20 00);r GPF DAT=r GPFDAT| |( (1 〈<7 );

 r rG PF DAT=rGP FDAT&~ (1<<6);Delay(200)

 0); ;rGPFD AT=r GPFDAT |(1<〈6) ;

 rGPFDA T=rGPF DA T&~ (1< 〈5) ;Delay (2000 );rGP FD AT=r GP FD AT| (1<<5); FPGrﻩ FDAT=rGPF DA T&~ (1<< 4) ;D el ay(2000) ;rGPFDAT =rG PFDAT| (1 〈<4 4);

 } void __i rq Tick_Is r(vo id) { { k= -k; =k(fiﻩ ==1) Grﻩ GPFD AT=rG PFDAT& ~(1 5<<4 );

 if(k= =-1 )

 rGPFD AT =rGPFDA T| (1 5<<4); //_teGﻩ _Rtc (); //ﻩ /Uar t_ Prin tf(”R RTC TIME :

 %4x—%02x- %02x - % s

 — %02x:%02 2x x:%02x\n" ,year ,month ,d at e, we ek [weekday] ,hou r,m in ,se c);

 Cl earPendin g(BIT _TIC K); } void OpenRtc(void )

 {

  pISR_TICK =(uns igned )Tick_Isr ;

  r TIC NT=0x BF; ;// Tick time

 inter rupt

 en ab le;T ick time cou nt value= =63

 En ableIrq(BIT_TIC K) ;/ /op en RTC TI CK

 INTERRUPT } } void Get _Rtc( void )

 {

  rRTCCON = 0x01; //RTC 读写使能,选择 BCD , 时钟、计数器,无复位,1/32768 8

 i f (rBCD YEAR

 = = 0 x9 9)

 raeyﻩ year = 0 x1999 ;

  else

  2x0

 = raeyﻩ 0x200 0 + rB CDY EA R;

  m m onth= rBCDMON;

  date=rBCD DATE ;

 adkeewﻩ ay= rBCDD AY;

 DCBr=ruohﻩ CDHOUR;

 mi n= rBC DM IN;

 esﻩ ec =rBCDS EC ;

  r RTC CON = 0x 0;

  / //RTC 读写禁止, 选择 BCD 时钟、计数器,无复位 位,1/ 3276 8 } vo id

 BU ZZER_P WM_ Tes t(

 void ) { {

 / //U 16 freq

 ; //ﻩ /Uart_ Print f( "\n K EY

 C ONTR OL B UZZER\n " );

 //rP_traUﻩ rintf( "P re ss "ESC" key to E xit thi s program

 !\n\n”

 ) ;

  w hil e( 1

 )

 {

 8Uﻩ 8 k ey = Uart_Getch();/ /通过异步串行通道 U art 输入按键值

 ﻩ s switc h(key )

 {ﻩ {

 cas e ’1":B uzz er_Freq_Set( 200 ); ;rGPF DAT=rG PF DAT& ~(1〈<4 4) ;D elay (8 00 );rGPF DAT=rGP FDA T|( 1<<4);Buzze r_Sto p() ;br eak; ;

 ﻩﻩ case ’2 ':B uzzer_Fr eq _Se t( 30 0 );rG PFDAT=r GP FD AT&~(1 <<5)

 );Del lay (800 );rGPFDAT=rGPFDAT|( 1< <5) ;B uzzer_S top ();br eak ;

 case

 ’ 3':B uzzer _Fr eq_Set( 50 0 );r GPFDA T=r GP FDAT&~(1 <<6);Delay(800 );rGPFDAT=rGPFD AT |(1< 〈6)

 ); Buz zer _Sto p();break;

  cﻩ case

 "4’:Buzzer_Fre q_S et( 8 00 );rG PFDA T=rGPFDA T&~( 1〈〈7); ;D elay (80 0);r GPFD AT=rG PFDAT |(1< 〈7 );Buzzer_ St op();break; ;

 ﻩ acﻩ ase '5":Buzze r_Freq _Se t(1000 );r GPFDAT =rGP FDAT& ~(1<<4 );De el ay(800 );rG PF DAT =rGPFDAT |(1< 〈4 ); Buzz er_Sto p();br eak ;

 6’ esacﻩﻩ 6":B uz zer_Fr eq_Se t(12 00 );rG PF DA T=rGPFD AT &~ (1<<5); ;Dela y(800 );rGPFD AT=r GPF DAT |(1 <〈5);Bu zz er _Stop() ;br; eak; ﻩﻩ:’7’ esacﻩ :B uz zer _Fre q_Set (1400);r GPFD AT=rGPFDAT &~ (1<< 6);Del ay( (200 );rGP FD AT =rGPFD AT| (1 <〈6);Bu zzer_St op (); brea k;

 }ﻩﻩ /ﻩ //Buzze r_Freq_S et ( freq

 )

 ;

  / /U art_P rintf( ”\ tF re q = % d\n ", freq

 )

 ;/ /通过异步串行通道Ua rt 输出频率 (fiﻩﻩ (key==ESC_K EY)

  {ﻩ ﻩﻩ Bu zz er_S top ();// 停止蜂鸣器

  {//bﻩ {break; } //ﻩﻩﻩ /U art_Pr intf(”\nCh oice

 ag ain \n”)

 );

 erﻩﻩ eturn ;

 }ﻩ}ﻩ } } } voi d Bu zzer_Freq _Se t( U 32 freq )

 {

 rGPBCON = rG PB CO N & ~(3 <〈0 )|(1〈<1 );/ /s et GPB0

 as

 tout t0, pwm ou tp ut CTrﻩ rTCFG0

 = rTCFG0 & ~0xff |15 ; / /presc aler = 15

 rTCFG1

 = rTC FG1

 & ~0 xf |2 ;//divider = 1 /8

 r rTCN TB0 = (PCLK〉 〉>7)/f req; //rTCNTB0=PCLK/ {(p resc aler+1)

 )

 * d ivider * freq} 0BTNCTr = 0BPMCTrﻩ 0> >1 ; / /占空比50% //dﻩ disa ble deadzo ne, auto -re loa d,

 i nv -of f, up date TCNTB 0&TCM PB0, sta rt ti mer 0

 rT CON = rT CON & ~0x1f |(0 〈<4 )|(1< 〈3 )|(0<<2 )|(1 <〈1)

 )|(1 ); CTrﻩ TCO N & = ~(1<< 1); //cﻩﻩ clear

 ma nua l u pdate bit } } v vo id Buzz er_ Stop( voi d ) { { =|

 NOCBPGrﻩ |= 1 ;

 rGPBC ON =

 rGPBCON

 & ~ 3|1;

 ﻩ / /set

 GPB0

 a s ou tput &

 TADBPGrﻩ &= ~1;/ /out put 0 } / ***** **** **

 外部中断初始化

 *** ******** */ v oid E int_I nit (void) {

  // 设置GPE11 为输出 0 PGrﻩ PECON

 = (rGPECO N|(3 〈<22 )) & ~(2<<2 2); rﻩ rGPEU P

 |= (1< <11); Grﻩ GP EDAT &= ~(1<< 11) ;

 rGP FCON = rG PFCO N &

 ~ (3)|( 1<〈1) ;

  //GPF0 设置为EINT0

 rGP FCO N = rGPFCO N

 &

 ~(3< 〈4) |(1<<5; );/

  ﻩ //GPF2 设置为EINT2 ﻩ

 rG PG CON =

 r GP GC ON & ~(3 <〈6)| (1 〈〈7; );/

  ﻩ //G PG3 设置为EI IN T11

 rG PG CON =

 rGP GCON & ~(3 〈<22 )|(1<<23); //GPG 11 设置为 为 EIN T1 9

  rGPF UP|= (1< <0);

  //disa bl e GP F0

 pul l up

 rGPF UP|= (1< <2);

 // dis ab le GPF2 p ul l up

  r GPGUP |=(1〈<3 );

  //disable G PG3 pul l up

 rGPGUP |= (1 〈<1 1);

 //d is ab le GPG11 pull u p rﻩ rEX TI NT0 = (rEXTIN T0 & ~(7〈<0 ))|( 2〈〈0);

  // EIN T0 -〉fall ing g

 ed ge trigge red TXErﻩ TIN T0 = (rEXTINT 0 & ~ (7)

 <<8)) |(2<<8);

 / /EIN T2 〉 -〉falling edge

 t tr ig gered XErﻩ XTINT1 =

 (r EXTINT1

 &

 ~( 7<<12) )|(0 x2<<12);

 //EIN T11— —〉 〉fa lling g

 ed ge trigg ered

 r rE XTINT2 = (rEXTIN T2 & ~(7 <<12 ))|(0x2<<12);

 //E IN T19- ->fallin g

 e dg e trig gered

  pISR _EI NT0 =

 (uns ign ed)Eint0 _ISR ;

  pI SR_EIN T2

 = (uns ig ned )Ei nt 2_ISR;

 pISR_EIN T8_2 3 =

 ( unsigned )Ein t1 1_19_ IS R; } } /* ***** *****

  开外部中断

 ** ***** *****/ void Enab le_Eint(voi d) { {

 rEINT PEND = 0 xf fffff ; / /to clear

 t he previous

 pendin g sta tes

 rSRC PND |=

 BIT _EINT 0|B IT_EINT2 |BIT _EINT 8_23;

 r INTP ND |= BIT_E INT 0|B IT_EIN T2|BIT_EI NT 8_23 ;

 rEIN TMA SK= ~( (1 〈<11 )|(1 〈<19)

 )

 );

 //rI NTM SK= ~( BIT_E INT0|BI T_ EINT2 |BIT _E IN T8 _23 );

  EnableIrq(BIT_EINT0 );

 Ena bleI rq (BIT_EINT2 );

 Enabl eIrq(BIT_EIN T8_ 23) ; } /* *** *** *** *

  外部中断服务程序

 * ****** *****/ vo id __irq E int0_ISR(v oid )

 {

 Cle ar Pending(BI T_ EI NT0 );

 Buzz er _F re q_Set( 300 )

 ;// 修改PMW 频率

  D ela y(800);Bu zzer_Stop() ; raUﻩ art_Printf("F req =300\n ")

 ;//通过异步串行通道Uart 输出频率 } voi d __irq Eint2 _ISR (void) { { ﻩ

 Clea rPendi ng (BIT_EI NT2) ;

 Buzze r_Fr eq_Se t(

 500 )

 ;// 修改 PMW 频率

 De lay( 800) ;Buzzer_Stop( );

 U Uart_Pr intf( ”Freq=500\ n” )

 ;/ /通过异步串行通道 Ua rt输出频率 } v oid _ _irq Ein t11 _19_ISR (v oid) { {

 if(rE INTPEND

 & (1<<1 1))

 { {

  Buzzer_Fre q_ Set (

 8 00 ) ;// 修改 PMW 频率

 De la y(800 );Buzzer _Sto p();

 raUﻩ Uart _Pri ntf ("Fre q=8 00 \n"

 )

 ;// 通过异步串行通道 Uar t输出频率

 rﻩ rEINTPEND=( 1<<11 );// 清除子登记,方便下次中断, 方法比较特别,在对应为

 写 写 1 将它清为 0

 ClearPen din g(BIT_EINT8_ 23);

 }

  el se

 if (rEINT PEND & (1< 〈19 ))

  {

  Buzz er_Fre q_Set( 100 0 )

 ;/ /修改PM W频率

  eDﻩ elay(8 00 ); Buz zer_ Stop( );

 ﻩ Uart _Prin tf( "Freq= 1000 \n” ”

 )

 )

 ;/ /通过异步串行通道 U ar t输出频率

 IErﻩ INTPEND=(1 <<19 );

 ClearP ending(BIT _EIN T8_23 );

 }

  el se

  {

  aUﻩ art_Print f(" oth ers EN Ts are occ ur red\n" );

 PTNIErﻩ PEND=0xffffff;

  Cl earP en di ng( BIT _E INT8 _23);

  } } } 【】果结及程过现实ﻬ 【实现过程及结果】

 择 开始菜单,选择 1, 为键盘电子琴,不同按键会有不同得灯亮起

 按 按 E SC 键返回选择菜单,若按了错误按键, 系统提示错误, 择 选择 2 为开发板按键电子琴, 会显示您所按按键得频率

  【设计总结】

 【参考文献】

 1 、 2 、 3 、

推荐访问:嵌入式 实验 报告