0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于RK3568的内部定时器应用示例

武汉万象奥科 2023-11-09 17:03 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1. 内部定时器介绍

内核定时器是内核用来控制在未来某个时间点(基于jiffies)调度执行某个函数的一种机制,其实现位于kernel/linux/timer.hkernel/timer.c 文件中。

被调度的函数肯定是异步执行的,它类似于一种“软件中断”,而且是处于非进程的上下文中,所以调度函数必须遵守以下规则:

a. 没有 current 指针、不允许访问用户空间。因为没有进程上下文,相关代码和被中断的进程没有任何联系。

b. 不能执行休眠(或可能引起休眠的函数)和调度。

c. 任何被访问的数据结构都应该针对并发访问进行保护,以防止竞争条件。

内核定时器的调度函数运行过一次后就不会再被运行了(相当于自动注销),但可以通过在被调度的函数中重新调度自己来周期运行。

在SMP系统中,调度函数总是在注册它的同一CPU上运行,以尽可能获得缓存的局域性。

3568

2. 驱动示例代码

RK3568蜂鸣器定时鸣叫:

#include

#include

#include

#include

#include

#defineGPIO_PIN 15 // 替换为你的GPIO引脚

staticstruct timer_list timer;

intgpio_status = 1;

// 定时器中断处理函数

staticvoid timer_callback(struct timer_list *t) {

gpio_set_value(GPIO_PIN ,gpio_status);

gpio_status = ! gpio_status;

mod_timer(&timer, jiffies +msecs_to_jiffies(1000)); // 1秒后再次触发定时器

}

staticint __init mymodule_init(void) {

int ret;

// 请求GPIO

ret = gpio_request(GPIO_PIN,"my_gpio");

if (ret) {

printk("无法请求GPIO %d\n",GPIO_PIN);

return ret;

}

// 配置GPIO引脚为输出

gpio_direction_output(GPIO_PIN, 0);

// 初始化定时器

timer_setup(&timer, timer_callback, 0);

mod_timer(&timer, jiffies +msecs_to_jiffies(2000)); // 2秒后触发定时器

return 0;

}

staticvoid __exit mymodule_exit(void) {

// 删除定时器

del_timer_sync(&timer);

// 释放GPIO

gpio_free(GPIO_PIN);

}

module_init(mymodule_init);

module_exit(mymodule_exit);

MODULE_LICENSE("GPL");

MODULE_AUTHOR("zou");

MODULE_DESCRIPTION("SampleGPIO and Timer Interrupt Kernel Module");

3. 内部定时器验证

