1、ARM开发实践实验报告册s3c2440电子科技大学成都学院实验报告册 课程名称: ARM开发试验 姓 名: 学 号: 院 系: 微电子技术系 专 业:集成电路设计与集成系统(嵌入式) 教 师: 2014年 6 月 20 日 实验一: S3C2440 I/O口控制 一、 实验目的:在ADS软件上进行编程,让TQ2440开发板上的4个LED灯同时亮和灭,两者之间有一定的延时。二、实验原理和内容:LED通过电源,限流电阻与ARM的I/O口为低电平时,电源会通过LED限流电阻往ARM里灌流,点亮LED,反之I/O口为高电平时,则LED不会亮,注意亮灭之间要有一定的延时(大于人眼分辨率大概十几毫秒),以
2、便人眼能够区分出亮灭。三、实验步骤:1.首先在ADS上建立一个工程,工程名为LED,然后选择一个和适的路径存放。2.将光盘中TQ2440测试程序里面inc和src文件夹下的2440addr.h,2440lib.h,2440slib.h,def.h,Nand.h,Option.h,2440addr.inc,Mencfg.inc,Option.inc,2440init.s,2440slib.s,2440lib.c,nand.c这13个文件依次拷贝到刚才建立工程的文件夹下。3.新建一个源文件,命名为LED.c,存放到工程名为LED的文件夹下。4.在LED.mcp下创建一个分组,取名为startcod
3、e,然后将前面拷贝的3个文件夹2440init.s,2440slib.s,nand.c依次添加到以startcode命名的文件夹下。5.将LED.c添加到工程里面去。6.配置Debugrel Settings。7.在LED.c里面进行程序的书写。8.编译所写程序。9.将开发板,仿真器和电脑正确连接,打开Hjtag软件,调试程序。10.观察开发板上的LED亮灭情况。四、实验数据和结果:4个LED灯同时亮和灭。5、实验总结:通过此次试验我掌握S3C2440 I/O寄存器的配制方法。 并且灵活运用I/O寄存器。基本熟悉ADS的使用。六、程序代码#include2440addr.hvoid Delay
4、(unsigned int x) /延时函数 int i,j; for(i=0;ix;i+) for(j=0;jx;j+) ;void Main() rGPBCON=0x15400; /GPB寄存器配置 rGPBDAT=0X1e0; rGPBUP=0x7ff; while(1) rGPBDAT=0X0; Delay(10000); rGPBDAT=0X1e0; Delay(10000); 实验二: S3C2440定时器中断控制一、实验目的:用S3C2440的定时器4来精确定时1s,让开发板的蜂鸣器每隔2s响一次,持续时间是0.5s,蜂鸣器响的同时伴随着LED亮。2、实验原理和内容:1.时钟源设
5、置:由开发板原理图可知,OM3和OM2都为低,外部晶振为12MHZ,所以该开发板的时钟源和USB时钟源都是12MHZ的晶振。2.锁相环(PLL):Mpll=(2*m*Fin)/(p*2s)m=M(分频器M的值)+8,p=P(分频器P的值)+23.FCLK,HCLK和PCLK:FCLK:内和时钟。HCLK:AHB。PCLK:APB。4.时钟发生器和电源管理特殊寄存器:三、实验步骤:1.首先在ADS上建立一个工程,工程名为timer_buzzer_led,然后选择一个和适的路径存放。2.将光盘中TQ2440测试程序里面inc和src文件夹下的2440addr.h,2440lib.h,2440sli
6、b.h,def.h,Nand.h,Option.h,2440addr.inc,Mencfg.inc,Option.inc,2440init.s,2440slib.s,2440lib.c,nand.c这13个文件依次拷贝到刚才建立工程的文件夹下。3.新建一个源文件,命名为timer_buzzer_led.c,存放到工程名为timer_buzzer_led的文件夹下。4.在timer_buzzer_led.mcp下创建一个分组,取名为startcode,然后将前面拷贝的3个文件夹2440init.s,2440slib.s,nand.c依次添加到以startcode命名的文件夹下。5.将timer_
7、buzzer_led.c添加到工程里面去。6.配置Debugrel Settings。7.在timer_buzzer_led.c里面进行程序的书写。8.编译所写程序。9.将开发板,仿真器和电脑正确连接,打开Hjtag软件,调试程序。10.观察开发板上的led亮灭情况及蜂鸣器的发声。四、实验数据和结果:蜂鸣器每隔2S响一次,持续时间是0.5S,蜂鸣器响的同时伴随着LED亮。五、实验总结:通过此次试验我掌握S3C2440 I/O寄存器的配制方法,中断寄存器的配置,定时器中断控制I/O寄存器。六、程序代码#include 2440addr.hvoid Led_Init(void) /led 初始化
8、rGPBCON &= (3 10); rGPBCON |= (110) ; rGPBUP &= (1 5) ;rGPBDAT |= (1 5);void Timer4_Init(void) rTCFG0 &= 0x0; rTCFG0 |= 99 ; rTCFG1 &= (0xf) ; rTCFG1 |= 0x02 ; rTCNTB04= 125000 ;/2s中断一次 rTCON |= (1 1) ; rTCON = 0x09 ; void Beep_Init(void) /蜂鸣器初始化 rGPBCON &= (3 0) ; rGPBCON |= (10) ; rGPBUP &= (1 0)
9、; rGPBDAT &= (1 0);void Timer0_Interrupt_Init(void) /中断服务函数 rINTMSK &= (1 10) ;实验三 PWM1、实验目的:用PWM来驱动蜂鸣器,并通过改变脉宽来改变蜂鸣器的发生频率,脉宽从低到高,再从高到低,周而复始。并利用4个LED来指示脉宽的高低,最高时全亮,最低时全灭。2、实验原理和内容:S3C2440一共有5个16位的定时器,其中4个定时器具有脉宽调制功能因此用S3C2440可以很容易的实现PWM功能。三、实验步骤:1.首先在ADS上建立一个工程,工程名为PWM,然后选择一个和适的路径存放。2.将光盘中TQ2440测试程序
10、里面inc和src文件夹下的2440addr.h,2440lib.h,2440slib.h,def.h,Nand.h,Option.h,2440addr.inc,Mencfg.inc,Option.inc,2440init.s,2440slib.s,2440lib.c,nand.c这13个文件依次拷贝到刚才建立工程的文件夹下。3.新建一个源文件,命名为PWM.c,存放到工程名为PWM的文件夹下。4.在PWM.mcp下创建一个分组,取名为startcode,然后将前面拷贝的3个文件夹2440init.s,2440slib.s,nand.c依次添加到以startcode命名的文件夹下。5.将PWM
11、.c添加到工程里面去。6.配置Debugrel Settings。7.在PWM.c里面进行程序的书写。8.编译所写程序。9.将开发板,仿真器和电脑正确连接,打开Hjtag软件,调试程序。10.观察开发板上的led亮灭情况及蜂鸣器的发声。四、实验数据和结果:依次亮到全亮,再依次灭,到全灭。五、实验总结:通过此次试验我掌握S3C2440 外部中断的工作原理,熟练掌握了外部中断来控制其他资源。六、程序代码#include2440addr.hvoid clk_div() /配置时钟分频 rMPLLCON = (12712)|(24)|1; rCLKDIVN = (21)|1;void Delay(un
12、signed int data) /定义延时函数 unsigned int i,j; for(i = 0;i data;i+) for(j = 0;j data;j+);void Timer0_Init() /定时器0初始化 rTCFG0 &= 0xffff00; rTCFG0 |= 249; rTCFG1 &= 0xfffff0; rTCFG1 |= 2; rTCNTB0 = 25000; rTCON &= 0xf; rTCON |= 0xf; rTCON &= 0x2; void Main() int freq; freq = 0; clk_div(); Timer0_Init(); rG
13、PBCON = 0x15400; /LED初始化 rGPBDAT = (15)|(16)|(17)|(18); rGPBUP = 0x7ff; rTCMPB0 = freq; while(1) /while(1)死循环 for(;freq24000;) freq=freq+1000; rTCMPB0=freq; Delay(500); if(freq = 3000) /依次判断,并操作LED灯 rGPBDAT = 0x0; /Delay(500); else if(freq = 9000) rGPBDAT=(15)|(16)|(17); /Delay(500); else if(freq =
14、15000) rGPBDAT=(15)|(16); /Delay(500); else if(freq = 20000) rGPBDAT=(11000;) freq=freq-1000; rTCMPB0=freq; Delay(500); if(freq = 3000) rGPBDAT = 0x0; /Delay(500); else if(freq = 9000) rGPBDAT=(15)|(16)|(17); /Delay(500); else if(freq = 15000) rGPBDAT=(15)|(16); /Delay(500); else if(freq = 20000) rG
15、PBDAT=(15); /Delay(500); else if(freq = 23000) rGPBDAT=(0x0); /Delay(500); /减 实验四: S3C2440外部中断控制 2、实验目的:用S3C2440的外部中断来控制led灯的亮灭。开发板上共有4个按键,分别连接到了EINT0,EINT1,EINT2,EINT4。用这四个按键控制连接到GPB5GPB8上面的4个led灯,按一下按键,对应的led灯被点亮,再按下按键,对应的led灯灭。3、实验原理和内容:8个外部中断可以由多种信号触发方式所请求。EXTINT寄存器为外部中断配置信号触发方式为电平触发方式或边沿触发,同时还需
16、配置信号触发性。三、实验步骤:1.首先在ADS上建立一个工程,工程名为interrupt,然后选择一个和适的路径存放。2.将光盘中TQ2440测试程序里面inc和src文件夹下的2440addr.h,2440lib.h,2440slib.h,def.h,Nand.h,Option.h,2440addr.inc,Mencfg.inc,Option.inc,2440init.s,2440slib.s,2440lib.c,nand.c这13个文件依次拷贝到刚才建立工程的文件夹下。3.新建一个源文件,命名为interrupt.c,存放到工程名为interrupt的文件夹下。4.在interrupt.m
17、cp下创建一个分组,取名为startcode,然后将前面拷贝的3个文件夹2440init.s,2440slib.s,nand.c依次添加到以startcode命名的文件夹下。5.将interrupt.c添加到工程里面去。6.配置Debugrel Settings。7.在interrupt.c里面进行程序的书写。8.编译所写程序。9.将开发板,仿真器和电脑正确连接,打开Hjtag软件,调试程序。10.观察开发板上的led亮灭情况及蜂鸣器的发声。四、实验数据和结果:按一下按键,对应的led灯被点亮,再按下按键,对应的led灯灭。五、实验总结:通过此次试验我掌握S3C2440 外部中断的工作原理,熟
18、练掌握了外部中断来控制其他资源。六、程序代码#include2440addr.hvoid Delay(unsigned int data) /延时函数 unsigned int i,j; for(i = 0;i data;i+) for(j = 0;j data;j+);volatile int variable0;void clk_div() /配置时钟分频 rMPLLCON = (12712)|(24)|1; rCLKDIVN = (21)|1;void Timer0_Init() /定时器初始换函数 rTCFG0 &= 0xffff00; rTCFG0 |= 249; rTCFG1 &=
19、 0xfffff0; rTCFG1 |= 2; rTCNTB0 = 25000; rTCON &= 0xf; rTCON |= 0xf; rTCON &= 0x2; void _irq Timer0_1s(void) / 定时器0中断服务函数 rSRCPND = 0x400; rINTPND = 0x400; rGPBDAT = rGPBDAT; variable0 +;void _irq key4_LED(void) /按键4中断函数 rSRCPND |= 0x1; rINTPND |= 0x1; clk_div(); Timer0_Init(); rGPBDAT = rGPBDAT|(0x
20、15); while(variable0 = 0); variable0 = 0;void _irq key1_LED(void) /按键 1中断函数 rSRCPND = 0x2; rINTPND = 0x2; clk_div(); Timer0_Init(); rGPBDAT = rGPBDAT|(0x16); while(variable0 = 0); variable0 = 0;void _irq key3_LED(void) /按键3 中断服务函数 rSRCPND = 0x4; rINTPND = 0x4; pISR_TIMER0 = (int)Timer0_1s; clk_div()
21、; Timer0_Init(); rGPBDAT = rGPBDAT|(0x17); while(variable0 = 0); variable0 = 0;void _irq key2_LED(void) /按键2 中断服务函数 rSRCPND = 0x10; rINTPND = 0x10; rEINTPEND=0x10; pISR_TIMER0 = (int)Timer0_1s; /定时中断函数 clk_div(); Timer0_Init(); rGPBDAT = rGPBDAT|(0x18); while(variable0 = 0); variable0 = 0;void Main(
22、) variable0 = 0; /LED 初始化 rGPBCON = 0x15400; rGPBDAT = 0x1e0; rGPBUP = 0x7ff; rGPFCON = 0x22a; rINTMSK = (0x417); /中断使能,开中断 rSRCPND = 0x417; rINTPND = 0x417; rEXTINT0 = 0x0; rEINTMASK = (14); rEINTPEND = 0x10; pISR_EINT0 = (unsigned int)key4_LED; pISR_EINT1 = (unsigned int)key1_LED; pISR_EINT2 = (un
23、signed int)key3_LED; pISR_EINT4_7 = (unsigned int)key2_LED; while(1); 实验五: S3C2440看门狗控制 一、实验目的:使用看门狗定时器定时,当看门狗计数器减到0时,开发板开始复位。二、实验原理和内容:S3C2440的看门狗定时器是用于当其噪声和系统错误引起的故障干扰时恢复控制器的工作。它可以被用作通用16位内部定时器来请求中断服务。看门狗定时器产生128个PCLK周期的复位信号。三、实验步骤:1.首先在ADS上建立一个工程,工程名为watchdog,然后选择一个和适的路径存放。2.将光盘中TQ2440测试程序里面inc和s
24、rc文件夹下的2440addr.h,2440lib.h,2440slib.h,def.h,Nand.h,Option.h,2440addr.inc,Mencfg.inc,Option.inc,2440init.s,2440slib.s,2440lib.c,nand.c这13个文件依次拷贝到刚才建立工程的文件夹下。3.新建一个源文件,命名为watchdog.c,存放到工程名为watchdog的文件夹下。4.在watchdog.mcp下创建一个分组,取名为startcode,然后将前面拷贝的3个文件夹2440init.s,2440slib.s,nand.c依次添加到以startcode命名的文件夹
25、下。5.将watchdog.c添加到工程里面去。6.配置Debugrel Settings。7.在interrupt.c里面进行程序的书写。8.编译所写程序。9.将开发板,仿真器和电脑正确连接,打开Hjtag软件,调试程序。10.观察开发板上的led亮灭情况及蜂鸣器的发声。四、实验数据和结果:当看门狗计数器减到0时,开发板开始复位。五、实验总结:通过此次试验我掌握S3C2440 看门狗的工作原理,熟练掌握了看门狗来控制其他资源。六、程序代码#include2440addr.hvoid clk_div() rMPLLCON = (12712)|(24)|1; /FCLK=400MHz rCLKD
26、IVN = (21)|1; /FCLK:HCLK:PCLK =1:4:8void Delay(unsigned int x) int i,j; for(i=0;ix;i+) for(j=0;jx;j+); void _irq wtdog_ISR() rSRCPND = (19); rINTPND = (19); rSUBSRCPND =(113); rGPBDAT = (18); int Main() int i,light; light = 0x20; rGPBCON = 0x15400; rGPBDAT = (15)|(16)|(17)|(18); rGPBUP = 0x7ff; clk_
27、div(); rWTCON = (2498);/*|(33);/定时器的值*/ rWTDAT = 50000; /4s rWTCNT = 50000; rWTCON |= (15)|(12);/使能定时器和中断 rINTMSK = (19); rSRCPND = (19); rINTPND = (19); rINTSUBMSK = (113);/打开子中断,看门狗中断有两个子中断,INT_WDT(13bit),INT_AC97(14bit) rSUBSRCPND =(113); pISR_WDT_AC97 = (unsigned int)wtdog_ISR; while(1)/跑马灯 for(
28、i=0;i2;i+) rGPBDAT = light; light = light1; Delay(5000); for(i=0;i1; Delay(5000); 实验六: S3C2440 UART控制 1、实验目的:通过查询方式,在主程序内不断的查询UART端口,当有数据来时,就接受数据,并再通过UART发送数据,然后根据接受的数据的不同,分别执行不同的内容,如点亮,熄灭led,控制蜂鸣器响或不响。2、实验原理和内容: SPI,IIC和UART是最常见的三种串行总线,这三种总线都在S3C2440中被集成了。 UART用于异步通讯,可以实现全双工发送和接收。它不仅可以实现不同嵌入式系统之间的通讯,还可以实现与PC之间的通信。S3C2440的通
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1