当前位置: 首页 > news >正文

杰发科技AC7801——滴答定时器获取时间戳

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) {
    // 初始化 SysTick
    systick_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计数值正确

相关文章:

  • Spring 为何需要三级缓存解决循环依赖,而不是二级缓存
  • Azure Speech
  • 上海市计算机学会竞赛平台2024年5月月赛丙组城市距离之和
  • 领域驱动设计:事件溯源架构简介
  • 【大语言模型笔记进阶一步】提示语设计学习笔记,跳出框架思维,自己构建提示词
  • Linux系统下Mplayer的高效人机操作界面设计
  • 搭建elasticsearch集群,8.17.0版本
  • 日期时间 API
  • Rust 是什么
  • ds-主流向量引擎及显存需求
  • 深入解析SQL Server高级SQL技巧
  • MySQL数据库基本概念
  • 编程题 - 汽水瓶【JavaScript/Node.js解法】
  • 深入了解你的大脑
  • ospf协议
  • xss-labs搭建及学习
  • 第J3-1周:DenseNet算法 实现乳腺癌识别
  • Spring总结(上)
  • 算法之算法思想
  • 线程(Thread)
  • 专做定制型网站/怎样建立自己的网站平台
  • 某网站开发项目成本估计/推广网络广告
  • 做正版电子书下载网站/seo一个月工资一般多少
  • 手机网页微信/网站优化设计的基础是网站基本要素及每个细节的优化
  • 企业网站设计注意事项/适合企业员工培训的课程
  • wordpress怎么代码高亮/小红书关键词排名优化