S3C2440PWM 定时器

发布者:安静的夜晚最新更新时间:2016-04-18 来源: eefocus关键字:S3C2440  PWM  定时器 手机看文章 扫描二维码
随时随地手机看文章
         S3C2440A 有5个16位定时器。其中定时器0、1、2和3具有脉宽调制(PWM)功能。定时器4是一个无输出引脚

的内部定时器。定时器0还包含用于大电流驱动的死区发生器。
        定时器0和1共用一个8位预分频器,定时器2、3和4共用另外的8位预分频器。每个定时器都有一个可以生成5种

不同分频信号(1/2,1/4,1/8,1/16和TCLK)的时钟分频器。每个定时器模块从相应8位预分频器得到其自己的时钟信

号。8位预分频器是可编程的,并且按存储在TCFG0和TCFG1寄存器中的加载值来分频PCLK。
        定时计数缓冲寄存器(TCNTBn)包含了一个当使能了定时器时的被加载到递减计数器中的初始值。定时比较缓

冲寄存器(TCMPBn)包含了一个被加载到比较寄存器中的与递减计数器相比较的初始值。这种 TCNTBn 和CMPBn

的双缓冲特征保证了改变频率和占空比时定时器产生稳定的输出。 
    每个定时器有它自己的由定时器时钟驱动的 16 位递减计数器。当递减计数器到达零时,产生定时器中断请求通知

CPU定时器操作已经完成。当定时器计数器到达零时,相应的TCNTBn的值将自动被加载到递减计数器以继续下一次

操作。然而,如果定时器停止了,例如,在定时器运行模式期间清除 TCONn 的定时器使能位,TCNTBn的值将不会

被重新加载到计数器中。 
    TCMPBn的值是用于脉宽调制(PWM)。当递减计数器的值与定时器控制逻辑中的比较寄存器的值相匹配时定时

器控制逻辑改变输出电平。因此,比较寄存器决定PWM输出的开启时间(或关闭时间)。

以上为数据手册的描述

定时器专用寄存器有6种共17个寄存器
TCFG0  配置寄存器0
TCFG1 配置寄存器1
TCON 控制寄存器
TCNTBn  计数初值寄存器(5个)
TCMPBn 比较寄存器(4个)
TCNTOn 观察寄存器(5个)

 一个定时器0初始化代码

[cpp] view plain copy
 
  1. void Timer0_Init(void)  
  2. {  
  3.     rTCFG0 &=~(0xFF);   //对TCFG0[0:15]清零  
  4.     rTCFG0 |=99;        //定时器的预分频值为99   
  5.     rTCFG1 &=~(0x0f);   //对TCFG1[0:3]清零  
  6.     rTCFG1 |=0x02;      //选择定时器0,分频值为1/8  
  7.     rTCNTB0 =62500;     //1s中断一次  
  8.     rTCON  |=(1<<1);  //手动更新TCNTB0的值  
  9.     rTCON  =(1<<0)|(1<<3);  //清除手动更新。自动重载,启动定时器0  
  10. }  

说明:
定时器输入时钟频率 = PCLK / {预分频值+1} / {分频值} 
{预分频值} = 0~255 
{分频值} = 2, 4, 8, 16

 

开发板设置的PCLK为50MHZ

