2 louyu21 louyu21 于 2016.03.16 16:07 提问

中断对延时时间的影响

我目前碰到一个问题,我设计了一程序,用延时信号做数据脉冲载波,使用的是高频信号,另外做了一红外接收程序用了中断,但是在使用过程中发现,这个中断对我在的载波程序产生了一定影响,无规律的多延时了几百ns,对载波数据起到了很大的影响,请问各位有什么好的方法吗

1个回答

cxsmarkchan
cxsmarkchan   2016.03.16 19:47

你的延时是用循环做的吗?如果是这样的话,中断处理函数的执行时间也会被包含进延时中。
可以考虑用定时中断做载波程序,这样会定时触发中断函数,修改载波状态。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
linux ------ 中断处理及延时操作
linux 系统的中断分上半部与下半部2部分,上半部是硬件中断,会关闭中断,一般处理时间较短,处于中断上下文。下半部有Tasklet与工作队列2种,是中断处理的延时操作,如果中断需要处理较复杂的事务,一般会放到下半部来执行。Tasklet运行在中断上下文,不允许睡眠。工作队列运行在进程上下文,可以睡眠,意味着会引起进程的切换。               1.  一般的中断代码
嵌入式实时操作系统中断延时
由于外部事件的发生常常是以一个中断申请信号的形式来通知处理器,然后才运行中断服务程序中来处理该事件,所以中断延时是影响系统实时性的一个重要因素。那么都有哪些问题影响中断延时呢?        一般情况下,都认为处理器是随时可以响应中断申请的。其实并非如此,首先在处理器关闭中断时不能响应中断申请;另外处理器在正在执行一条指令时也不能响应中断申请。因此,当某个事件向处理器发出中断请求时,处理器可
STM32系统滴答_及不可不知的延时技巧
我想每个单片机爱好者及工程开发设计人员都有过点灯的经历。流水灯是个好东西,尤其是在调试资源有限的环境中,有时会帮上大忙。   然在最初入门时,如何让这些小灯们按照我们的想法欢快地跑起来呢,绝大多数小朋友的做法是:在一个while循环里加上延时程序,让小灯在每个状态下停留一段时间,再进入下一个状态,这样小灯们就会在不同的状态中切换,就可以根据我们设计的程序闪烁了。   这样这里就会涉及到一个
中断和定时器实验 外部中断0,触发一个延时过程,假定延时时间为1秒
题目:通过外部中断0,触发一个延时过程,假定延时时间为1秒,延时期间可以点亮一个LED或让蜂鸣器发出声音。已知单片机晶振频率为6 .00MHz。 提示:可以使用定时器中断,也可以不使用定时器中断。如果使用定时器中断,则把中断重新启动工作放在外部中断服务程序中,一旦定时器从新启动,延时固定的时间。程序的写法可以参考上次上机的题目,但是必须使用C语言。本程序必须包含两个中断子程序,一个是外部中断0,一个是定时器中断。在外部中断0子程序中设置定时器使之工作,完成延时,时间达到后再禁止定时器中断,这个工作应该在定时器中断子程序本身中完成。 上面的方法可以完成一个“重复触发问题”,即定时时间没有到的时候又来一个触发信号,应该怎么办?
中断中处理延时及一些函数的调用规则
转自:http://blog.csdn.net/samantha_sun/article/details/6790492 1,中断处理程序中不能使用有睡眠功能的函数,如ioremap,kmalloc,msleep等,理由是中断程序并不是进程,没有进程的概念,因此就没有休眠的概念; 2,中断处理程序中的延时可以用忙等待函数来代替,如ndelay,udelay,mdelay等,这些函数
关于信号上升时间和传输延时的关系
      一般来说,当传输线很短时,传输延时在一定的范围内,此时虽然仍然存在反射,但反射的波形在信号的上升沿之内,则从波形看,没有大的影响,但究竟传输延时短到什么程度才算短呢?我们做一个实验,还是通过spice仿真得到结果。图1为仿真电路图,该信号源端上升时间为1ns,幅度为1V,阻抗为10欧姆。 图1 仿真电路图 1、Td=40%Tr(Tr为上升时间,Td为传输延时),开路终端波形。 图2  Td=40%Tr,开路终端波形 2、Td=30%Tr(Tr为上升时间,Td为传输延时),开路终端
STM32 SysTick 精确延时(非中断方式)
SysTick是Cortex-M内核自带的一个24位定时器,所以我们可以在core_cm3.h或core_cm4.h头文件中看到它的寄存器定义和配置函数SysTick_Config()。SysTick的功能非常简单,仅仅提供一个时基功能,支持中断请求,因此它的寄存器寥寥无几。 以下是手册上对SysTick寄存器的介绍: CTRL为控制寄存器: ENABLE:使能位 TICKINT:
ucosii的中断和时钟
ucosii的中断 为了处理任务延时、任务调度等一些和时间有关的事件,任何一个计算机系统都应该有一个系统时钟。与其他计算机系统一样,ucosii的时钟是通过硬件定时器产生定时中断来实现的。 应中断请求而运行的程序叫做中断服务子程序,中断服务子程序的入口地址叫做中断向量。 对于可剥夺型内核来说,中断服务子程序运行结束之后,系统将会根据情况进行一次任务调度去运行优先级别最高的任务,而并不一定要继
Linux内核中断延时与解决
中断潜伏期(Interrupt Latency)或者说中断延迟,这个指从中断产生到CPU开始响应中断的时间段,也就是图中从t2至t3的时间段。中断潜伏期是由于内核在进入临界区前关闭CPU的中断响应所引起的,在这个时间段内,虽然外部设备使CPU的中断请求线有效,但CPU并不立刻响应中断,而是继续执行临界区的内核代码,直至退出临界区、使能中断请求,才开始进行中断的响应。当然,还需要注意的一点是,中断潜伏期实际上包含了硬件所产生的中断延迟时间,我们一般所研究的是如何最大限度的减少软件所造成的延迟时间,所以,如果没
嵌入式系统学习——STM32之UCOS-III中断和时间管理及软件定时器
UCOSIII中断:       中断:应内部或外部异步事件的请求中止当前任务,而去处理异步事件所要求的任务的过程叫做中断。 void USART1_IRQHandler(void) { OSIntEnter(); //中断服务程序 OSIntExit(); } 进入和退出中断服务函数: 进入中断服务函数以后使用函数OSIntEnter(