您的位置:首页 > 其它

中断与时钟机制

2016-07-13 17:21 344 查看
一.中断 IRQ
中断安装与释放
1.申请中断线
int request_irq(unsigned int irq,irq_handler_t handler,unsigned long irqflags,const char *devname,void *dev_id) 中断号 中断处理函数 中断触发方式 设备名称 共用中断信号线时使用到(一般设备为NULL)
一般在init函数中设置

2.释放中断线
void free_irq(unsigned int irq,void *dev_id); 中断号 NULL
一般在exit函数中设置

3.端口映射函数
void *ioremap(unsigned long phys_addr,unsigned long size);

phys_addr实际物理地址
size地址长度,arm为4字节
返回映射后的虚拟地址

二.时钟机制 RTC
linux中全局变量HZ,不同平台取值不同,一般取值HZ 1000,意思是每秒发生中断1000次,每次中断内部计数器jiffies加1,也就是说这个变量记录了系统自引导以来经历的时间值。

1.内核级别短延时函数
static inline void ndelay(unsigned long x) 纳秒级延时
static inline void udelay(unsigned long x) 微秒级延时
static inline void mdelay(unsigned long x) 毫秒级延时

<
4000
div style="white-space:pre-wrap;line-height:1.5;font-size:14px;">2.睡眠方式延时
void msleep(unsigned int msec) 毫秒
unsigned long msleep_interruptible(unsigned int msec)
static inline void ssleep(unsigned int seconds) 秒

3.长延时
unsigned long timeout = jiffies + 3*HZ;
while(time_before(jiffies,timeout));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: