1. 滴答定時器
杰發科技7801內部有一個滴答定時器,該定時器是M0+核自帶的,因此可以直接用該定時器來獲取時間戳。
同樣,7803也可以使用該方式獲取時間戳。
2. 滴答定時器原理
SysTick是一個24位的遞減計數器,它從預設的重裝載值開始,每經過一個系統時鐘周期,計數值就減1。當計數器的值遞減到0時,如果SysTick中斷使能,處理器將產生一個SysTick異常(異常號通常為15),并跳轉到SysTick中斷服務例程(ISR)執行相應的中斷處理代碼。此時,計數器會自動從重裝載寄存器中重新加載初值,開始新一輪的遞減計數。
3. 定時器配置
#include "ac780x.h"
#include "timer_sample.h"
#include <stdint.h>#include "core_cm0plus.h"void systick_init(void) {// 配置 SysTick 重裝載值為最大值SysTick->LOAD = 0xFFFFFF; // 24-bit 最大值// 配置寄存器SysTick->CTRL = 0x00010007;
}uint32_t tick_count[100];
unsigned char cou = 0;int main(void) {// 初始化 SysTicksystick_init();TIMER_Clock(); //1ms定時器初始化InitDelay();while (1) {if(g_timer0Count){g_timer0Count = 0;tick_count[cou] = SysTick->VAL;cou++;}}return 0;
}
4. 寄存器狀態
5. 注意
?注意7801自帶的Initdelay()也是使用systick
實測初始化delay不影響滴答計數
6. 結果
圖中的數值兩兩相減列出結果,48M主頻 1ms計數值正確