主题 : pwm驱动编译出错? 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 2599
精华: 0
发帖: 9
金钱: 90 两
威望: 81 点
综合积分: 18 分
注册时间: 2008-11-26
最后登录: 2010-01-23
楼主  发表于: 2009-06-10 11:20

 pwm驱动编译出错?

pwm部分驱动程序:

    // TOUT0口设置
     s3c2410_gpio_cfgpin(S3C2410_GPB0,S3C2410_GPB0_TOUT0);
    
       // 设置定时器0,即PWM周期和占空比
    // Fclk=400MHz,时钟分频配置为1:4:8,即Pclk=50MHz。
    S3C2410_TCFG0=249;        //59行:预分频器0设置为98,取得200kHz
    S3C2410_TCFG1 = 1;            // 60行:TIMER0再取1/4分频,取得50kHz
    S3C2410_TCMPB0 = 19;       // 61行 :设置PWM占空比
    S3C2410_TCNTB0 = 38;    // 62行:定时值(PWM周期)
    if(S3C2410_TCON&0x04) S3C2410_TCON = (1<<1);        // 更新定时器数据 (取反输出inverter位)
      else  S3C2410_TCON = (1<<2)|(1<<1);            
    S3C2410_TCON = (1<<0)|(1<<3);                // 启动定时器

make modules时出错如下:
[root@localhost kernel-2.6.13]# make modules
  CHK     include/linux/version.h
make[1]: “arch/arm/kernel/asm-offsets.s”是最新的。
make[1]: “include/asm-arm/mach-types.h”是最新的。
  CC [M]  drivers/char/qq2440_pwm_stepper.o
drivers/char/qq2440_pwm_stepper.c: In function `qq2440_leds_ioctl':
drivers/char/qq2440_pwm_stepper.c:54: warning: implicit declaration of function `s3c2410_gpio_cfgpS3C2410_in'
drivers/char/qq2440_pwm_stepper.c:59: error: invalid lvalue in assignment
drivers/char/qq2440_pwm_stepper.c:60: error: invalid lvalue in assignment
drivers/char/qq2440_pwm_stepper.c:61: error: invalid lvalue in assignment
drivers/char/qq2440_pwm_stepper.c:62: error: invalid lvalue in assignment
drivers/char/qq2440_pwm_stepper.c:63: error: invalid operands to binary &
drivers/char/qq2440_pwm_stepper.c:63: error: invalid lvalue in assignment
drivers/char/qq2440_pwm_stepper.c:64: error: invalid lvalue in assignment
drivers/char/qq2440_pwm_stepper.c:65: error: invalid lvalue in assignment
drivers/char/qq2440_pwm_stepper.c:76: warning: ISO C90 forbids mixed declarations and code
drivers/char/qq2440_pwm_stepper.c: In function `qq2440_leds_init':
drivers/char/qq2440_pwm_stepper.c:81: warning: unused variable `i'
drivers/char/qq2440_pwm_stepper.c: In function `qq2440_leds_ioctl':
drivers/char/qq2440_pwm_stepper.c:104: warning: ISO C90 forbids mixed declarations and code
drivers/char/qq2440_pwm_stepper.c:104: error: parse error at end of input
make[2]: *** [drivers/char/qq2440_pwm_stepper.o] 错误 1
make[1]: *** [drivers/char] 错误 2
make: *** [drivers] 错误 2

其中的主要两个错误就是:invalid lvalue in assignment和invalid operands to binary &,试了3.4.1和2.95.3都不行,请问S3C2410_TCFG0这个寄存器不可以直接赋值吗?
请各位大虾指教!谢谢!!!
这个阶段正是我事业的上升期,我怎么能走得开呢?
级别: 精灵王
UID: 3197
精华: 3
发帖: 770
金钱: 6995 两
威望: 5398 点
综合积分: 1600 分
注册时间: 2008-12-30
最后登录: 2010-12-31
1楼  发表于: 2009-06-10 11:34
还是用最新内核吧Linux-2.6.29
下载地址:
http://www.arm9.net/download-linux-2.6.29.asp
级别: 新手上路
UID: 2599
精华: 0
发帖: 9
金钱: 90 两
威望: 81 点
综合积分: 18 分
注册时间: 2008-11-26
最后登录: 2010-01-23
2楼  发表于: 2009-06-11 16:25
这个跟内核关系吗?
我的问题是linux下怎样对pwm的寄存器操作?gpio有写好的函数如s3c2410_gpio_cfgpin()对io口控制,在kernel-2.6.13/arch/arm/mach-s3c2410/gpio.c文件中,那如何对pwm控制呢?好像没有pwm.c这个文件的?
如果没有写好的函数,那么要对pwm的寄存器操作S3C2410_TCFG0,S3C2410_TCFG1是不是可以直接赋值?(这些寄存器在kernel-2.6.13\include\asm-arm\arch-s3c2410\regs-timer.h里有定义:#define S3C2410_TCFG0          S3C2410_TIMERREG(0x00)
#define S3C2410_TCFG1          S3C2410_TIMERREG(0x04))还是linux下还现需要先进行ioremap()进行地址重映射?