嵌入式系统试卷--A卷

将GPF4设置为输出属性。

? 通过设置GPFDAT寄存器实现点亮与熄灭LED。如:配置GPFDAT[4]为“0”,

可实现点亮LED4。配置GPFDAT[4]为“1”,可实现关闭LED4。 ? 对于本题来说,GPFUP可以不用设置。

电路原理图如下图所示:

: 姓名: 学号: 班级(学生填写)------------------------------------ 密 ---------------------------- 封 --------------------------- 线 ----------------------------------------- (答题不能超出密封线)

按照以上要求,编写出控制LED的程序。 答:#include \

#define rGPFCON (*(volatile unsigned *)0x56000050)

//端口F的控制寄存器 #define rGPFDAT (*(volatile unsigned *)0x56000054)

//端口F的数据寄存器 #define rGPFUP (*(volatile unsigned *)0x56000058)

//端口F的上拉控制寄存器 void port_init(void) {

//=== PORT F GROUP

//端口: GPF7 GPF6 GPF5 GPF4 GPF3 GPF2 GPF1 GPF0 //信号: LED_1 LED_2 LED_3 LED_4 PS2_INT CPLD_INT1 KEY_INT BUT_INT1 //设置属性: Output Output Output Output EINT3 EINT2 EINT1 EINT0 //二进制值: 01 01, 01 01, 10 10, 10 10 rGPFCON = 0x55aa;

rGPFUP = 0xff; // GPF所有端口都不加上拉电阻 }

第 5 页 (共 页)

void led_on(void) {

int i,nOut; nOut=0xF0;

rGPFDAT=nOut & 0x70; //点亮LED1 for(i=0;i<100000;i++);

rGPFDAT=nOut & 0x30; //点亮LED1 LED2 for(i=0;i<100000;i++);

rGPFDAT=nOut & 0x10; //点亮LED1 LED2 LED3 for(i=0;i<100000;i++);

rGPFDAT=nOut & 0x00; //点亮LED1 LED2 LED3 LED4 for(i=0;i<100000;i++); }

void led_off(void) {

int i,nOut; nOut=0;

rGPFDAT = 0;

for(i=0;i<100000;i++);

rGPFDAT = nOut | 0x80; //关闭LED1 for(i=0;i<100000;i++);

rGPFDAT |= nOut | 0x40; //关闭LED2 for(i=0;i<100000;i++);

rGPFDAT |= nOut | 0x20; //关闭LED3 for(i=0;i<100000;i++);

rGPFDAT |= nOut | 0x10; //关闭LED4 for(i=0;i<100000;i++); }

void led_on_off(void) {

int i;

rGPFDAT=0; //所有LED全亮 for(i=0;i<100000;i++);

rGPFDAT=0xF0; //所有LED全灭 for(i=0;i<100000;i++); }

void led_test(void) { led_on(); led_off();

第 6 页 (共 页)

led_on_off(); delay(1000); rGPFCON = 0x55aa; }

void main(int argc,char **argv) {

port_init( ); while(1) { led_test(); } }

2.已知C语言程序有主程序模块prog.c,prog.h,其中调用了另一个模块subr.c,subr.h中的功能。试写出一个可将这两个模块编译成可执行文件pr1的makefile。 答:

pr1: prog.o subr.o

gcc –o pr1 prog.o subr.o prog.o: prog.c prog.h

gcc –c –o prog.o prog.c subr.o: subr.c subr.h gcc –c –o subr.o subr.c

六.阅读程序题(每题10分,共10分)

1.阅读下列与看门狗有关的寄存器描述,解释每一行代码的功能。看门狗定时器控制寄存器(WTCON)

寄存器 WTCON 寄存器 WTDAT 寄存器 WTCNT 看门狗计数寄存器(WTCNT)

地址 0x53000008 读/写 读/写 描述 看门狗计数当前值 看门狗数据寄存器(WTDAT) 地址 0x53000004 读/写 读/写 描述 看门狗数据寄存器 地址 0x53000000 读/写 读/写 描述 看门狗控制寄存器 #define rWTCON (*(volatile unsigned *)0x53000000) //第1行 #define rWTDAT (*(volatile unsigned *)0x53000004) //第2行 #define rWTCNT (*(volatile unsigned *)0x53000008) //第3行

void watchdog_test(void) {

第 7 页 (共 页)

rWTCON=((PCLK/1000000-1)<<8)|(3<<3)|(1<<2); //第4行

rWTDAT=7812; //第5行 rWTCNT=7812; //第6行 rWTCON|=(1<<5); //第7行 }

答:第1-3行:定义看门狗控制寄存器、数据寄存器和计数寄存器为rWTCON、rWTDAT 和rWTCNT

第4行: 设置看门狗的预装比例值为1000000,分频因素为1/28,并使能中断。 第5-6行:对数据寄存器和计数寄存器赋值为7812。 第7行:启动看门狗。

第 8 页 (共 页)

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4