S3C6410裸机定时器

发布者:mb5362443最新更新时间:2016-04-05 来源: eefocus关键字:S3C6410  裸机定时器 手机看文章 扫描二维码
随时随地手机看文章
定时器我主要用来延时和获取程序运行时间.

 

 
#include "system.h" 
#include "timer.h" 


//定时器0中断处理程序 
void (*Timer0_Isr)(void) = NULL; 


//定时器0中断处理程序 
void (*Timer1_Isr)(void) = NULL; 




//定时器2中断处理程序 
void (*Timer2_Isr)(void) = NULL; 


 
static void __irq Isr_Timer0(void) 

rTINT_CSTAT |= BIT5; //清除中断标志 
if(Timer0_Isr != NULL) //注册过中断服务程序 

Timer0_Isr(); //调用中断处理程序 

VICInterruptEnd(); //中断结束 





 
void Timer0_Init(u32 RTime,FunctionalState EnInt,void (*TimerIsr)(void)) 

rTCFG0 &= (~0xff); //清除设置 
rTCFG0 |= 65; //定时器0预分频65+1,由PCLK=66提供时钟,66分频产生1MHz的定时器时钟 
rTCON &= (~0xff); //清除设置 
rTCON |= BIT3; //定时器0自动更新使能 
rTCNTB0 = RTime; //重装值 
rTINT_CSTAT |= BIT5; //清除中断标志 
rTINT_CSTAT |= (EnInt == ENABLE) ? BIT0 : 0; //使能定时器0中断 
Timer0_Isr = TimerIsr; //注册中断服务程序 
Set_IsrAddr(INT_TIMER0,(u32)Isr_Timer0); //设置中断矢量入口 
Set_IntEnable(INT_TIMER0,EnInt); //使能定时器0全局中断 
//以下操作启动定时器0 
rTCON |= BIT1; //手动更新 
rTCON &= ~BIT1; //结束手动更新 
rTCON |= BIT0; //启动定时器0 









 
static void __irq Isr_Timer1(void) 

rTINT_CSTAT |= BIT6; //清除中断标志 
if(Timer1_Isr != NULL) //注册过中断服务程序 

Timer1_Isr(); //调用中断处理程序 

VICInterruptEnd(); //中断结束 





 
void Timer1_Init(u32 RTime,FunctionalState EnInt,void (*TimerIsr)(void)) 

rTCFG0 &= (~0xff); //清除设置 
rTCFG0 |= 65; //定时器0预分频65+1,由PCLK=66提供时钟,66分频产生1MHz的定时器时钟, 
rTCON &= (~0xff00); //清除设置 
rTCON |= BIT11; //定时器1自动更新使能 
rTCNTB1 = RTime; //重装值 
rTINT_CSTAT |= BIT6; //清除中断标志 
rTINT_CSTAT |= (EnInt == ENABLE) ? BIT1 : 0; //使能定时器0中断 
Timer1_Isr = TimerIsr; //注册中断服务程序 
Set_IsrAddr(INT_TIMER1,(u32)Isr_Timer1); //设置中断矢量入口 
Set_IntEnable(INT_TIMER1,EnInt); //使能定时器1全局中断 
//以下操作启动定时器0 
rTCON |= BIT9; //手动更新 
rTCON &= ~BIT9; //结束手动更新 
rTCON |= BIT8; //启动定时器0 







 
static void __irq Isr_Timer2(void) 

rTINT_CSTAT |= BIT7; //清除中断标志 
if(Timer2_Isr != NULL) //注册过中断服务程序 

Timer2_Isr(); //调用中断处理程序 

VICInterruptEnd(); //中断结束 







 
void Timer2_Init(u32 RTime,FunctionalState EnInt,void (*TimerIsr)(void)) 

