6410中的PWM 定时器

发布者:柳絮轻风最新更新时间:2016-07-26 来源: eefocus关键字:PWM  定时器 手机看文章 扫描二维码
随时随地手机看文章
看了OK6410的手册,感觉晕晕的。  需要整理一下思路。 
我觉得主要的知道下面这几个内容吧。 
  1. 定时器的电路结构。 
  2. 定时器的工作原理是什么。定时器如何来使用。{使用的时序是什么,在时间轴上各个寄存器应该如何配置} 
  3. 里面涉及的寄存器都有哪些。 各个寄存器的职责是什么。
 
1.       简单介绍 :
S3C6410X中有5个定时器,这些定时器产生内部中断。其中,Timer0和Timer1具有PWM功能,而Timer2,3,4没有此功能。
PWM具有两种操作模式:自动装载模式,一次触发模式。为实现PWM功能,芯片提供了16个功能寄存器。这些功能寄存器都连接APB总线。
定时器具有双缓冲特性,这样就能在不停止当前定时器操作的情况下,为下次定时器运行装入新的数值。尽管为定时器设置了新数值,但当前的定时操作能够成功完成。定时器从TCNTBn读取的值是为下次延时定时用的,并不影响当前定时器的运行。当TCNTn减小到0的时候,TCNTBn的值会自动复制到TCNTn中,这就是说的自动装载操作。定时器的当前计数值可以从定时计数观察寄存器中TCNTOn读取。如果TCNTn为0且从装载也为0的话则TCNTn不在进行下次操作。
2.       定时器的电路结够图: 

6410中的PWM 定时器 - Melchior - Melchiors Home
 
  1. 定时器架构流程。
    • à  经过8位的预分频器【8bit prescaler0】  --à   分频器divider   [1/1 1/2 1/4 1/8 1/16]   -à  多路选择器  MUX   -à   逻辑控制器【比较TCMPBn和TCNTBn的数值】--à (deadzone generator )  --à  时钟
  计算公式:6410中的PWM 定时器 - Melchior - Melchiors Home
 4.        定时器的工作原理是什么。 

6410中的PWM 定时器 - Melchior - Melchiors Home
 
每个定时器有32位的递减计数器。递减计数器的初始值由TCNTBn来加载。  当计数器的值变为0时, 定时器产生中断信号通知cpu定时器操作完成。   当计数器的值变为0时,TCNTBn的值自动加载到递减计数器并开始下个周期的操作。    如果定时器停止工作(比如,在定时器工作模式期间清空寄存器TCONn的定时器使能位,这样对应的定时器就会停止工作),这时TCNTBn的值就不会加载到定时器。  

6410中的PWM 定时器 - Melchior - Melchiors Home
 
而对于PWM 功能,要用到寄存器TCMPBn,当递减计数器down-counter的值和比较寄存器TCMPBn的值相同时,定时控制逻辑模块就会改变输出电平。因此比较寄存器TCMPBn决定了PWM的输出。
而且TCNTBn 和 TCMPBn寄存器具有双缓冲特性,这样就能在不停止当前定时器操作的情况下,为下次定时器运行装入新的数值。尽管为定时器设置了新数值,但当前的定时操作能够成功完成。
5.  定时器的工作时序

6410中的PWM 定时器 - Melchior - Melchiors Home
 

6410中的PWM 定时器 - Melchior - Melchiors Home

我说怎么在上面的第一步中突然冒出个TCNTn和TCMPn,我以为是数据手册错了,因为在PWM提供的16个寄存器中没有这两个寄存器。  那么请看下面: 

6410中的PWM 定时器 - Melchior - Melchiors Home
 
从上面内容看出。TCNTn和TCMPn是内部的寄存器(internal registers ).而TCNTn寄存器的值可以通过读取寄存器TCNTOn来获得。 
6.       16个特殊功能寄存器

6410中的PWM 定时器 - Melchior - Melchiors Home

7.接下来看一下飞凌提供的精确控制LED的程序。【利用定时器来精确控制LED跑马灯,每隔1s轮询点亮】

#define rGPMCON                       (*(volatile unsigned*)(0x7F008820)) 
#define rGPMDAT                      (*(volatile unsigned*)(0x7F008824)) 
#define rGPMPUD                       (*(volatile unsigned*)(0x7F008828)) 


#define PCLK  66000000 //forS3C6410 66MHZ 
#define HCLK 133000000 //forS3C6410 133MHZ 


#define rTCFG0                (*(volatile unsigned*)(0x7F006000)) 
#define rTCFG1                (*(volatile unsigned*)(0x7F006004)) 


#define rTCON                 (*(volatile unsigned*)(0x7F006008)) 
#define rTCNTB0               (*(volatile unsigned*)(0x7F00600C)) 
#define rTCMPB0               (*(volatile unsigned*)(0x7F006010)) 


#define rTCNTO0               (*(volatile unsigned*)(0x7F006014)) 
#define rTCNTB1               (*(volatile unsigned*)(0x7F006018)) 
#define rTCMPB1               (*(volatile unsigned*)(0x7F00601c)) 