定时器输入的时钟频率=(50MHZ)/(99+1)/8=62500HZ

 //开发板的测试蜂鸣器的试验程序(我写出了详细的注释)

 
  1. #include "2440addr.h"  
  2. #include "2440lib.h"    //这个只使用了这个文件的延迟函数,和串口有关的函数  
  3.   
  4. void Beep_Freq_Set( U32 freq )  
  5. {  
  6.   
  7.     rGPBCON &=~3;  
  8.     rGPBCON |=2;        //设置GPB0为OUT0  
  9.   
  10.     rGPBUP=0x0;     //使能上拉  
  11.   
  12.     rTCFG0 &=~0xff;  
  13.     rTCFG0 |=15;        //预分频值为15  
  14.       
  15.     rTCFG1 &=~0x0f;  
  16.     rTCFG1 |=0x02;  //分频值为8  
  17.       
  18.     rTCNTB0 = (PCLK>>7)/freq; //设定定时器0计数缓冲器的值     
  19.     rTCMPB0 = rTCNTB0>>1;     // 定时器0比较缓冲器的值,PWM输出占空比50%     
  20.     
  21.     rTCON &= ~0x1f;    
  22.     rTCON |= 0xb;   //自动重载,关闭变相,手动更新,开启定时器0     
  23.     rTCON &= ~2;            //清除手动更新位     
  24. }    
  25.     
  26. void Beep_Stop( void )    
  27. {    
  28.     rGPBCON &= ~3;          //set GPB0 as output     
  29.     rGPBCON |= 1;    
  30.     rGPBDAT &= ~1;       //输出低电平     
  31. }    
  32.   
  33. void Beep_Init(U32 freq, U32 ms)    
  34. {    
  35.     Beep_Stop() ;   
  36.     Delay( ms ) ;    
  37.     Beep_Freq_Set( freq ) ;     
  38. }  
  39.     
  40. void Main()  
  41. {  
  42.     U16 freq=800;  
  43.       
  44.     SelectFclk(2);  //设置系统时钟 400M       
  45.     ChangeClockDivider(2, 1);      //设置分频 1:4:8  
  46.     CalcBusClk();           //计算总线频率  
  47.       
  48.     rGPHCON &=~((3<<4)|(3<<6));     
  49.     rGPHCON |=(2<<4)|(2<<6);    //GPH2--TXD[0];GPH3--RXD[0]     
  50.     rGPHUP=0x00;        //使能上拉功能  
  51.           
  52.     Uart_Init(0,115200);  
  53.     Uart_Select(0);  
  54.       
  55.     Uart_Printf( "\nBUZZER TEST ( PWM Control )\n" );  
  56.     Uart_Printf( "Press +/- to increase/reduce the frequency of BUZZER !\n" ) ;  
  57.     Uart_Printf( "Press 'ESC' key to Exit this program !\n\n" );  
  58.   
  59.     Beep_Init( freq ,50) ;  
  60.   
  61.     while( 1 )  
  62.     {  
  63.         U8 key = Uart_Getch();  
  64.   
  65.         if( key == '+' )  
  66.         {  
  67.             if( freq < 2000 )  //lci  20000  
  68.                 freq += 10 ;  
  69.                   
  70.             Beep_Freq_Set( freq ) ;  
  71.         }  
  72.   
  73.         if( key == '-' )  
  74.         {  
  75.             if( freq > 11 )  
  76.                 freq -= 10 ;  
  77.                   
  78.             Beep_Freq_Set( freq ) ;  
  79.         }  
  80.           
  81.         Uart_Printf( "\tFreq = %d\n", freq ) ;  
  82.         if( key == ESC_KEY )  
  83.         {  
  84.             Beep_Stop() ;  
  85.             return ;  
  86.         }  
  87.   
  88.     }  
  89. }  

 

 

 

关键字:S3C2440  PWM  定时器 引用地址:S3C2440PWM 定时器

上一篇:S3C2440时钟电源管理
下一篇:S3C2440输入/输出端口

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

西门子S7系列的保持型接通延时定时器介绍
保持型接通延时定时器时序如下: 例3.2.4 STL语句表如下: A I 0.0 L S5T#2s 装入定时时间到ACCU1 SS T5 启动保持型延时接通定时器T5 A I 0.1 R T 5 定时器T5复位 A T 5 = Q 4.0 FBD 功能图如下: 时序图如下:
[嵌入式]
西门子S7系列的保持型接通延时<font color='red'>定时器</font>介绍
PFC和PWM开关电源控制器
    Micro Linear公司的8引脚封装功率因数校正(PFC)和脉冲宽度调制(PWM)电源控制器ML4803,为设计低输入电流谐波畸变的高品质开关电源(SMPS)提供一切所必需的功能,使其元件数量明显减少,成本降低。     根据IEC1000-3-2规范要求,SMPS必须采取谐波抑制措施。Bi-CMOS ML4803采用多项专利技术,将PFC与PWM控制器二合一集成到同一芯片上,并使二者同步化,把引脚由原先的至少16个减少到8个,成为目前引脚最少的PFC和PWM混合型IC。     ML4803采用先进的AC输入电流整形技术,内含平均电流(或峰值)升压型前沿PFC。ML4803的PFC控制器,由新发明的