rTCFG0 &= ~(0xff << 8); //清除设置 
rTCFG0 |= 65 << 8; //定时器2预分频65+1,由PCLK=66提供时钟,66分频产生1MHz的定时器时钟, 
rTCON &= ~(0xf << 12); //清除设置 
rTCON |= 1 << 15; //定时器2自动更新使能 
rTCNTB2 = RTime; //重装值 
rTINT_CSTAT |= BIT7; //清除中断标志 
rTINT_CSTAT |= (EnInt == ENABLE) ? BIT2 : 0; //使能定时器2中断 
Timer2_Isr = TimerIsr; //注册中断服务程序 
Set_IsrAddr(INT_TIMER2,(u32)Isr_Timer2); //设置中断矢量入口 
Set_IntEnable(INT_TIMER2,EnInt); //使能定时器1全局中断 
//以下操作启动定时器2 
rTCON |= BIT13; //手动更新 
rTCON &= ~BIT13; //结束手动更新 
rTCON |= BIT12; //启动定时器2 







 
void RunTimeInit(void) 

Timer2_Init(0xffffffff,DISABLE,NULL); 







 
void RunTimeReset(void) 

rTCON &= ~BIT12; //停止定时器2 
nop;nop; 
rTCON |= BIT13; //手动更新 
rTCON &= ~BIT13; //结束手动更新 
rTCON |= BIT12; //启动定时器2 







 
u32 GetRunTime(void) 

return (0xffffffff - rTCNTO2);

}

 

 

 

 


#ifndef TIMER_H_
#define TIMER_H_




void Timer0_Init(u32 RTime,FunctionalState EnInt,void (*TimerIsr)(void));//定时器0初始化函数
void Timer1_Init(u32 RTime,FunctionalState EnInt,void (*TimerIsr)(void));//定时器1初始化函数
void Timer2_Init(u32 RTime,FunctionalState EnInt,void (*TimerIsr)(void));//定时器2初始化函数




void RunTimeInit(void);//程序运行时间计算初始化
void RunTimeReset(void);//程序运行时间计算计数器复位并开始
u32 GetRunTime(void);//获取程序运行时间




#endif

关键字:S3C6410  裸机定时器 引用地址:S3C6410裸机定时器

上一篇:openocd 命令行烧写ARM裸机程序
下一篇:LPC2134学习日志(二)-- LCD12864时钟

推荐阅读最新更新时间:2024-03-16 14:49