#define rTCNTO1               (*(volatile unsigned*)(0x7F006020)) 
#define rTCNTB2               (*(volatile unsigned*)(0x7F006024)) 
#define rTCNTO2               (*(volatile unsigned*)(0x7F00602c)) 


#define rTCNTB3               (*(volatile unsigned*)(0x7F006030)) 
#define rTCNTO3               (*(volatile unsigned*)(0x7F006038)) 
#define rTCNTB4               (*(volatile unsigned*)(0x7F00603c)) 


#define rTCNTO4               (*(volatile unsigned*)(0x7F006040)) 
#define rTINT_CSTAT  (*(volatile unsigned*)(0x7F006044)) 


void uDelay(int usec) 

   unsigned int val=(PCLK)/1000000-1; //val = 65
   
//configure prescaler and divider
   rTCFG0&=~(0xff<<8); //0000_0000_1111_1111  TCFG0[15:8-7:0]
   rTCFG0|=0<<8;       //0000_0000_0000_0000 | 0000_0000_1111_1111   prescalar0 = 255  timer0,timer1 的prescalar value= 255  timer2,3,4的prescalar1 value = 0 
   
   rTCFG1&=~(0xf<<8); // 0000_1111_1111   TCFG1 [7:0] = 1111_1111 TCFG1[11:8] = 0000(select mux for timer2 .   divider value = 1 );   
   rTCFG1|=0<<8; 
   
   //compute   :   
   //timer input clock frequency = PCLK /({prescaler value + 1})/{divider value}   
   // timer2 input clock frequency = 66M /(1)/(1)= 66M hz  
 
//configure timer counter buffer  and enable timer2    
   rTCNTB2=val; 
   
   rTCON&=~(0xf<<12); //  0000_1111_1111_1111
   rTCON|=0xb<<12;    //  1011_0000_0000_0000 |0000_1111_1111_1111 = 1011_1111_1111_1111
   rTCON&=~(2<<12);   //  1101_1111_1111_1111 &1011_1111_1111_1111 = 1001_1111_1111_1111
【//   TCON(Timer control register)

6410中的PWM 定时器 - Melchior - Melchiors Home
//1001   : 表示 :   auto-reload  ,   start timer2】
   //TCON[15]=1 auto-reload 
   //TCON[14]  Reserved bits 
   //TCON[13]=0  no operatin ,  =1,update TCNTB2 TCMPB2
   //TCON[12]=0  stop ,  =1 ,start timer2 
   
   
   //rTCON&= 0x9fff;  //这样不就可以了吗 ,为什么要花三条语句来写。 
   while(usec--){ 
           while(rTCNTO2 >= val>>1); 
           while(rTCNTO2 < val>>1); 
      }; 