将驱动编译成模块并insmod(加载)模块后,等待2秒后蜂鸣器开始以1s时间间隔鸣叫。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 定时器
    +关注

    关注

    23

    文章

    3372

    浏览量

    124491
  • 嵌入式硬件
    +关注

    关注

    1

    文章

    1012

    浏览量

    9317
  • RK3568
    +关注

    关注

    5

    文章

    654

    浏览量

    8106
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RK3568 Android11编译环境搭建及报错解决指南

    在嵌入式开发领域,RK3568 芯片凭借其出色的性能被广泛应用。基于 RK3568 进行 Android11 系统的开发,首先要搭建好编译环境。本文将详细介绍在 Ubuntu20.04 系统上搭建 RK3568 Android1
    的头像 发表于 02-04 17:37 2092次阅读
    <b class='flag-5'>RK3568</b> Android11编译环境搭建及报错解决指南

    迅为RK3576对比RK3568:AI算力与接口的全面跃迁

    迅为RK3576对比RK3568:AI算力与接口的全面跃迁
    的头像 发表于 12-22 15:24 2422次阅读
    迅为<b class='flag-5'>RK</b>3576对比<b class='flag-5'>RK3568</b>:AI算力与接口的全面跃迁

    【迅为工业RK3568稳定可靠】itop-3568开发板Linux驱动开发实战:RK3568内核模块符号导出详解

    【迅为工业RK3568稳定可靠】itop-3568开发板Linux驱动开发实战:RK3568内核模块符号导出详解
    的头像 发表于 11-21 13:25 1617次阅读
    【迅为工业<b class='flag-5'>RK3568</b>稳定可靠】itop-<b class='flag-5'>3568</b>开发板Linux驱动开发实战:<b class='flag-5'>RK3568</b>内核模块符号导出详解

    【作品合集】合众HZ-RK3568开发板测评

    合众HZ-RK3568开发板测评作品合集 产品介绍: HZ-EVM-RK3568开发板采用核心板+底板组合形式设计,两者通过四个80PIN稳定可靠的板对板连接连接,扩展RK3568
    发表于 09-10 10:22

    迅为RK3568开发板模型推理测试实战LPRNet 车牌识别

    迅为RK3568开发板模型推理测试实战LPRNet 车牌识别
    的头像 发表于 08-25 14:55 1555次阅读
    迅为<b class='flag-5'>RK3568</b>开发板模型推理测试实战LPRNet 车牌识别

    【HZ-RK3568开发板免费体验】HZ-RK3568开发板操作系统编译

    开发环境搭建好了后,接下来就是HZ-RK3568开发板操作系统编译工作。 一、menuconfig 先确保虚拟机的开发环境OK。 sudo apt install build-essential
    发表于 08-17 09:15

    rk3568快速开机 快速启动实现

    想了解下rk官方目前对rk3568快速开机的实现有哪些,是否有成熟的方案。在官方文档上看到rv1126方案,不知道可否应用在rk3568上。有专业人士回答吗
    发表于 08-07 08:37

    迅为RK3568 重制版RK3568驱动指南全面升级

    迅为RK3568 重制版RK3568驱动指南全面升级
    的头像 发表于 07-28 15:25 3542次阅读
    迅为<b class='flag-5'>RK3568</b> 重制版<b class='flag-5'>RK3568</b>驱动指南全面升级

    【HZ-RK3568开发板免费体验】合众HZ-RK3568开发板初次使用

    、HDMI接口 ⑤、4G与Debug Type-C接口、NVMe接口 ⑥、RK3568核心模块部分 至于底板提供的两路CAN接口,以及背面提供的MIPI-CS1接口,适配OV13850摄像头,这里就不
    发表于 07-27 23:52

    【HZ-RK3568开发板免费体验】3、开启Linux Kernel RT功能

    事件。 内核定时器: Preempt-RT提供了更精确和可配置的内核定时器,使得可以实现微秒级的定时精度,适用于对时间要求极高的应用场景。 实时扩展: Preempt-RT提供了一些实时扩展机制,使得
    发表于 07-22 14:03

    RK3568 EVB开发板 深度休眠与快速醒的工作流程

    RK3568 EVB开发板关于深度休眠和唤醒流程的分析
    的头像 发表于 07-22 09:49 1054次阅读
    <b class='flag-5'>RK3568</b> EVB开发板 深度休眠与快速醒的工作流程

    RK3568开发板暗藏32位兼容开关?飞凌嵌入式带你一键解锁!

    RK3568是一款64位处理,飞凌嵌入式为其提供的交叉编译也是64位的,然而部分用户可能需要在RK3568开发板上运行32位应用。本文将详细阐述如何使用32位交叉编译
    的头像 发表于 07-19 08:49 4556次阅读
    <b class='flag-5'>RK3568</b>开发板暗藏32位兼容开关?飞凌嵌入式带你一键解锁!

    【HZ-RK3568开发板免费体验】HZ-RK3568开发板初步接触

    J处理设计,支持图像H.264编解码处理,内置3D GPU可图像处理,2D硬件加速引擎,内置0.8TOPS NPU算力,具备一定AI能力。 RK3568介绍如下: HZ-RK3568开发板外设丰富
    发表于 07-10 23:19

    迅为RK3568开发板实操-HDF驱动配置UART

    对于不同的平台,需要在对应的平台目录修改对应的 hcs 文件,接下来示例为在 rk3568下新增 uart4 uart9 uart7 的修改方法。 修改 vendor/hihope/rk3568
    的头像 发表于 06-27 15:58 688次阅读

    Rockchip RK3568技术参考手册

    电子发烧友网站提供《Rockchip RK3568技术参考手册.pdf》资料免费下载
    发表于 05-17 17:24 57次下载