ARM11实现PWM驱动

芯片手册内容如下:

32.1 OVERVIEW

The 6410 RISC microprocessor comprises offive 32-bit timers. These timers are used to generate internal interrupts tothe ARM subsystem. In addition, Timers 0 and 1 include a PWM function (PulseWidth Modulation), which can drive an external I/O signal. The PWM for timer 0and 1 have an optional dead-zone generator capability, which can be utilized tosupport a large current device. Timer 2, 3 and 4 are internal timers with no outputpins.

6410精简指令集微处理器有532位的定时器,用于产生ARM子系统的外部中断。定时器0和定时器1具有PWM(脉冲宽度调制)功能,其可以驱动外部I/O信号。定时器0和定时器1

32.2 FEATURES

The Features supported by the PWM are asfollows:

•  Five 32-bit Timers.

•  Two 8-bit Clock Prescalersproviding first level of division for the PCLK, Five Clock Dividers and Multiplexers

providing second level of division for thePrescaler clock and External Clocks.

•  Programmable Clock SelectLogic for individual PWM Channels.

•  Two Independent PWM Channelswith Programmable Duty Control and Polarity.

•  Supports Auto-Reload Modeand One-Shot Pulse Mode.

•  Supports for external inputsto start PWM.

•  Dead Zone Generator on twoPWM Outputs.

•  Supports DMA Transfers.

•  Optional Pulse or LevelInterrupt Generation.

The PWM has two operation modes:

•  Auto-Reload Mode

Continuous PWM pulses are generated basedon programmed duty cycle and polarity.

•  One-Shot Pulse Mode

Only one PWM pulse is generated based onprogrammed duty cycle and polarity.

32.2 FEATURES

The Features supported by the PWM are asfollows:

•  5个32位定时器

•  Two 8-bit Clock Prescalersproviding first level of division for the PCLK, Five Clock Dividers andMultiplexers

providing second level of division for thePrescaler clock and External Clocks.

•  Programmable Clock SelectLogic for individual PWM Channels.

•  Two Independent PWM Channelswith Programmable Duty Control and Polarity.

•  支持自动装载模式,一次触发模式.

•  支持外部输入启动PWM.

•  Dead Zone Generator on twoPWM Outputs.

•  支持DMA 传输.

•  Optional Pulse or LevelInterrupt Generation.

The PWM has two operation modes:

•  Auto-Reload Mode

Continuous PWM pulses are generated basedon programmed duty cycle and polarity.

•  One-Shot Pulse Mode

Only one PWM pulse is generated based onprogrammed duty cycle and polarity.

 

1.相关寄存器

(1)TCFG0:时钟预定标器和死区结构。

(2)TCFG1:时钟多路复用器和 DMA 模式的选择。

(3)TCON:定时器控制寄存器。

(4)TCNTB0:定时器 0 计数缓冲寄存器。

(5)TCMPB0:定时器 0 比较缓冲寄存器。

(6)TCNTO0:定时器 0 计数观察寄存器。

(7)TCNTB1:定时器 1 计数缓冲寄存器。

(8)TCMPB1:定时器 1 比较缓冲寄存器。

(9)TCNTO1:定时器 1 计数观察寄存器。

(10)TCNTB2:定时器 2 计数缓冲寄存器。

(11)TCMPB2:定时器 2 比较缓冲寄存器。

(12)TCNTO2:定时器 2 计数观察寄存器。

(13)TCNTB3:定时器 3 计数缓冲寄存器。

(14)TCMPB3::定时器 3 比较缓冲寄存器。

(15)TCNTO3:定时器 3 计数观察寄存器。

(16)TCNTB4:定时器 4 计数缓冲寄存器。

(17)TCNTO4:定时器 4 计数观察寄存器。

(18)TINT_CSTAT:定时器中断控制和状态寄存器。

                       

 2.PWM0 要用到的寄存器

(1)TCFG0 设置时钟频率,主要设置预定标器0 范围为:0-255

(2)TCFG1 DMA模式设置和设置分频  (1/1 1/2 1/41/8 1/16 TCLK)

                                                           时钟输入频率 = PCLK/ (预定标器0+1)/分频值

(3)TCON 主要设置定时器的属性

        0 定时器的启动和停止

        1 是否开启手动更新

        2 定时器的反转开关

        3 自动加载开关

        4 确定死区的操作

(4)TCNTB0:定时器 0 计数缓冲寄存器,用来

         TCMPB0:定时器 0 比较缓冲寄存器。

         这两个寄存器用来设定频率和占空比。

         TCNTB0 = 时钟输入频率/freq;

         TCMPB0 = TCNTB0 * 2  / 3;

3. PWM设置流程

(1)PWM是通过引脚TOUT0~TOUT3输出的,而这4个引脚是与GPB0~GPB3复用的,因此要实现PWM功能首先要把相应的引脚配置成TOUT输出。

(2)再设置定时器的输出时钟频率,它是以PCLK为基准,再除以用寄存器TCFG0配置的prescaler参数,和用寄存器TCFG1配置的divider参数。

(3)然后设置脉冲的具体宽度,它的基本原理是通过寄存器TCNTBn来对寄存器TCNTn(内部寄存器)进行配置计数,TCNTn是递减的,如果减到零,则它又会重新装载TCNTBn里的数,重新开始计数,而寄存器TCMPBn作为比较寄存器与计数值进行比较,当TCNTn等于TCMPBn时,TOUTn输出的电平会翻转,而当TCNTn减为零时,电平会又翻转过来,就这样周而复始。因此这一步的关键是设置寄存器TCNTBn和TCMPBn,前者可以确定一个计数周期的时间长度,而后者可以确定方波的占空比。由于s3c2440的定时器具有双缓存,因此可以在定时器运行的状态下,改变这两个寄存器的值,它会在下个周期开始有效。

(4)最后就是对PWM的控制,它是通过寄存器TCON来实现的,一般来说每个定时器主要有4个位要配置(定时器0多一个死区位):启动/终止位,用于启动和终止定时器;手动更新位,用于手动更新TCNTBn和TCMPBn,这里要注意的是在开始定时时,一定要把这位清零,否则是不能开启定时器的;输出反转位,用于改变输出的电平方向,使原先是高电平输出的变为低电平,而低电平的变为高电平;自动重载位,用于TCNTn减为零后重载TCNTBn里的值,当不想计数了,可以使自动重载无效,这样在TCNTn减为零后,不会有新的数加载给它,那么TOUTn输出会始终保持一个电平(输出反转位为0时,是高电平输出;输出反转位为1时,是低电平输出),这样就没有PWM功能了,因此这一位可以用于停止PWM

 两点需要注意:

1、当 TCNTn 和 TCMPn 有相同值时,TOUTn 的逻辑电平由低变为高。(可通过逆变器改变电平的输出结果)。

2、当 TCNTn 达到“0”时,TCNTn 和 TCNTBn 自动重装。在同一时间产生中断请求(前提是相关的定时器控制寄存器设置中断使能了)。在写linux驱动时,通过request_irq函数来申请中断号,并将中断处理程序已参数的形式传入,一旦系统接收到中断,那么系统就调用这个中断处理函数

 iopwm_timerinit(20);

    ret=request_irq(iopwm_irq,iopwm_interrupt,IRQ_TYPE_LEVEL_HIGH, DEVICE_NAME,NULL);

    if(ret<0)

    {

       printk("Register IOPWMfailed!/n");

       return ret;

    }

    printk(KERN_EMERG"Register iopwmsuccess!/n");

    return ret;

ARM11 PWM驱动代码链接:   https://download.csdn.net/download/hzqgangtiexia/10265309




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值