硬定時器0

2021-10-12 03:39:57 字數 1954 閱讀 9917

定時器**說明 參考

1---設定模式 通過 暫存器mode 設定 0為timer模式【定時】 1為counter模式【計數】

**nrf_timer3->mode = timer_mode_mode_timer << timer_mode_mode_pos;

nrf_timer4->mode = timer_mode_mode_timer << timer_mode_mode_pos;

0 << 0

2---頻率

ftimer = 16 mhz / (2^prescaler)

如果需要timer的時鐘為 4m,那麼4 = ftimer = 16m/2^2

**nrf_timer3->prescaler = 0x05 << timer_prescaler_prescaler_pos;  ///< 0.5 mhz

5 << 0

那就是16/2的5次方 =1/2  所以就是0.5m

nrf_timer4->prescaler = 0x02 << timer_prescaler_prescaler_pos;  ///< 4 mhz

2 << 0

那就是16/2的2次方 =4  所以就是4m

那麼是怎麼配置成16m的呢?

解答1  我們原理圖右上角 是外接的32m晶振

解答2

注意檔案 system_nrf52840

void systeminit(void)

nrf_clock->events_hfclkstarted = 0;//hfclk晶振執行狀態標誌位   0關閉,1執行

nrf_clock->tasks_hfclkstart = 1;//高外晶振hfclk   0關閉,1啟動

while(!nrf_clock->events_hfclkstarted);//等待hfclk晶振執行狀態標誌位 為1

3---

設定cc[n]暫存器的值,定時就是通過這個值來設定的。 

案例:1m的時鐘源則乙個tick為1us,所以要定時1s,則cc[0]的值我們填入 1000000就行了。

(這裡也可以選擇cc[1],cc[2],或cc[3],只要下面對應的compare事件產生中斷設定成對應的就可以了)

4通過暫存器intenset 第16bit位設定compare[0]事件產生時觸發中斷。

5通過nvic的功能函式nvic_enableirq 來使能mcu的timer0中斷

6最後通過timer/counter模組的 start 啟動timer。

我的測試時ok的

void timer3_irqhandler(void)

}void time_test_1s(void)

問題1 我們外接的32m怎麼體現?

問題2 那個system_nrf52840裡面的64怎麼體現

看上去全部是16m計算的!!!!

當修改多個比較值時候

修改如下

nrf_timer3->cc[0] = 5000000;

nrf_timer3->cc[1] = 1000000;

nrf_timer3->cc[2] = 2000000;

nrf_timer3->cc[3] = 3000000;

nrf_timer3->cc[4] = 4000000;

//nrf_timer3->intenset = 1<<16;//設定compare[0]事件產生時觸發中斷

nrf_timer3->intenset = 1<<17|1<<18|1<<19|1<<20;//設定compare[1-2-3-4]事件

//timer_intenset_compare1_msk | timer_intenset_compare2_msk | timer_intenset_compare3_msk | timer_intenset_compare4_msk;

是裡面最大的 後面一次增大

沒1s中斷一次

定時器 timer0和timer0

中斷法相對於查詢法有兩個優點 1.節省能量 2.節省時間 定時器的使用方法 1.開啟總中斷 2.設定定時器的工作方式 3.設定初值 4.開啟定時中斷 5.開啟定時計數 對於定時器0的初始化 void timer0 void 同理可得定時器1 的初始化 void timer0 void 在設定工作方式...

測試定時器0的程式

這是寫的乙個簡單的測試定時器0的程式 要實現的目標是,led第乙個跟第二個燈先迴圈亮起,第三盞燈則以間隔一秒鐘的時間亮起一次,其中,第三盞燈的亮起時間以定時器0的中斷來執行,裡邊有亮點需要注意。一 不要忘記中斷程式中進if語句中的後的tt清零 二 不要忘了把定時器裡邊的語句回歸哦,否則老是認為中斷服...

Mysql 檢視定時器 開啟定時器 設定定時器時間

1.檢視是否開啟evevt與開啟evevt。1.1 mysql evevt功能預設是關閉的,可以使用下面的語句來看evevt的狀態,如果是off或者0,表示是關閉的。show variables like sche 1.2 開啟evevt功能 setglobal event scheduler 1 ...