历史上的今天
今天是:2025年05月10日(星期六)
2019年05月10日 | ARM的PWM定时器(S3C2440)
2019-05-10 来源:eefocus
参考S3C2440的数据手册的第10章《PWM定时器》
概述
S3C2440A 有 5 个 16 位定时器。其中定时器 0、1、2 和 3 具有脉宽调制(PWM)功能。定时器 4 是一个无输出引脚的内部定时器。定时器 0 还包含用于大电流驱动的死区发生器。
S3C2440有两个8 位预分频器。定时器 0 和 1 共用一个 8 位预分频器,定时器 2、3 和 4 共用另外的 8 位预分频器。使得PCLK分频进入下一步操作。8 位预分频器由TCFG0寄存器设置。
每个定时器都有一个可以生成 5 种不同分频信号(1/2,1/4,1/8,1/16 和 TCLK)的时钟分频器。使得经过8 位预分频器的时钟再次分频。由TCFG1寄存器设置。
看一下PWM定时器的方框图

从方框图仅能看出定时器的时钟频率,具体如何工作还需看内部结构。
下图为内部控制逻辑图

定时器的工作流程为:
设置TCMPBn和TCNTBn,分别为比较值和初值。
随之设置TCON启动定时器,这时,TCMPBn和TCNTBn的值被装载至TCMPn和TCNTn。定时器的TCNTn开始减1计数。
当TCNTn的值等于TCMPn的值时,定时器的输出管脚TOUTn的输出电平反转。定时器的TCNTn继续减1计数。
当TCNTn的值减到0时,输出管脚TOUTn的输出电平再次反转。并处罚中断。
当TCNTn的值减到0时,如果TCON寄存器中设置为自动重载,则TCMPBn和TCNTBn的值被自动装载至TCMPn和TCNTn,开始下一个计数流程。
对于定时器的操作:
1设置时钟
2设置初值
3加载初值,启动Timer
4设置自动加载
5中断相关
编程
具体代码如下:
#include "timer.h"
extern flag;
void interrupt_init(void)
{
INTMSK &= ~(1<<10); /* Service available */
}
/* 定时器输入时钟频率 = PCLK / {预分频值+1} / {分频值} */
/* 31250 = 50000000/(99+1)/16 */
void timer_init(void)
{
TCFG0 = 99; //定时器0和1的预分频值为99
TCFG1 &= ~(0xf<<0);
TCFG1 |= (3<<0); //定时器1的分频值为1/16
TCNTB0 = 31250; //定时周期设为1s
TCON |= (1<<1); //手动更新
TCON &= ~(1<<1);
TCON |= ((1<<0) | (1<<3)); //开启自动重载,开启定时器
}
void timer_isr(void)
{
if (flag)
{
GPFDAT |= (1<<4);
GPFDAT |= (1<<5);
GPFDAT |= (1<<6);
flag = 0;
}
else
{
GPFDAT &= ~(1<<4);
GPFDAT &= ~(1<<5);
GPFDAT &= ~(1<<6);
flag = 1;
}
SRCPND |= (1<<10); //清中断
INTPND |= (1<<10);
}
史海拾趣
|
基于 TMS320C2812DSP的智能循环水控制器的设计 江存胜 ,段建民 ,綦 慧 ,李大庆 ,倪少强 ( )北京工业大学 电控学院自动化系,北京 100022 摘要: 针对传统控制中自动化程度较低的问题 ,研制了智能工业循环水加药控制系统。该控制 ...… 查看全部问答> |
|
自从让我们一起DIY个 FPGA开发板, 报名喽~~~ 之后 很久没给大家消息了,附件是电路图,protel99格式的, 之前只画过简单的,所以希望大家给予指教…… 一点相关资料:Altera Configuration Handbook & cyclone_device_handbook & ...… 查看全部问答> |
|
现在我负责的模块是地图的绘制,就是说我封装一些函数,当别人需要绘制地图上的公路,铁路时,就调用我的函数就行。但是我现在一点头绪都没有,大牛们能不能给一些指导,谢谢。… 查看全部问答> |
|
GPIO初始化配置成GPIO_Mode_Out_PP后怎么是低电平呢? 我用PB14以吸收电流的方式驱动一个LED灯,下面是初始化代码:GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; //1GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; ...… 查看全部问答> |
|
请教各位:当系统中有一个20MHz的输入时钟时,经过PLL倍频后,产生一100MHz和一20MHz的内部时钟时,Clock Setting那里如何设置,是不是应填最大的100MHz? PLL出来的100MHz和20MHz是不是相对于20MHz的输入时钟为衍生时钟?Individual Clocks是不 ...… 查看全部问答> |
|
自己写了个小程序,把51开发板上的键盘,LCD,串口通信,24C02存储都整合到了一起。程序大致分为两块,一个是串口通信,一个是数据存储、查询。PC可以向单片机发送数据,单片机接受并显示,同时可以将其存储进24C02中。查询模块可以读取24C02中的数 ...… 查看全部问答> |