S3C6410裸机SD卡驱动(SDIO模式)
花了几天写了SD卡裸机驱动,现在还不完善,只支持4G以内的卡,以后再加上;现在经过修改可以写入数据了,亲测没问题. S3C6410_SDIO.C #include s3c6410_system.h #include s3c6410_sdio.h /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //配置 //块大小寄存器(0通道)BLKSIZE0 #define BLKSIZE0_BLKSIZE
[单片机]
s3c6410串口裸机开发串口波特率计算
假设时钟选择为PCLK(S3C6410为66Mhz) 由以下两个公式可以帮助我们通过设置相关寄存器来决定串口波特率 公式1: 公式2: 我们可以先通过公式2算出DIV_VAL的值,然后将接近DIV_VAL的值赋给寄存器UBRDIVn,然后在根据公式1算出num of 1's in UDIVSLOTn。其中UDIVSLOTn的赋值可以根据下表来设置: 通过上述配置,就将UBRDIVn和UDIVSLOTn的值确定下来,从而得到我们想要的波特率bps 将此公式和表格列出,方便以后再做开发使用。 参考: S3C6410 datasheet
[单片机]
<font color='red'>s3c6410</font>串口<font color='red'>裸机</font>开发串口波特率计算
支持S3C6410处理器SD卡启动模式的U-Boot-2011.06移植修改方案
通用Bootloader(Universal Bootloader,U-Boot)是系统上电后执行的第一段代码,其作用主要包括初始化硬件环境以及加载执行操作系统内核。在进行系统安装时,U-Boot通常需要使用专用工具烧写到FLASH中,内核及文件系统则通过U-Boot命令进行烧写,该过程操作繁琐,并且容易出错,不适宜系统的大量安装。 S3C6410是三星公司生产的一款基于ARM11架构的通用嵌入式处理器,其启动方式除了传统的Flash启动模式外,还支持从SD 卡中启动系统。本文基于S3C6410处理器,分析了从SD卡启动系统的原理,并对U-Boot源码进行修改以支持该启动方式,在此基础上进一步扩展了U-Boot的功能,使其支持
[单片机]
支持<font color='red'>S3C6410</font>处理器SD卡启动模式的U-Boot-2011.06移植修改方案
S3C6410 存储器映射
S3C6410 支持 32 位物理地址域,并且这些地址域分成两部分,一部分用于存储,另一部分用于外设。 2.1 存储器系统模块图 通过 SPINE总线访问主存,主存的地址范围是0x0000_0000~0x6FFF_FFFF。主存部分分成四个区域:引导镜像区、内部存储区、静态存储区和动态存储区。 引导镜像区的地址范围是从 0x0000_0000~0x07FF_FFFF,但是没有实际的映射内存。引导镜像区反映一个镜像,这个镜像指向内存的一部分区域或者静态存储区。引导镜像的开始地址是0x0000_0000。 内部存储区用于启动代码访问内部 ROM 和内部 SRAM,也被称做 Steppingstone。每块内部存储器的起始地址
[单片机]
在ubuntu下开发ARM裸机程序--S3C6410—LED
很多人都是在ads或者rvds或keil中开发ARM裸机程序,使用此类的开发工具虽然简单但是却不能使开发者很好的掌握更多程序原理,要想更好的掌握更多程序细节,感觉还是最好使用arm-linux-进行开发。 转载请注明出处,谢谢,张同浩:http://blog.csdn.net/muge0913/article/details/15016959 邮箱:muge0913@sina.com 下面是一个简单的点亮led灯的程序,在tiny6410上运行。其中set_peri_port函数是必须要添加的,这样才能访问到s3c6410的外设空间。 @ @ File:led_on.S @ 功能:LED点灯程序,点亮LED1 @
[单片机]
S3C6410核心初始化
一:异常向量表 异常定义:因为内部或者外部一些事件,导致处理器停下正在处理的工作,转而去处理这些发生的事件。当一种异常发生的时候,ARM处理器会跳转到对应该异常的固定地址去执行异常处理程序,而这个固定的地址,就称之为异常向量。以下为七个异常向量及处理函数跳转关系组成的表。 在Data Abort和IRQ之间有一段地址没有用上,在初始化的时候需要补上一段_not_used ,不然的话会报错,在发生异常的时候,程序会跳转到undefined_instruction: nop这段去执行,由于现在还不需要操作这些异常向量,所以在后面只加上nop。具体以后还会进一步学到 .text .global _start _st
[单片机]
<font color='red'>S3C6410</font>核心初始化
ARM Linux (S3C6410架构/2.6.35内核)的内存映射(四)
set_pte_ext()的作用是根据Linux给出的Linux版本页表项来填充Arm硬件版本的页表项。 对于s3c6410,set_pte_ext()函数由汇编宏armv6_set_pte_ext来实现,定义在proc-macros.S文件中。 进入函数时,参数分别为: r0: pte的地址,这里的pte是二级页表Linux版本中对应的页表项。 r1: Linux版二级页表项的内容。 r2: 0。 .macro armv6_set_pte_ext pfx str r1, , #-2048 @ linux version bic r3, r1, #0x000003fc bic r3, r3, #PTE_TYPE_
[单片机]
基于S3C6410的ARM11学习(五) 核心初始化之关闭看门狗
之前已经完成了设置中断向量表和设置处理器模式。下一步,就是要关闭看门狗。 看门狗,这个东西,在嵌入式系统里面是很常见的一个东西。这个是芯片预先做好的硬件,软件可以对硬件进行配置。说白了,这个东西就是一个定时器,定时器溢出的时候,如果设置开启看门狗的话,就会强制CPU复位。这样,好处就是防止程序跑飞。因为程序正常执行的时候,我们肯定是要对看门狗计数清零的,这样才能保证看门狗不会溢出,不会使CPU复位。 S3C6410的看门狗有两个功能: 作为常规定时器,并且可以产生中断 作为看门狗定时器,当计数器递减为0,产生复位信号。 下面是看门狗的框图
[单片机]
基于<font color='red'>S3C6410</font>的ARM11学习(五) 核心初始化之关闭看门狗
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved