S3C2410有5个16bit守时器。守时器0-3有脉宽调制功用(Pulse Width Modulation,PWM),守时器4是内部守时器,没有输出引脚。守时器0有Dead-zone发生器,能够确保一对反向信号不会一起改动状况,常用于大电流设备中。
守时器0-1共用一个8bit prescaler,守时器2-4共用其他一个。每个守时器有一个时钟分频器,能够挑选5种分频办法。每个守时器从各自的时钟分频器获取时钟信号。prescaler是可编程的,并根据TCFG0-1寄存器数值对PCLK进行分频。
当守时器被使能之后,守时器计数缓冲寄存器(TCNTBn)中初始的数值就被加载到递减计数器中。守时器比较缓冲寄存器(TCMPBn)中的初始数值被加载到比较寄存器中,以备与递减计数器数值进行比较。这种双缓冲特色能够让守时器在频率和占空比变化时输出的信号愈加安稳。
每个守时器都有一个各自时钟驱动的16bit递减计数器,当计数器数值为0时,发生一个守时中止,一起TCNTBn中的数值被再次载入递减计数器中再次开端计数。只要封闭守时器才不会重载。TCMPBn的数值用于PWM,当递减计数器的数值和比较寄存器数值相一起,守时器改动输出电平,因而,比较寄存器决议了PWM输出的敞开和封闭。
S3C2410的PWM守时器选用双buffer机制,能够不中止当时守时器的情况下设置下一轮守时操作。守时器值能够写到TCNTBn,而当时守时的计数值能够从TCNTOn取得,即,从TCNTBn取得的不是当时数值而是下一次计数的初始值。
主动加载功用被翻开后,当TCNTn数值递减到0时,芯片主动将TCNTBn的数值拷贝到TCNTn,然后开端下一次循环,若TCNTBn数值为0,则不会有递减操作,守时器中止。
第一次发动守时器的进程如下:(1)初始化TCNTBn和TCMPBn的数值;(2)设置守时器的人工加载位,不论是否运用极性转化功用,都将极性转化位翻开;(3)设置守时器的发动位来发动守时器,一起铲除人工加载位。
若守时器在计数进程中被中止,则TCNTn坚持计数值,若需求设置新的数值需求人工加载。守时器的作业进程能够用附图表明。
1,使能主动加载功用,设置TCNTBn=160,TCMPBn=110,设置人工加载位并装备极性转化位,人工加载位将时TCNTBn、TCMPBn的数值加载到TCNTn、TCMPn。然后,设置TCNTBn、TCMPBn为80和40,作为下一次守时的参数。
2,设置发动位,若人工加载位为0,极性转化封闭,主动加载敞开,则守时器开端递减计数(计数前有一个设守时刻,能够理解为与setup time类似)。
3,当TCNTn的数值和TCMPn共一起,TOUTn从低变为高。
4,当TCNTn计数至0,守时器发生中止恳求,一起TCNTBn、TCMPBn的数值被主动加载到TCNTn、TCMPn,前者为80,后者为40。
5,中止服务向量(ISR)将TCNTBn、TCMPBn设置为80和60。
6,与3类似。
7,与4类似,TCNTn、TCMPn,前者为80,后者为60。
8,ISR服务程序中,将主动加载和中止恳求封闭。
9,与6、3类似。
10,TCNTn为0,TCNTn不会主动加载新的数值,守时器被封闭。
11,没有新的中止发生。
一起,由上面的作业差错能够看出,经过ISR或其他办法写入不同的TCMPBn的数值,就能够调理输出信号的占空比,完成脉宽调制(PWM)。
Dead Zone首要用在操控外设的使能,其功用首要是在封闭一个设备和敞开另一个设备之间,刺进一个时刻空隙,以避免两个设备一起改动状况。(有利于减小体系搅扰?)
守时器能够经过TCFG1寄存器的DMA形式位装备为DMA恳求源信号(nDMA_REQ)发生器,当守时器被这样装备后,它将nDMA_REQ信号一向置低,直到接收到ACK信号。当守时器收到ACK信号,它将nDMA_REQ信号置高(无效)。当守时器被设置为DMA恳求形式时,不会发生中止恳求。只能有一个守时器被装备为DMA恳求源。