ZYNQ中FreeRTOS中使用定时器

2023-11-06

使用普通的Timer中断方式时,Timer中断可以正常运行,但是UDP通信进程无法启动。其中TimerIntrHandler是中断服务程序,打印程序运行时间与从BRAM中读取的数据。

void SetupInterruptSystem(XScuGic *GicInstancePtr,XScuTimer *TimerInstancePtr, u16 TimerIntrId)
{
	XScuGic_Config *IntcConfig; //GIC config
	Xil_ExceptionInit();
	//initialise the GIC
	IntcConfig = XScuGic_LookupConfig(INTC_DEVICE_ID);
	XScuGic_CfgInitialize(GicInstancePtr, IntcConfig,
	IntcConfig->CpuBaseAddress);
	//connect to the hardware
	Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,(Xil_ExceptionHandler)XScuGic_InterruptHandler,GicInstancePtr);
	//set up the timer interrupt
	XScuGic_Connect(GicInstancePtr, TimerIntrId,(Xil_ExceptionHandler)TimerIntrHandler,	(void *)TimerInstancePtr);
	//enable the interrupt for the Timer at GIC
	XScuGic_Enable(GicInstancePtr, TimerIntrId);
	//enable interrupt on the timer
	XScuTimer_EnableInterrupt(TimerInstancePtr);
	// Enable interrupts in the Processor.
	Xil_ExceptionEnableMask(XIL_EXCEPTION_IRQ);
	}


static void TimerIntrHandler(void *CallBackRef)
{
	static int sec = 0; //计数
	XScuTimer *TimerInstancePtr = (XScuTimer *) CallBackRef;
	XScuTimer_ClearInterruptStatus(TimerInstancePtr);
	sec++;
	int rev = Xil_In32(XPAR_BRAM_1_BASEADDR);
	xil_printf( "The data at %x is %x \r",XPAR_BRAM_1_BASEADDR,rev);
	printf("Current program run for %d seconds\n\r",sec); //每秒打印输出一次
}


void timer_init()
{
    //Timer test
    printf("Timer test...\r\n");
    XScuTimer_Config *TMRConfigPtr; //timer config
    //printf("------------START-------------\n");
    //私有定时器初始化
    TMRConfigPtr = XScuTimer_LookupConfig(0);//TIMER_DEVICE_ID);
    XScuTimer_CfgInitialize(&Timer, TMRConfigPtr,TMRConfigPtr->BaseAddr);
    XScuTimer_SelfTest(&Timer);
    //加载计数周期, 私有定时器的时钟为 CPU 的一般, 为 333MHZ,如果计数 1S,加载值为1sx(333x1000x1000)(1/s)-1=0x13D92D3F
    XScuTimer_LoadTimer(&Timer, TIMER_LOAD_VALUE);
    //自动装载
    XScuTimer_EnableAutoReload(&Timer);
    //启动定时器
    XScuTimer_Start(&Timer);
    //set up the interrupts
    SetupInterruptSystem(&Intc,&Timer,TIMER_IRPT_INTR);
}

改为进程定时器的方式后,UDP通信进程可以正常启动。DELAY_10_SECONDS与DELAY_1_SECOND是中断时间设置。

#define TIMER_ID	1
#define DELAY_10_SECONDS	10000UL
#define DELAY_1_SECOND		1000UL
#define TIMER_CHECK_THRESHOLD	9
static TimerHandle_t xTimer = NULL;