[应用]
基于S3C2440的嵌入式Linux驱动——看门狗(watchdog)驱动解读
本文将介绍看门狗驱动的实现。 目标平台:TQ2440 CPU:s3c2440 内核版本:2.6.30 1. 看门狗概述 看门狗其实就是一个定时器,当该定时器溢出前必须对看门狗进行 喂狗“,如果不这样做,定时器溢出后则将复位CPU。 因此,看门狗通常用于对处于异常状态的CPU进行复位。 具体的概念请自行百度。 2. S3C2440看门狗 s3c2440的看门狗的原理框图如下: 可以看出,看门狗定时器的频率由PCLK提供,其预分频器最大取值为255+1;另外,通过MUX,可以进一步降低频率。 定时器采用递减模式,一旦到0,则可以触发看门狗中断以及RESET复位信号。 看门狗定时器的频率的计算公式如下
[单片机]
基于<font color='red'>S3C2440</font>的嵌入式Linux驱动——看门狗(watchdog)驱动解读
STM32学习--PWM测试
  今天针对通用定时器的输入捕获和PWM输出进行了学习测试,使用库函数进行。 1. PWM输出测试 1.1 测试方法   输出测试使用软件调试方法,直接在MDK调试界面的逻辑分析仪进行。软件调试设置网上一堆一堆的,我只描述一下遇到问题点。   图中,软件仿真只用设1、2项,加入硬件调需设第3项。 打开逻辑分析仪,在setup中输入想看的端口,如下图设置。   在端口号上右击,选择bit,然后运行即可看PWM输出的效果。 1.2测试的程序 ① GPIO设置,主要是时钟、复用时钟、推挽输出、由于用默认的映射所以不用GPIO_PinRemapConfig。 void PWMOut_GPIO_Init() { GP
[单片机]
STM32学习--<font color='red'>PWM</font>测试
基于555定时器构成的多谐振荡器的应用
1.引言 繁华的都市,当夜幕降临时,五缤纷的彩灯灯便亮了起来,点亮这个黑暗的世界,给人民生活增添一点情趣,而流水灯是其中的角色之一。随着技术的不断发展,控制彩灯的电路不断更新,这里主要介绍由555定时器构成的流水灯控制电路。 2.555定时器 2.1 555定时器的内部结构(如图1所示):     (1)分压器 ①5脚悬空时。 ②5脚外接控制电压时。 (2)电压比较器 电压比较器C1和C2是两个结构完全相同的理想运算放大器。比较器有两个输入端,分别用1和0表示相应输入端上所加的电压,用表示比较器的比较结果(1代表高电平,0代表低电平)。 (3)基本RS触发器     (4)放电三极管 V1是一个集电极开路的放电三极管。当时,V
[电源管理]
基于555<font color='red'>定时器</font>构成的多谐振荡器的应用
基于嵌入式的远程监控系统的设计
 对图像监控系统,用户常常提出这样的功能需求:希望能够监控距离较远的对象。这些对象有可能分布在郊区、深山,荒原或者其他无人值守的场合;另外,希望能够获取比较清晰的监控图像,但对图像传输的实时性要求并不高,很明显,用传统的PC机加图像采集卡的方式很难满足这样的需求。 在嵌入式领域,ARM9系列微处理器在高性能和低功耗方面提供了最佳的性能,因此选用ARM9嵌入式处理器S3C2440设计实现了一个远程图像光线监控系统通过这个系统,可以远在千里之外控制一个摄像机进行图像采集并回传。如果这个摄像机有一个485接口的云台,还可以通过互联网远程控制摄像机的取景角度、镜头拉伸、聚焦等功能。 除了获取图像数据.系统还提供了多路开关控制和 数
[单片机]
基于嵌入式的远程监控系统的设计
定时器计数、定时器中断函数、while(1)之间如何协调、工作?
51单片机程序,使用定时器时,定时器计数、定时器中断函数、while(1)循环三者之间如何协调好整个流程? 我拿一个最经典的单片机应用——‘流水灯’来分析吧。 【定时器0实现间隔1s的流水灯】简单示例 #include reg52.h typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; #define LED P3 bit LED_flag=0; //定时到1s的标志位 u8 n; //循环变量,用作LED总线的位索引index void InitTimer0(void); //定时器0,初始化 void mai
[单片机]
中断及定时器的应用
#include reg51.h #define uchar unsigned char #define uint unsigned int sbit K1=P3^7; uchar i,second_count, key_flag_idx; bit key_state; uchar dsy_code ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void delayms(uint ms) { uchar i; while(ms--) for(i=0;i 120;i++); } void key_event_handle() { if(k
[单片机]
中断及<font color='red'>定时器</font>的应用
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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