定时器的输入时钟是PCLK;
T0和T1为一组,T0、T1共用一个8bit分频器
T2、T3、T4为一组,共用一个8bit分频器,T4没有输出引脚只能做内部时钟使用。
8bit分频后还有一个1/2 1/4 1/8 1/16 的clock divider。
定时器输入时钟频率计算如下:
[ /(prescaler+1)]/分频器的分频值
prescaler value = 119
divider value = 1/16
PCLK= 50700000
Timer input clock Frequency =50700000/ (119+1)/(16)=26406
就是输入的时钟,prescaler就是分频值(2,4,8,16),其中TCFG0控制着prescaler的分频值;TCFG1控制着分频器的值(2,4,8,16)。
l 定时器减法缓冲寄存器TCNTBn和比较缓冲寄存器TCMPBn
TCNTBn存放计数值,TCMPBn存放比较值,当定时器开启后TCNTBn和TCMPBn将被下载到TCNTn和TCMPn中,TCNTn和TCMPn不会理会硬件自动操作。当TCNTn和TCMPn值相等时电平反转,当TCNTn为零时CU产生中断。其实如果只是定时作用的话是不用去操作TCMPBn的,TCMPBn用于产生PWM波。
l 定时器控制寄存器TCON和定时器观察寄存器TCNTOn
定时器0的初始化
void Timer0_Init()
{
//设置TOUT0为输出引脚
TCFG0 = 99;//预分频器值
TCFG1 = 0x03;//16分频
TCNTB0 = 31250;//the time interal is 1s=(50M/(99+1)/16)
TCON = 0xa;//手动更新
TCON = 0x9;//自动更新
INTMASK &= (~(1<<10));//允许定时器0中断。
}
关键字:S3C2440 定时器 pwm编程
引用地址:
S3C2440定时器和pwm编程分析
推荐阅读最新更新时间:2024-11-11 10:17
S3C2440上触摸屏驱动
建立触摸屏驱动程序my2440_ts.c,首先实现加载和卸载部分,在驱动加载部分,我们主要做的事情是:启用ADC所需要的时钟、映射IO口、初始化寄存器、申请中断、初始化输入设备、将输入设备注册到输入子系统。代码如下: #include linux/module.h #include linux/kernel.h #include linux/clk.h #include linux/init.h #include linux/input.h #include linux/serio.h #include plat/regs-adc.h #include asm/irq.h #include asm/io.h /*用于保存从平台时
[单片机]
s3c2440裸机开发环境的搭建
用于arm裸机程序开发的IDE基本有MDK,IAR,还有ADS,也可以选择在linux下安装交叉编译链来进行开发。笔者选择的是MDK作为我进行开发的IDE。下面介绍笔者搭建开发环境的过程。 笔者主要参考了两篇博文来进行开发环境的搭建的,分别是: http://blog.csdn.net/mybelief321/article/details/8910528 http://blog.csdn.net/shengnan_wu/article/details/8116815 笔者搭建后的相关环境如下: 开发板:mini2440 操作系统:Windows 8.1 64位 开发环境:MDK 4.6版本 仿真器
[单片机]
STM32F107VCT6的通用定时器配置
将TIM2的周期配置成0.2ms。 定时器周期公式:(1+TIM_Prescaler )/72M)*(1+TIM_Period ) #define NVIC_Priority_Timer2 1 unsigned int Period_TIM2 = 14400; void TIM2_Init_Config(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); NVIC_InitStru
[单片机]
【STM32基础学习】定时器使用(HSE时钟倍频PLL 72M)
1、STM32F103ZE 定时器资源介绍 共有 11 个定时器 包括 2 个高级控制定时器、4 个通用定时器、2个基本定时器(TIM6/TIM7),以及 2 个看门狗定时器和 1 个系统定时器(SysTick)。 2、基本定时器 包括 TIM6 和 TIM7 两个定时器模块 由计数器寄存器(TIMx_CNT)(和51的TH/TL一样一样的。。。。)、预分频寄存器(TIMx_PSC)、自动重装载寄存器(TIMx_ARR)三部分构成。 3、定时器时钟 时钟源有三个,HSI、HSE 和 PLL。 HSI - 由 内部 RC 振荡器产生8MHz,精度较差,对时钟精度不敏感的情况下使用; HSE - 由 外部时钟源产生
[单片机]
S3C2440挂载NFS根文件系统
主要记录下如何在ARM开发板上挂载NFS根文件系统。 PC主机:Ubuntu 和redhat 9.0 目标板:TQ2440开发板,linux内核2.6.32 1.PC上安装NFS服务 sudo apt-get install nfs-kernel-server sudo apt-get install portmap nfs-common 2. 编辑/etc/exports文件 yj423@ubuntu:~$ cat /etc/exports /home/yj423/nfswork *(rw,sync,no_root_squash) 设置/home/yj423/nfswork为被挂载的文件目录 3.启动NFS服务 sudo /
[单片机]
STM8学习笔记---定时器输出7路PWM波
STM8S003F3P6单片机共有三个定时器定时器1、定时器2、定时器4。其中定时器1为16位高级定时器,定时器2为16位通用定时器,定时器4为8位基本定时器。定时器1和定时器2可以输出PWM波。其中定时器1有4个通道,定时器2有3个通道。 现在让定时器1和定时器2所有通道同时输出PWM波。 首先初始化定时器IO口 通过最小系统图可以看出定时器通道对应的IO口为: TIM1_CH1– PC6, TIM1_CH2– PC7, TIM1_CH3– PC3, TIM1_CH4– PC4, TIM2_CH1– PC5, TIM2_CH2– PD3, TIM2_CH3– PA3, 将定时器对应的IO口都设置为推挽输出模式。因为要
[单片机]
STM8 16位高级控制定时器(TIM1)
16位高级控制定时器(TIM1)简介 STM8S的TIM1由一个16位的自动装载计数器组成,它由一个可编程的预分频器驱动。 本章中使用i来代表1、2、3、4,分别对应于四个不同的捕获/比较通道。 高级控制定时器适用于许多不同的用途: 基本的定时 测量输入信号的脉冲宽度(输入捕获) 产生输出波形(输出比较,PWM和单脉冲模式) 对应与不同事件(捕获,比较,溢出,刹车,触发)的中断 与TIM5/TIM6或者外部信号(外部时钟,复位信号,触发和使能信号)同步 高级控制定时器广泛的适用于各种控制应用中,包括那些需要中间对齐模式PWM的应用,该模式支持互补输出和死区时间控制。 高级控制定时器的时钟源可以是内部时钟,也可以
[单片机]
STM32定时器触发DMA数据传输失败的原因如何解决
有人使用STM32的定时器事件触发DMA,让其将内存数据传输到通信外设的数据寄存器进行发送,发现DMA根本就不动作。 比方以基于STM32F411的芯片为例,通过TIM3更新事件触发DMA请求,DMA从内存将数据送到SPI1的数据寄存器,从而完成数据发送。 他采用CubeMx进行配置。基本配置如下: 相关用户实现代码如下: 从配置过程和代码实现来看,似乎都没有问题。那DMA怎么就是不动作呢? 问题出在我们使用上面的函数做DMA传输所关联源端和目标端时,出现了想当然的情况。 我们利用TIMER事件来作为DMA请求源时,而作为数据传输的源端或目的端,都是我们用户指定的。这时就一定要注意源端和目标端是当前DMA
[单片机]