int main()
{
	sys_thread_new("main_thread", (void(*)(void*))main_thread, 0,
			THREAD_STACKSIZE, DEFAULT_THREAD_PRIO);

	//sleep(10);
	const TickType_t x1second = pdMS_TO_TICKS( DELAY_1_SECOND );
	xTimer = xTimerCreate( (const char *) "Timer",x1second,pdTRUE,(void *) TIMER_ID,TimerIntrHandler);
	configASSERT( xTimer );
	xTimerStart( xTimer, 0 );

	vTaskStartScheduler();
	while(1);
	return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ZYNQ中FreeRTOS中使用定时器 的相关文章

  • UDP sendto 上的 ECONNREFUSED 错误

    我在使用正在写入的应用程序时遇到一些无法解释的行为 使用 sendto 向多个端口发送 UDP 数据 所有端口均使用套接字 PF INET SOCK DGRAM 0 为了一组客户端读取进程的利益 这些 sendto 偶尔会不可预测地触发经济
  • 执行定期操作[重复]

    这个问题在这里已经有答案了 我正在 Windows 上工作 我想执行一个函数foo 每 10 秒一次 我该怎么做呢 在 的最后foo 创建一个Timer哪个调用foo 10 秒后自动 因为 Timer创建一个新的thread打电话foo 您
  • iOS 14 在进行本地网络广播时给出“操作系统错误:错误的文件描述符,errno = 9”

    做一点Jeopardy 风格问答 https stackoverflow blog 2011 07 01 its ok to ask and answer your own questions here 我正在 Flutter 中开发一个应
  • 致命错误:netinet/in.h:没有这样的文件或目录

    套接字编程 UDP 服务器 我正在尝试使用 UDP 服务器进行消息加密和解密 代码在这里 https www geeksforgeeks org message encryption decryption using udp server
  • Angular2 可观察定时器条件

    我有一个计时器 initiateTimer if this timerSub this destroyTimer let timer TimerObservable create 0 1000 this timerSub timer sub
  • Clock_nanosleep() 尚不支持 CLOCK_MONOTONIC_RAW。这该如何处理呢?

    现在clock nanosleepDebian Jessie 上的 CLOCK MONOTONIC RAW 返回 EOPNOTSUPP 如何解决该问题并补偿可能应用于计时器循环中的 CLOCK MONOTONIC 的 NTP 调整 Is c
  • 更好的 boost asio Deadline_timer 示例

    我正在寻找一个更好的例子boost asio deadline timer 给出的例子总是会超时并调用close方法 我尝试打电话cancel 在计时器上但这会导致函数传递到async wait立即被呼叫 在异步 tcp 客户端中使用计时器
  • 自 2012 年以来,WinSock 注册 IO 性能是否有所下降?

    我最近使用 MS 为该 API 提供的稍微可接受的文档编写了基于 WinSock Registered IO RIO 的 UDP 接收 最终的性能非常令人失望 单套接字性能有些稳定 约为每秒 180k 数据包 使用多个 RSS 队列 即多个
  • JavaFX 的 Swing 计时器替代方案以及线程管理差异

    使用 JavaFX 的 Swing 计时器是否安全 或者 Swing 有特殊的替代方案吗 JavaFX 和 Swing 的线程管理有什么区别 事实上我很想知道相当于摇摆计时器 SwingUtilities invokeLater and i
  • Python sched.scheduler 超过最大递归深度

    我最近开始学习 Python 我正在制作的简单应用程序的一部分包括一个在其自己的线程中运行的带有 hh mm ss 显示的计时器 环顾网络 我发现了两种实现此目的的方法 使用 sched scheduler 使用threading Time
  • 计时器、事件和垃圾收集:我错过了什么吗?

    考虑以下代码 class TestTimerGC Form public TestTimerGC Button btnGC new Button btnGC Text GC btnGC Click sender e gt GC Collec
  • Android 计时器/计时器任务导致我的应用程序崩溃?

    只是在我的 mainActivity 的 onCreate 中测试一个简单的代码块 Timer timer2 new Timer TimerTask testing new TimerTask public void run Toast m
  • Android:如何在触摸事件中手动实现长按?

    简短版本 我想要一种方法来在 onTouchEvent 上启动基于时间的计数器 并测试在响应之前是否已经过了一定的时间 作为手动 LongTouch 检测 解释 我有一个自定义 imageView 可以通过两根手指滑动滑入 滑出屏幕 我想向
  • 定时器启动/停止参数

    自从加入这个社区以来 我在技能和进步方面取得了突飞猛进的进步 你们都是一个巨大的帮助 我无法提供一个计时器 该计时器已在启动和停止时实现了某些参数 我要么收到错误消息 局部变量计时器可能尚未初始化 要么没有收到错误消息 但什么也没有发生 也
  • 如何制作wpf倒计时器?

    我想创建 wpf 倒数计时器 将结果显示为hh mm ss进入文本框 我将感谢任何人的帮助 您可以使用DispatcherTimer class msdn http msdn microsoft com en US library syst
  • 为什么 UDP 服务器中只有一个套接字?

    我正在准备考试 发现了这个问题 典型的 UDP 服务器可以使用单个套接字来实现 解释一下为什么 对于 TCP 驱动的服务器 我发现创建了两个套接字 一个用于所有客户端访问服务器 另一个用于每个客户端的特定 套接字 用于服务器和客户端之间的进
  • 了解 U-Boot 内存占用

    我不明白加载 U Boot 时 RAM 中发生了什么 我正在开发 Xilinx Zynq ZC702 评估套件 并尝试使用 U Boot 在其上加载 Linux 内核 于是我使用Xilinx工具Vivado和SDK生成了一个BOOT bin
  • Android相当于javascript的setTimeout和clearTimeout?

    setTimeout 有一个答案https stackoverflow com a 18381353 433570 https stackoverflow com a 18381353 433570 它没有提供我们是否可以像在 JavaSc
  • Erlang 如何睡觉(晚上?)

    我想在 Erlang 服务器上每隔几个小时运行一次小型清理过程 我知道计时器模块 我在教程中看到一个示例 使用链式计时器 睡眠命令来等待几天后发生的事件 我觉得这很奇怪 我知道 Erlang 进程与其他语言中的进程相比是独一无二的 但是进程
  • 停止从标准输入读取

    我正在用 LInux C 编写一个简单的控制台应用程序 它接受来自命令行的用户输入 我在用std getline std cin std cin gt gt text在一个线程中 10 秒后 我想停止接受控制台输入并写一条短信 然后做其他事

随机推荐

  • Debug下出现debug assertion failed

    出现debug assertion failed界面后点击重试跳到这句ASSERT m hObject NULL 采用注释查找错误的方式定位至 if CFrameWnd OnCreate lpCreateStruct 1 return 1
  • 获取referer中的请求参数_Http请求头中的referer

    Referer是 HTTP请求header 的一部分 当浏览器 或者模拟浏览器行为 向web 服务器发送请求的时候 头信息里有包含 Referer 比如我在www google com 里有一个www baidu com 链接 那么点击这个
  • 在Linux内核中添加自己的驱动程序

    就说一下怎么添加进去吧 首先你要把驱动程序写好 我已添加 首先在drivers目录下面创建GPIO文件夹 文件夹下面创建三个文件 分别是 gpio c Kconfig Makefile 三个文件 gpio c是你的驱动程序 Kconfig是
  • Spring复习笔记

    1 Spring 1 1 简介 优点 Spring是一个轻量级控制反转 IoC 和面向切面 AOP 的容器 轻量级 低侵入 松耦合 框架粘合剂 更容易整合其他框架 支持事务处理 官网 https spring io projects spr
  • 不怕死就上这些网站

    1 hxxp www dj3344 com 打开后 重启时你的主页就变成它的 并通过QQ向他人传播 现在正飙行 奇坏无比 2 hxxp www qq168 net 打开后 重启时你的主页就变成它的 并通过QQ向他人传播 而且传波病毒 还狠些
  • 我的GIT练习Four

    目录 前言 GIT安装教程 Git作者 GIT优点 GIT缺点 为什么要使用 Git GIT练习Four C1 初始化项目 C2 设计项目首页 C3 设计登录页面 C4 实现登录功能 C5 设计后台页面 C6 设计注册页面 C7 实现注册功
  • 拼搏百天!上月喜获阿里内推,交叉面把面试官面傻眼了

    阿里内推一面 项目 1 面试官让我描述一个自己印象最深的项目 手画设计图 2 针对项目中的技术进行发问 比如 架构设计 部署图 模块之间的通信等 3 因为我描述项目存储数据比较多 让我重新设计数据库的表 怎么设计 后面都是针对项目技术的问题
  • iOS 蓝牙扫描枪扫描内容不正确

    背景 在移动设备上 使用蓝牙扫描枪 相当于接入了一下外接键盘 我们的客户使用我们的App 并连接蓝牙扫码枪 将扫描的内容传输到我们的App中 App再做出对应的响应 举个例子 较为常见的应用场景就是 拣货员拿着扫码枪 扫描产品上的UPC码
  • HttpClient的ssl方式发送请求

    最近因为项目需要 需要以rest方式和第三方平台交互 由于需要ssl方式连接 所以记录一下 maven依赖如下
  • openssl做HMAC实例(C++)

    1 HMAC简介 1 MAC Message Authentication Code 消息认证码算法 可以将其认为是含有秘钥的散列 Hash 函数算法 即兼容了MD和SHA算法 并在此基础上加上了秘钥 因此MAC算法也经常被称作HMAC算法
  • 常见的WRF运行错误

    转载至 https wk atmchem github io 2021 06 03 WRFbugandSolutions WPS Errors Ungrib exe Segmentation Fault Parsed 29 entries
  • sql server判断两个字符串是否相等(区分大小写)

    步骤 一 新增测试数据 新建测试表 create table testTable1 str1 varchar 100 str2 varchar 100 新增测试数据 如下图 二 两字符串进行比较 当直接使用 号进行判断时 是无法区分大小写的
  • 深度学习速学上手小项目

    demo仓库和视频演示 银色子弹zg的个人空间 银色子弹zg个人主页 哔哩哔哩视频 卷积网路CNN分类的模型一般使用包括alexnet DenseNet DLA GoogleNet Mobilenet ResNet ResNeXt Shuf
  • AIX下使用ASM

    metalink note 282036 1 IBM Software Requirements and PTFs for AIX 5 3 support of Oracle Database 10g Release 2 10 2 0 1
  • Anaconda 的Jupyter Notebook更换默认浏览器

    因为之前装的Anaconda默认使用的是系统自带的Edge浏览器 对的 就是这个玩意 然后自己近期一直用的win11 前几个版本还没什么太大问题 但是在20号左右系统自动更新了一下 对的就是这个 然后Microsoft Edge浏览器直接打
  • LUA中的and与or

    LUA中的and与or 2013 01 04 14 51 14074人阅读 评论 2 收藏 举报 分类 Lua 44 逻辑运算符认为false和nil是假 false 其他为真 0也是true and的优先级比or高 其它语言中的and表示
  • 小程序的数据驱动和Vue的双向绑定有何异同

    引言 在现代应用程序开发中 数据驱动和双向绑定是两个非常重要的概念 它们能够提供更好的用户体验和开发效率 本文将探讨小程序的数据驱动和Vue的双向绑定 并通过代码实例来说明它们的异同 让我们一起来了解吧 小程序的数据驱动 小程序是一种轻量级
  • Java初阶——练习题

    import java util Random import java util Scanner public class java 11 1 public static void main String args int ret numb
  • 模板的特化(具体化)

    模板的特化 具体化 重点注意 1 类模板和函数模板都可以被全特化 2 类模板能偏特化 不能被重载 3 函数模板可以实现重载 不能被偏特化 4 类模板调用优先级 全特化类 gt 偏特化类 gt 主版本模板类 6 函数模板同时存在具体化模板 函
  • ZYNQ中FreeRTOS中使用定时器

    使用普通的Timer中断方式时 Timer中断可以正常运行 但是UDP通信进程无法启动 其中TimerIntrHandler是中断服务程序 打印程序运行时间与从BRAM中读取的数据 void SetupInterruptSystem XSc