一起学mini2440裸机开发(十一)--mini2440定时器0中断实验_第1页
一起学mini2440裸机开发(十一)--mini2440定时器0中断实验_第2页
一起学mini2440裸机开发(十一)--mini2440定时器0中断实验_第3页
一起学mini2440裸机开发(十一)--mini2440定时器0中断实验_第4页
一起学mini2440裸机开发(十一)--mini2440定时器0中断实验_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一起学mini2440裸机开发(十一-mini2440定时器0中断实验在前边讲解系统时钟和定时器时,曾给出一个实验,实现的功能是:使用定时器0的功能,使LED每秒钟闪烁一次,当时是使用查询方式实现的,现在使用中断方式实现上述功能。   下图为我的工程文件布局:      下面贴出我的代码,你也可以去这里下载,    下载下来之后,直接编译,点击Flash/Download ,下载到nor flash中运行。   main.c文件#include"led.h"

2、;#include"timer.h"#include"isrservice.h"#include"interrupt.h"unsigned int flag=0;int main(     Led_Init(;             /初始化LED Timer0_Init(;       

3、;/定时器0初始化 Timer0_Interrupt_Init(;     /定时器0中断初始化 while(1            /循环,等待中断发生      if(flag     Led2_On(;    else   

4、;         Led2_Off(;         led.c文件 /* 我的mini2440开发板上4个LED灯对应的GPIO口* LED1-GPB5    LED2-GPB6* LED3-GPB7    LED4-GPB8*/#include /* 函数名称:void Led_Init(void* 全局变量:无 * 参数说明:无* 返 回

5、 值;无* 功    能:设置GPB5-8为输出功能,初始化4个LED灯灭*/void Led_Init(void  GPBCON&=(3<<10|(3<<12|(3<<14|(3<<16;  GPBCON|=(1<<10|(1<<12|(1<<14|(1<<16;  /设置GPB5-8口为输出功能  GPBUP&=(1<<5|(1<<6|(1<

6、<7|(1<<8; /上拉电阻使能  GPBDAT|=(1<<5|(1<<6|(1<<7|(1<<8; /令GPBDAT5-8均为高电平,即令4个led灯全灭     led.h文件#ifndef _LED_H_#define _LED_H_#include #define Led1_On(  GPBDAT&=(1<<5;#define Led1_Off(  GPBDAT|=(1&

7、lt;<5;#define Led2_On(  GPBDAT&=(1<<6;#define Led2_Off(  GPBDAT|=(1<<6;#define Led3_On(  GPBDAT&=(1<<7;#define Led3_Off(  GPBDAT|=(1<<7;#define Led4_On(  GPBDAT&=(1<<8;#define Led4_Off( 

8、; GPBDAT|=(1<<8;/* 函数名称:void Led_Init(void* 全局变量:无 * 参数说明:无* 返 回 值;无* 功    能:设置GPN5-8为输出功能,初始化4个LED灯灭*/void Led_Init(void;#endif    timer.c文件#include     /s3c2440.h对S3C2440芯片的一些地址的宏定义#include"timer.h"/* 函数名称:void Timer0_Init(void

9、* 参数说明:无* 全局变量:无* 返 回 值:无* 功    能:对于50MHz的PCLK,经过分频获得62.5KHz的定时器0*     的输入时钟。*/void Timer0_Init(void TCFG0&=(0xff;    /设置第1级分频系数,分频系数为99 TCFG0|=99; TCFG1&=(0xf;      /设置第2级分频系数,分频系数为8 TCFG1|=0x02;&

10、#160; /62.5KHz=50MHz/(99+1/8 TCNTB0=62500;       /1s中断一次。经过上述分频器得到定时器0的输入时钟频率为62.5kHz,即定时器                     /每秒钟计数62500次。因此,初始化时,定时器0计数值初始值为62500  

11、    /在这里我们可以看出TCMPBn没有设置,因为咱们用它的默认值0,所以就不需要设置 TCON|=(1<<1; /开启手动更新位,即当定时器开启后,TCMPB0和TCNTB0中的值会加载到寄存器TCMP0和TCNT0中 TCON=0x09;     /关闭手动更新位,设置自动加载位,同时开启定时器,这样,TCNT0进行减1计数,当TCNT0中的计          &#

12、160;      /数值减到0时,TCNTB0、TCMPB0中的数据分别会自动加载到TCNT0、TCMP0中并进行新一轮的减1计数     timer.h文件#ifndef _TIMER_H_#define _TIMER_H_/* 函数名称:void Timer0_Init(void* 参数说明:无* 全局变量:无* 返 回 值:无* 功    能:对于50MHz的PCLK,经过分频获得62.5KHz的定时器0*     的

13、输入时钟。*/void Timer0_Init(void;#endif     interrupt.c文件#include #include"interrupt.h"/* 函数名称:void Timer0_Interrupt_Init(void* 全局变量:无 * 参数说明:无* 返 回 值;无* 功    能:将定时器0中断屏蔽位设为无效*/void Timer0_Interrupt_Init(void  INTMSK&=(1<<10; 

14、60; /将定时器0中断屏蔽位设为无效,这样当                                     /定时器0发生中断时,中断请求信号可以      

15、                              /顺利到达CPU    interrupt.h文件#ifndef _INTERRUPT_H_#define _INTERRUPT_H_/* 函数名称:void Timer0_Interrupt_Ini

16、t(void* 全局变量:无 * 参数说明:无* 返 回 值;无* 功    能:将定时器0中断屏蔽位设为无效*/void Timer0_Interrupt_Init(void;#endif      isrservice.c文件#include #include"isrservice.h"extern unsigned int flag; /声明外部变量flag,该变量是在main.c文件中定义的     

17、0;                                /当1s到来时,中断响应函数将该变量值取反,在主              

18、60;                      /程序中通过检测该变量的值来实现不同的操作/* 函数名称:void _irq IRQ_Handler(void  * 全局变量:无 * 参数说明:无* 返 回 值;无* 功    能:定时器0中断服务函数,必须加_irq*/void _irq IRQ_Handler(void /注意这个函数名字要和S3C2440.s处的跳转标号相同    flag=!flag;   /1s时间到,flag值取反 SRCPND|=1<<10; /清除中断标志位 INTPND|=1<<10;   

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论