微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > ARM技术讨论 > 求问各位大神 现在要在ARM Linux下实现28.8khz的方波

求问各位大神 现在要在ARM Linux下实现28.8khz的方波

时间:10-02 整理:3721RD 点击:
RT  之前在裸机上使用的是定时器中断的方式  现在要在linux上实现   但是查资料后发现好多人说linux上无法产生1ms或更低的定时器中断  我之前尝试mod_TIMER  的确最低只能精确到10ms  求各位大神帮忙啊   真的无法实现吗   驱动里可不可以像裸机那样设置寄存器啊  或者有没有其他的方法?

今天没啥时间了,明天再搞   网上看到说用void ndelay(unsigned long nsecs);这个延时函数   能精确到ns    真的准吗- -?   求大佬解答

学习学习,谢谢分享!

在别的地方找到方法了   之前在别的帖子看有人还说linux嵌入式上无法实现1Khz以上的准确波形输出。
关键代码贴下吧   和裸机操作寄存器有些像
static irqreturn_t timer_interrupt(void)
{       
//此处略去若干行
return IRQ_HANDLED;
}
unsigned long Ftclk,Fpclk=50000000; //s3c2440a+--?+Fpclk+?0MHz
    unsigned int tcfg0,tcfg1,tcon;
s3c2410_gpio_cfgpin(S3C2410_GPB(1), S3C2410_GPIO_OUTPUT);
    s3c2410_gpio_setpin(S3C2410_GPB(1), 0);
    tcfg0 = inl(S3C2410_TCFG0);
    tcfg1 = inl(S3C2410_TCFG1);
    tcon = inl(S3C2410_TCON);

outl((tcfg0 &= ~0xff) ,S3C2410_TCFG0);
    outl((tcfg1 &= ~0xf) ,S3C2410_TCFG1);
    Ftclk=Fpclk/2;  //?++datasheet+?+
outl(434,S3C2410_TCNTB(0));
outl(0,S3C2410_TCMPB(0));
outl(tcon | S3C2410_TCON_T0MANUALUPD,S3C2410_TCON);
tcon = inl(S3C2410_TCON) & ~S3C2410_TCON_T0MANUALUPD;
outl(tcon | (S3C2410_TCON_T0START|S3C2410_TCON_T0RELOAD),S3C2410_TCON);
ret=request_irq(timer_irq,&timer_interrupt, IRQF_DISABLED, DEVICE_NAME,NULL);
    if(ret<0){
        printk("Register IRQ_TIMER0 failed!\n");   
       
        return ret;
    }

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top