mx27的pwmo模块作lcd背光驱动调试

来源:互联网 发布:淘宝仓库员工作流程 编辑:程序博客网 时间:2024/05/01 15:02

打算使用pwmo模块进行pwm作为lcd的背光驱动。看了一下:

pwmo的相关设置寄存器有

PWMCR     0x10006000(control)

PWMSR     0x10006004(status)

PWMIR     0x10006008(interrupt)

PWMSAR    0x1000600C(sample)

PWMPR     0x10006010(period)

PWMCNR    0x10006014(counter)

 

看了一下,pwmo有以下特性,当fifo里的数据用完后,他会以最后一个数据为设置,持续产生pwm波,这就免得我总是写数据,进行一个pwm设定后就不再管了。并且设置好后,若最后一个数据为0,则pwmo持续输出低电平,这样在我想关背光时,只用写入0就可以了,无需进行其它操作,看来他还很适合作背光使用。

 

这里进行如下初始化:

0x10006000   =0x00030000   //init

        0x10006010   =0x0000000D   //设置period

        0x1000600C   =0x00000008   //设置sample

        0x10006000   =0x00030001   //开始en

 

另外:

关闭背光:0x1000600C   =0x00000000   //sample

调暗:  0x1000600C   =value //sample(value0~14之间,0时关闭背光,value越大,越亮)

写了一个小驱动测了一下,完全达到了要求,代码如下:

 

#include <linux/init.h>

#include <linux/module.h>

#include <linux/sched.h>

#include <linux/interrupt.h>

#include <linux/sysdev.h>

#include <linux/ptrace.h>

#include <asm/hardware.h>

#include <asm/irq.h>

#include <asm/arch/irqs.h>

#include <asm/mach/irq.h>

#include <asm/io.h>

#include <asm/arch/gpio.h>

#include <asm-arm/arch/mx27_pins.h>

 

 

MODULE_LICENSE("Dual BSD/GPL"); //必须同意一个LICENSE

#define PTB_OCR1 0x10015104

 

 

 

static int led_init(void)

{

 

  printk(KERN_INFO " LED was initted/n");

  init_led();

  set_led_on();

  return 0;

}

//-------------------------------------------------------------------------

static void led_exit(void)

{

  printk(KERN_INFO " LED was exit/n ");

  set_led_off();

}

//-------------------------------------------------------------------------

init_led()

{

//printk(KERN_INFO " PTB_DR is %x/n ",__raw_readl(AIPI_IO_ADDRESS(0x1001511C)));

 

__raw_writel(__raw_readl(AIPI_IO_ADDRESS(0x10015400))|0x00000020,AIPI_IO_ADDRESS(0x10015400));//direction

__raw_writel(__raw_readl(AIPI_IO_ADDRESS(0x10015420))&0xffffffdf,AIPI_IO_ADDRESS(0x10015420));//gpio1 OR multiplex0

__raw_writel(__raw_readl(AIPI_IO_ADDRESS(0x10015438))&0xffffffdf,AIPI_IO_ADDRESS(0x10015438));//0,primary;1,alternate

 

__raw_writel(0x00030000,AIPI_IO_ADDRESS(0x10006000));//init

__raw_writel(0x0000000D,AIPI_IO_ADDRESS(0x10006010));//period

__raw_writel(0x00000008,AIPI_IO_ADDRESS(0x1000600C));//sample

__raw_writel(0x00030001,AIPI_IO_ADDRESS(0x10006000));//en

printk(KERN_INFO " pwm init OK!!!  ");

 

 }

//-------------------------------------------------------------------------

set_led_on()

{

  __raw_writel(0x00030001,AIPI_IO_ADDRESS(0x10006000));//en

}

//-------------------------------------------------------------------------

set_led_off()

{

 __raw_writel(0x00000000,AIPI_IO_ADDRESS(0x1000600C));//sample,pwmo=0;

}

//-------------------------------------------------------------------------

module_init(led_init);

module_exit(led_exit);

MODULE_AUTHOR("coolfei");

MODULE_DESCRIPTION("linu driver test");

MODULE_ALIAS("linu driver  module test");

 

安装模块则有波形出来,卸载模块则输出低电平,完全可以。

原创粉丝点击