S3C2410中文手册第10章PWM定时器Word格式.docx
《S3C2410中文手册第10章PWM定时器Word格式.docx》由会员分享,可在线阅读,更多相关《S3C2410中文手册第10章PWM定时器Word格式.docx(10页珍藏版)》请在冰点文库上搜索。
![S3C2410中文手册第10章PWM定时器Word格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/12/62ab8fe8-1dec-4d8b-ad36-545f5baa163c/62ab8fe8-1dec-4d8b-ad36-545f5baa163c1.gif)
,自动再装入模式或一次脉冲模式;
死区发生器。
图1、16位PWM定时器模块框图预定标器和分割器
一个8位预定标器和一个4位分割器作用下的输出频率:
最低分解力最高分解力最大间隔时间4位分割器的设置(预定标器=0)(预定标器=255)(TCNTBn=65535)
1/20.0300us7.6992us0.5045sec(PCLK=66.5MHz)(33.2500MHz)(129.8828KHz)
1/40.0601us15.3984us1.0091sec(PCLK=66.5MHz)(16.6250MHz)(64.9414KHz)
1/80.1203us30.7968us2.0182sec(PCLK=66.5MHz)(8.3125MHz)(32.4707KHz)
1/160.2406us61.5936us4.0365sec(PCLK=66.5MHz)(4.1562MHz)(16.2353KHz)
定时器基本操作
图2、定时器运行时序
一个定时器(定时器4除外)都包含TCNTBn、TCNTn、TCMPBn和TCMPn几个寄存器。
(TCNTn和TCMPn是内部寄存器的名称。
TCNTn的值可以通过读TCNTOn得到)当定时器达到0时,TCNTBn和TCMPBn的值将自动加载到TCNTn和TCMPn中。
当TCNTn到0且中断使能时,定时器将产生一个中断请求。
自动加载和双缓冲模式
脉宽调制定时器有一个双缓冲功能,在这种情况下,改变下次加载值的同时不影响当前定时周期。
因此,尽管设置一个新的定时器值,当前定时器的操作将会继续完成而不受影响。
定时器的值可以写入定时器计数值缓冲寄存器(TCNTBn)中,而当前计数器的值可以通过读定时器计数值观测寄存器(TCNTOn)得到。
当TCNTn的值到0时,自动加载操作复制TCNTBn的值到TCNTn中。
但是如果自动加载模式没有使能,TCNT0将不进行任何操作。
图3、双缓冲功能时序图
用手动更新位和逆变器位对定时器进行初始化
当递减计数器的值到0时,自动加载操作才能进行。
所以,用户必须预先对TCNTn定义一个起始值。
因此,起始值必须由手动更新位载入。
以下步骤描述了怎么起始一个定时器:
将初始值写入到TCNTBn和TCMPBn中;
设置相应定时器的手动更新位。
推荐配置逆变器位开或关(不管逆变器用与否);
设置相应定时器的起始位从而启动一个定时器(同时清除手动更新位)。
如果定时器被迫停止,TCNTn将保留计数器的值且不重载TCNTBn。
如果用户需要设置一个新值,必须执行手动更新。
注:
无论何时TOUT逆变器开关位的值改变,TOUTn的逻辑值将随之改变。
因此,推荐逆变器开关位的配置与手动更新位同时进行。
定时器操作步骤:
以下操作步骤地结果如图4所示。
[1]使能自动加载功能。
设置TCNTBn为160,TCMPBn为110。
设置手动更新
位并配置逆变器位。
手动更新位设置TCNTn和TCMPn的值与TCNTBn和
TCMPBn相同。
然后设置TCNTBn和TCMPBn的值分别为80和40,确定下一个周期的值。
[2]如果手动更新位为0、逆变器关且自动加载开,则设置起始位。
则在定时器
的延迟时间后定时器开始递减计数。
[3]当TCNTn的值和TCMPn相等时,则TOUTn的逻辑电平将发生改变,由低
到高。
[4]当TCNTn的值到0时,产生一个中断并且将TCNTBn的值加载到一个临时
寄存器。
在下一个时钟周期,TCNTn由临时寄存器加载到TCNTn中。
[5]在中断服务程序中,TCNTBn和TCMPBn分别设置成80和60;
[6]当TCNTn的值和TCMPn相等时,则TOUTn的逻辑电平将发生改变,由低
[7]当TCNTn到0时,TCNTn自动重新加载,并出发一个中断请求;
[8]在中断服务子程序,自动加载和中断请求都被禁止,从而将停止定时器;
[9]当TCNTn的值和TCMPn相等时,则TOUTn的逻辑电平将发生改变,由低
[10]当TCNTn的值为0时,TCNTn将不再重新加载新的值,从而定时器停止;
[11]由于中断请求被禁止,不再产生中断请求。
图4、定时器操作示意图
脉宽调制
图5、脉宽调制示意
脉宽调制功能可以通过改变TCMPBn的值实现。
PWM的频率由TCNTBn决定。
图5是一个通过改变TCMPBn的值实现PWM的例子。
如果想得到一个高的PWM值,则要减小TCMPBn的值。
相反,如果想要得到一个低的PWM值,则要增加TCMPBn的值。
如果逆变器使能的话,则情况正好相反。
由于定时器具有双缓冲功能,则在当前周期的任何时间都可以通过ISR和其
它程序改变TCMPBn的值。
输出电平控制
以下步骤描述了如何在逆变器关闭的情况下,控制TOUT的值为高或低:
关闭自动加载位。
然后,TOUT变高且在TCNTn为0后定时器停止运行;
通过定时器开始位清零来停止定时器运行。
如果TCNTn<
=TCMPn,则输出为高,如果TCNTn>
TCMPn,输出为低;
通过改变TCON中的逆变器开关位来使TOUTn为高或为低。
图6、逆变器开与关时的输出
死区发生器
死区是为了功率器件中的PWM控制。
这一功能使能在一个开关器件关闭和另一个开关器件开启的间隔时间。
这一时间间隔禁止了两个开关器件同时出于开启状态,即使是一段非常短的时间内。
TOUT0是一个PWM输出。
nTOUT0是TOUT0的反相。
如果死区使能,则TOUT0和nTOUT0的输出波形将是TOUT0_DZ和nTOUT0_DZ。
nTOUT0_DZ由TOUT1脚输出。
在死区间隔,TOUT0_DZ和nTOUT0_DZ将不会同时开启。
图7、死区使能后的输出波形
DMA请求模式
PWM定时器能在任何时间产生一个DMA请求。
定时器保持DMA请求信号(nDMA_REQ)为低直到定时器接收到ACK信号。
当定时器接收到ACK信号时,定时器将使请求信号无效。
产生DMA请求的定时器由设置DMA模式位(TCFG1)决定。
如果一个定时器配置成DMA请求模式,则此定时器将不能产生中断请求,而其它定时器将正常产生中断请求。
DMA模式配置和DMA/中断操作
图8、定时器4的DMA模式操作
PWM定时器专用寄存器
定时器配置寄存器0(TCFG0)
定时器输入时钟频率=PCLK/{预定标器的值+1}/分割器值
预定标器值=0~255;
分割器=2,4,8,16。
寄存器名称地址R/W描述初始值
TCFG00X51000000R/W配置2个8位预定标器0x0
TCFG0位描述初始值
保留31:
240x0
这8位决定死区长度,一个死区长度的单位时间等死区长度23:
160x0于定时器0的单位时间长度
预定标器115:
8决定定时器2,3,4的预定标器值0x0预定标器07:
0决定定时器0和1的预定标器值0x0定时器配置寄存器1(TCFG1)
分割器和DMA模式选择寄存TCFG10X51000004R/W0x0器
TCFG1位描述初始值
2400000000
选择DMA模式通道:
DMA模式23:
200000=Noselect;
0001=Timer0;
0010=Timer1;
0000
0011=Timer2;
0100=Timer3;
0101=Timer4;
0110=保
留
选择PWM定时器4的MUX输入
MUX419:
160000=1/20001=1/40010=1/80011=1/160000
01xx=TCLK1
选择PWM定时器3的MUX输入
MUX315:
120000=1/20001=1/40010=1/80011=1/160000
选择PWM定时器2的MUX输入
MUX211:
80000=1/20001=1/40010=1/80011=1/160000
选择PWM定时器1的MUX输入
MUX17:
40000=1/20001=1/40010=1/80011=1/160000
01xx=TCLK0
选择PWM定时器0的MUX输入
MUX03:
00000=1/20001=1/40010=1/80011=1/160000
定时器控制寄存器(TCON)
TCON0X51000008R/W定时器控制寄存器0x0
TCON位描述初始值定时器4自决定定时器4的自动加载开关220动加载开关0=一次;
1=自动加载
定时器4手决定定时器4的手动更新210动更新位0=无操作;
1=更新TCNTB4
定时器4开决定定时器4的开与关200关0=停止;
1=启动定时器4
定时器3自决定定时器3的自动加载开关190动加载开关0=一次;
定时器3输决定定时器3的输出逆变器开关出逆变器开1800=逆变器关;
1=逆变器开,改变TOUT3关
定时器3手决定定时器3的手动更新170动更新位0=无操作;
1=更新TCNTB3&
TCMPB3
定时器3开决定定时器3的开与关160关0=停止;
1=启动定时器3
定时器2自决定定时器2的自动加载开关150动加载开关0=一次;
定时器2输决定定时器2的输出逆变器开关出逆变器开1400=逆变器关;
1=逆变器开,改变TOUT2关
定时器2手决定定时器2的手动更新130动更新位0=无操作;
1=更新TCNTB2&
TCMPB2
定时器2开决定定时器2的开与关120关0=停止;
1=启动定时器2
定时器1自决定定时器1的自动加载开关110动加载开关0=一次;
定时器1输决定定时器1的输出逆变器开关出逆变器开1000=逆变器关;
1=逆变器开,改变TOUT1关
定时器1手决定定时器1的手动更新90动更新位0=无操作;
1=更新TCNTB1&
TCMPB1
定时器1开决定定时器1的开与关80关0=停止;
1=启动定时器1
保留7:
5
决定死区操作死区使能400=不使能;
1=使能
定时器0自决定定时器0的自动加载开关30动加载开关0=一次;
定时器0输决定定时器0的输出逆变器开关出逆变器开200=逆变器关;
1=逆变器开,改变TOUT0关
定时器0手决定定时器0的手动更新10动更新位0=无操作;
1=更新TCNTB0&
TCMPB0
定时器0开决定定时器0的开与关00关0=停止;
手动更新位需要在下一次写时清除
定时器0计数缓冲寄存器&
比较缓冲寄存器(TCNTB0/TCMPB0)寄存器名称地址R/W描述初始值TCNTB00X5100000CR/W定时器0的计数缓冲寄存器0x0TCMPB00X51000010R/W定时器0的比较缓冲寄存器0x0
TCMPB0位描述初始值定时器0比
较缓冲寄存15:
0设置定时器0的比较缓冲寄存器值0x0
器
TCNTB0位描述初始值定时器0的
计数缓冲寄15:
0设置定时器0的计数缓冲寄存器值0x0
存器
定时器0计数观测寄存器(TCNTO0)
寄存器名称地址R/W描述初始值TCNTO00X51000014R定时器0的计数值观测寄存器0X0
TCNTO0位描述初始值定时器0观15:
0设置定时器0计数观测值0x0测寄存器
定时器1计数缓冲寄存器&
比较缓冲寄存器(TCNTB1/TCMPB1)寄存器名称地址R/W描述初始值TCNTB10X51000018R/W定时器1的计数缓冲寄存器0x0TCMPB10X5100001CR/W定时器1的比较缓冲寄存器0x0
TCMPB1位描述初始值定时器1比
0设置定时器1的比较缓冲寄存器值0x0
TCNTB1位描述初始值定时器1的
0设置定时器1的计数缓冲寄存器值0x0
定时器1计数观测寄存器(TCNTO1)
寄存器名称地址R/W描述初始值TCNTO10X51000020R定时器1的计数值观测寄存器0X0
TCNTO1位描述初始值定时器1观15:
0设置定时器1计数观测值0x0测寄存器
定时器2计数缓冲寄存器&
比较缓冲寄存器(TCNTB2/TCMPB2)寄存器名称地址R/W描述初始值TCNTB20X51000024R/W定时器2的计数缓冲寄存器0x0TCMPB20X51000028R/W定时器2的比较缓冲寄存器0x0
TCMPB2位描述初始值定时器2比
0设置定时器2的比较缓冲寄存器值0x0
TCNTB2位描述初始值定时器2的
0设置定时器2的计数缓冲寄存器值0x0
定时器2计数观测寄存器(TCNTO2)
寄存器名称地址R/W描述初始值TCNTO20X5100002CR定时器2的计数值观测寄存器0X0
TCNTO2位描述初始值定时器2观15:
0设置定时器2计数观测值0x0测寄存器
定时器3计数缓冲寄存器&
比较缓冲寄存器(TCNTB3/TCMPB3)寄存器名称地址R/W描述初始值TCNTB30X51000030R/W定时器3的计数缓冲寄存器0x0TCMPB30X51000034R/W定时器3的比较缓冲寄存器0x0
TCMPB3位描述初始值定时器3比
0设置定时器3的比较缓冲寄存器值0x0
TCNTB3位描述初始值定时器3的
0设置定时器3的计数缓冲寄存器值0x0
定时器3计数观测寄存器(TCNTO3)
寄存器名称地址R/W描述初始值TCNTO30X51000038R定时器3的计数值观测寄存器0X0
TCNTO3位描述初始值定时器3观15:
0设置定时器3计数观测值0x0测寄存器
定时器4计数缓冲寄存器(TCNTB4)
寄存器名称地址R/W描述初始值TCNTB40X5100003CR/W定时器4的计数缓冲寄存器0x0
TCNTB4位描述初始值定时器4的
0设置定时器4的计数缓冲寄存器值0x0
定时器4计数观测寄存器(TCNTO4)
寄存器名称地址R/W描述初始值TCNTO40X51000040R定时器4的计数值观测寄存器0X0
TCNTO4位描述初始值
定时器4观15:
0设置定时器4计数观测值0x0测寄存器