嵌入式,综合应用实验报告,(1)
《 嵌入式系统与接口技术实验》 》 综合设计报告 班级
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 、
上一篇:数据挖掘实验报告
下一篇:数据结构实验报告(实验一)