求问各位大神 现在要在ARM Linux下实现28.8khz的方波
今天没啥时间了,明天再搞 网上看到说用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;
}