|
阿瑟大哥你好,我今天用TOUT0也是一样,ARM会重开机,我的修改部分程序代码如下,是不是不能在驱动文件里面写控制程序阿,不然我写脉冲的程序代码有错误吗?有写到让arm重新启动的妈?小弟愚笨望请阿瑟帮忙~不管用定时器用dealy还是用他内核里的udelay都会重开机!!!
static int tq2440_gpio_ioctl(
struct inode *inode,
struct file *file,
unsigned int cmd,
unsigned long arg)
{
unsigned long tcfg1;
unsigned long tcfg0;
unsigned int i;
unsigned long tcon;
switch(cmd)
{
case pwm_delay:
{
s3c2410_gpio_cfgpin(S3C2410_GPB0, S3C2410_GPB0_TOUT0);
tcon = __raw_readl(S3C2410_TCON);
tcfg1 = __raw_readl(S3C2410_TCFG1);
tcfg0 = __raw_readl(S3C2410_TCFG0);
tcfg0 &= ~S3C2410_TCFG_PRESCALER0_MASK;
tcfg0 |= (0x00);
tcfg1 &= ~S3C2410_TCFG1_MUX0_MASK;
tcfg1 |= S3C2410_TCFG1_MUX0_DIV16;
__raw_writel(tcfg1, S3C2410_TCFG1);
__raw_writel(tcfg0, S3C2410_TCFG0);
for(i=0;i<10000;i++)
{
s3c2410_gpio_setpin(S3C2410_GPB5, 0);
s3c2410_pwm_delay();
s3c2410_gpio_setpin(S3C2410_GPB5, 1);
s3c2410_pwm_delay();
}
return 0;}
default:
return -EINVAL;
}}
void s3c2410_pwm_delay()
{
unsigned long tcnt;
unsigned long tcon;
unsigned int tcnto;
unsigned long tcntb;
unsigned long tcmpb;
tcntb = 3125;
tcmpb = tcntb>>1;
__raw_writel(tcntb, S3C2410_TCNTB(0));
__raw_writel(tcmpb, S3C2410_TCMPB(0));
tcon &= ~0x1f;
tcon |= 0xb;
__raw_writel(tcon, S3C2410_TCON);
tcon &= ~2;
__raw_writel(tcon, S3C2410_TCON);
tcnto=__raw_readl(S3C2410_TCNTO(0));
while(__raw_readl(S3C2410_TCNTO(0))>=1562);
while(__raw_readl(S3C2410_TCNTO(0))<1562);
}
他编译会出现这些警告,请问有无关联?并祝顺心
/apps1/LED/leds/ko/gpio.c:79: warning: function declaration isn't a prototype
/apps1/LED/leds/ko/gpio.c:189: warning: function declaration isn't a prototype
/apps1/LED/leds/ko/gpio.c: In function 's3c2410_pwm_delay':
/apps1/LED/leds/ko/gpio.c:193: warning: unused variable 'tcnt'
/apps1/LED/leds/ko/gpio.c:206: warning: 'tcon' is used uninitialized in this function |
|