void msDelay(int time) 



           volatile unsigned int i,j; 
           for(i=0;i<2000000;i++) 
     for(j=0;j


void GPIO_Init(void) 



         rGPMCON =0x11111; 
         rGPMPUD =0x00; 


         rGPMDAT =0X1F; 



void LedTest(void) 

         volatile unsigned int i ,j; 


         while(1) 
         { 
                 for(i=0;i<4;i++) 


                 { 
                          rGPMDAT =~(1<                           for(j=0;j<1000;j++) 


                          uDelay(1000); 
                 } 
         } 



void Main(void) 

         GPIO_Init(); 
         LedTest(); 





备注:  这里只是使用了定时器来精确定时,并没用用定时中断服务。   
关键字:PWM  定时器 引用地址:6410中的PWM 定时器

上一篇:OK6410 裸机中断最简单代码
下一篇:ARM 11 裸奔之一 LED循环点亮

推荐阅读最新更新时间:2024-03-16 15:01

stm32cube通用定时器输入捕获
用定时器输入捕获做红外线接收实验。(此次试验以通道2为例) ①stm32cube配置 ② ③ ④程序中主要用到的输入捕获相关寄存器 uint16_t tim_sr,tim_ccer,tim_ccr; tim_sr=htim- Instance- SR;//状态寄存器 tim_ccer=htim- Instance- CCER;//捕获、比较使能寄存器 tim_ccr=htim- Instance- CCR2;//捕获比较寄存器2(即用来保存通道2发生中断时的CNT寄存器的值) htim- Instance- CNT //计数寄存器 SR用来判断是不是输入捕获中断; CCER寄存器用来判断当前是下降
[单片机]
stm32cube通用<font color='red'>定时器</font>输入捕获
stm32定时器实现PWM输出控制无源蜂鸣器(HAL)
(一)PWM概念和原理 脉冲宽度调制(PWM),是英文“Pulse Width Modulation 的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。 PWM原理示意图 上图是简单的PWM原理示意图。图中,我们假定定时器工作在向上计数PWM模式,且当CNT (二)代码示例 环境:STM32F103C8 主频64MHz TIM3 (1)GPIO初始化 GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Speed = GPIO_S
[单片机]
stm32<font color='red'>定时器</font>实现<font color='red'>PWM</font>输出控制无源蜂鸣器(HAL)
STM32CubeMX:基本定时器
芯片:STM32F103C8T6 应用管脚: 输出:PA0、PA1 TIM3 实现1ms定时功能,系统TIMx_CNT=8MHZ=8000 000HZ,设置TIMx_PSC=800-1,那么TIMx_ARR=(TIMx_CNT/TIMx_PSC)*定时器时间=(8000000/800)*0.001=10,TIMx_ARR=10-1。 配置界面 TIM3配置 开启NVIC中断配置 程序中增加回调函数 /* USER CODE BEGIN 4 */ /** * @brief Period elapsed callback in non blocking mode * @par
[单片机]
STM32CubeMX:基本<font color='red'>定时器</font>
基于AVR单片机设计的加热控制系统
1 引言 温度是工业生产中主要的被控参数之一,与之相关的各种温度控制系统广泛应用于冶金、化工、机械、食品等领域。文中介绍的文化测量及加热控制系统以 ATmega8型AVR系列单片机为核心部件,通过对系统软件和硬件设计的合理规划,发挥单片机自身集成众多系统级功能单元的优势,在不减少功能的前提下有效降低了硬件成本,系统操控简便。实验证明该温控系统具有很高的可靠性和稳定性。 2 系统结构及控制算法 2.1系统总体结构 温度测量及加热系统控制的总体结构如图1所示。系统主要包括现场温度采集、实时温度显示、加热控制参数设置、加热电路控制输出、与上位机串行通信和系统核心ATmega8型单片机等。 温度采集电路以模拟电压形式将现场温度传至单片机。
[单片机]
基于AVR单片机设计的加热控制系统
ARM筆記:定时器中断的应用
s3c2440芯片中一共有5个16位的定时器,其中有4个定时器(定时器0~定时器3)具有脉宽调制功能,即他们都有个输出引脚,可以通过定时器来控制引脚周期性的高低电平变化,定时器4没有输出引脚。上次脱机运行PWM测试程序实验的时候就用到了这块,所以这次将PWM和定时器放在一起来学习。 定时器部件的时钟源为PCLK,首先通过两个8位预分频器降低频率,定时器0和1共用第一个预分频器,2,3,4共用第二个预分频器。 预分频器输出接入第二级分频器,可以生成5种分频信号(1/2,1/4,1/8,1/16,TCLK),其中8位预分频器是可编程,根据装载值来分频PCLK,值储存在TCFG0和TCFG1中。 定时器内部控制逻辑工作流程如下:
[嵌入式]
利用STM32高精度定时器实现PWM输出的实现原理
很多STM32系列的MCU内置高精度定时器,比方STM32F334、STM32G4、STM32H7等系列。利用高精度定时器实现PWM输出应该说是最基本的功能了。不过,在实际应用中,常有人觉得无法实现duty=0或duty=100%的PWM输出情形。这里以STM32F334的HRTIM为例,简单介绍下利用它实现PWM输出的实现原理。 STM32F334的HRTIM的功能框图如下,由一个MASTER定时器和ABCDE五个定时器单元组成。其中ABCDE五个定时器单元各可以产生2路输出信号,并支持互补输出。 先看看跟HRTIM有关的时钟。别的系列有支持向上、向下计数模式的。 在利用HRTIM中的定时器单元实现PWM输出时,基于不同
[单片机]
利用STM32高精度<font color='red'>定时器</font>实现<font color='red'>PWM</font>输出的实现原理
STM32定时器的输入滤波机制
STM32的定时器输入通道都有一个滤波单元,分别位于每个输入通路上(下图中的黄色框)和外部触发输入通路上(下图中的兰色框),它们的作用是滤除输入信号上的高频干扰。 具体操作原理如下: 在TIMx_CR1中的CKD 可以由用户设置对输入信号的采样频率基准,有三种选择: 1)采样频率基准fDTS=定时器输入频率fCK_INT 2)采样频率基准fDTS=定时器输入频率fCK_INT/2 3)采样频率基准fDTS=定时器输入频率fCK_INT/4 然后使用上述频率作为基准对输入信号进行采样,当连续采样到N次个有效电平时,认为一次有效的输入电平。 实际的采样频率和采样次数可以由用户程序根据需要选择;外部触发输入通道的滤波参数
[模拟电子]
STM32<font color='red'>定时器</font>的输入滤波机制
抗电磁干扰的PWM风扇控制器
微芯科技(Microchip )公司提供一种工作于 PWM模式的风扇制冷速度控制器系列产品,用于无刷直流风扇(参考文献1)。为了利用PWM波形的占空比来控制风扇速度,可以使用外部 NTC(负温度系数)热敏电阻或微芯公司的一种PIC微控制器及其 SMBus 串行数据总线。图1示出了TC664 和 TC665 控制器数据资料描述的一种典型应用(参考文献2)。利用电容值为1mF的频率控制电容器CF和风扇控制器IC1产生一个PWM脉冲串,它的标称频率为30 Hz,依赖于温度或命令的占空比变化范围是30%"100%。   虽然使用PWM模式的控制器可以降低晶体管QA(它驱动风扇)的功耗,但 100 mA 方波电机驱动电流可能对
[传感技术]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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