Linux驅動編寫 定時中斷

2021-09-09 06:38:39 字數 1640 閱讀 6244

(1)定義乙個新的定時器結構體(結構體變數) -->struct time_list time;

(2)對新的定時器初始化(結構體賦值)        -->setup_timer(timer, fn, data)

(3)編寫定時中斷服務函式

(4)啟動定時器       -->add_timer(struct timer_list * timer) 

--> int  mod_timer(struct timer_list *timer, unsigned long expires);這個比add_timer更加方便,相當於在此時間點上往後推遲

expires的時間就好了。

1.定時器結構體:struct timer_list

struct timer_list ;

2.初始化定時器:setup_timer();

void  setup_timer(struct timer_list * timer,  void (*function)(unsigned long),  unsigned long data);

函式功能:初始化定時器--》對定時器結構體成員進行賦值,除了時間戳以外

形參列表:

timer:定時器結構體變數

*function:初始化的定時中斷函式

data:傳遞到定時中斷函式的傳參

返回值:無

3.啟動定時器:add_timer();  --> mod_timer();

void  add_timer(struct timer_list *timer);

函式功能:啟動定時器 --> (定時器不在定時器管理匯流排上)

形參列表:

timer:要啟動的定時器 --> 往定時器管理匯流排新增乙個定時器

返回值:無

int  mod_timer(struct timer_list *timer, unsigned long expires);

函式功能:修改乙個定時器的定時時間(時間戳),啟動定時器

這個也是啟動定時器函式,不過add_timer在此函式上封裝了,但是使用起來還是mod_timer更加方便快捷

其實等價於:del_timer(timer);  timer->expires = expires;  add_timer(timer);

形參列表:

timer:要操作的定時器

expires:時間戳 --> 要給定時器設定的新的定時時間

返回值:

成功:失敗:錯誤碼

注意:乙個定時器只能有乙個定時時間,修改時間戳,新的時間戳覆蓋舊的時間戳!

expires引數的用法:

timer->expires = jiffies  + hz /200  //5ms後定時中斷  --   其中jiffies代表的是當前的時間戳,而hz則是linux下的乙個時鐘頻率,也就是hz等價於1000,1s來1000次時鐘中斷

4.刪除定時器:del_timer(struct timer_list *timer);

linux驅動學習 linux中斷程式編寫流程

linux中斷 1 確定中斷號 2 申請中斷號 request irq 不用一定要釋放free irq 3 編寫中斷服務函式 request irq unsigned int irq,irq handler t handler,unsigned long flags,const char name,...

STM32 TIM定時 中斷

今天講解stm32f103定時器定時 中斷功能,在昨天定時器延時的軟體工程上新增tim3定時的功能,自己也可以試著將昨天的工程新增修改得到。訪問密碼 acd8 工程現象 間隔 定時器定時 500ms led變化一次,並且串列埠列印 stm32f103ze有8個定時器 tim1 tim8 改工程以ti...

stm8s定時中斷

stm8s定時器有高階定時器tim1,通用定時器tim2,tim3,tim5,以及基本定時器tim4,tim6。定時中斷配置基本一樣。需要注意的也就是分頻不同,定時器位數不同。16位定時器配置後面再說,這裡以基本定時器tim4為例,產生2ms中斷,配置如下 tim4 ier uie 1 使能tim4...