Questions tagged «interrupts»

一种控制计算机中程序流的机制。中断后,计算机将保存其当前的操作状态,并根据生成的中断更改代码的执行。中断可以是硬件来源的,也可以是软件来源的。来自软件的中断称为陷阱。它是轮询的另一种机制,是实现大多数I / O,多任务和控制的基础。

4
边沿触发和水平触发是什么意思?
我正在研究8085微处理器体系结构,“边缘触发”和“电平触发”一词确实使我非常困惑。有人能用外行人的话解释我吗? 在研究名为RST 7.5,RST 6.5,RST 5.5和TRAP的8085的中断时,我遇到了这些词,它们使我感到困惑。在这里,我附上了我正在阅读的文档链接,并提到了我的混淆图。 在文档RST 7.5-> Edge触发RST 5.5-> Level触发中。TRAP->边沿触发和水平触发。(为什么?这有什么区别吗?)。 文件连结

6
串行协议定界/同步技术
由于异步串行通信甚至在当今的电子设备中也很普遍,我相信我们许多人会不时遇到这样的问题。考虑与串行线(RS-232或类似产品)连接并且需要连续交换信息的电子设备D和计算机。即每个发送一个命令帧,并每个发送一个状态报告/遥测帧答复(报告可以作为对请求的响应发送,也可以独立发送-在这里并不重要)。通信帧可以包含任何任意二进制数据。假设通信帧是固定长度的分组。PCPCX msDY ms 问题: 由于协议是连续的,因此接收方可能会失去同步,或者只是在进行中的发送帧中间“加入”,因此它只是不知道帧起始位置(SOF)在哪里。根据数据相对于SOF的位置,数据具有不同的含义,接收到的数据可能会永久损坏。 所需的解决方案 可靠的定界/同步方案可在恢复时间短的情况下检测SOF(即重新同步所需的时间不超过1帧)。 我了解(并使用了一些)的现有技术: 1)标头/校验和 -SOF作为预定义的字节值。帧末的校验和。 优点:简单。 缺点:不可靠。恢复时间未知。 2)字节填充: 优点:可靠,快速恢复,可与任何硬件一起使用 缺点:不适用于固定大小的基于帧的通信 3)第9位标记 -在每个字节之前附加一个位,而SOF标记为1和数据字节标记为0: 优点:可靠,快速恢复 缺点:需要硬件支持。大多数PC硬件和软件未直接支持。 4)第8位标记 -上面的一种模拟,同时使用第8位而不是第9位,每个数据字仅保留7位。 优点:可靠,快速的恢复,可与任何硬件一起使用。 缺点:需要从/到常规8位表示到/从7位表示的编码/解码方案。有点浪费。 5)基于超时 -假定SOF为某个已定义的空闲时间之后的第一个字节。 优点:无数据开销,简单。 缺点:不太可靠。在较差的计时系统(如Windows PC)上无法很好地工作。潜在的吞吐量开销。 问题: 还有哪些其他可能的技术/解决方案可以解决该问题?您能否指出上面列出的缺点,可以轻松解决这些缺点,从而消除它们?您(或您将)如何设计系统协议?
24 serial  communication  protocol  brushless-dc-motor  hall-effect  hdd  scr  flipflop  state-machines  pic  c  uart  gps  arduino  gsm  microcontroller  can  resonance  memory  microprocessor  verilog  modelsim  transistors  relay  voltage-regulator  switch-mode-power-supply  resistance  bluetooth  emc  fcc  microcontroller  atmel  flash  microcontroller  pic  c  stm32  interrupts  freertos  oscilloscope  arduino  esp8266  pcb-assembly  microcontroller  uart  level  arduino  transistors  amplifier  audio  transistors  diodes  spice  ltspice  schmitt-trigger  voltage  digital-logic  microprocessor  clock-speed  overclocking  filter  passive-networks  arduino  mosfet  control  12v  switching  temperature  light  luminous-flux  photometry  circuit-analysis  integrated-circuit  memory  pwm  simulation  behavioral-source  usb  serial  rs232  converter  diy  energia  diodes  7segmentdisplay  keypad  pcb-design  schematics  fuses  fuse-holders  radio  transmitter  power-supply  voltage  multimeter  tools  control  servo  avr  adc  uc3  identification  wire  port  not-gate  dc-motor  microcontroller  c  spi  voltage-regulator  microcontroller  sensor  c  i2c  conversion  microcontroller  low-battery  arduino  resistors  voltage-divider  lipo  pic  microchip  gpio  remappable-pins  peripheral-pin-select  soldering  flux  cleaning  sampling  filter  noise  computers  interference  power-supply  switch-mode-power-supply  efficiency  lm78xx 

2
是否应该始终定义所有陷阱?
我现在在dsPIC 30F4013中看到过两种情况,由于未定义陷阱,控制器正在复位。为什么首先要提出这些陷阱仍然是一个谜,但这不是我的直接问题。我开始认为始终定义所有陷阱是一个好的编程习惯,即使永远不要出现陷阱,因此我至少会得到一条清晰的错误消息,而不是随机重置。这是我不知道的标准做法吗?我应该考虑这种做法是否有弊端?

1
Stm32事件和中断
我开始研究stm32上的中断,特别是stm32f4发现板。我发现了这个示例,在该示例中,您必须按下按钮才能启动中断,然后再次按下以使其停止。 在这一行:EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt我们必须选择中断模式或事件模式。我将其更改为事件模式,但似乎不起作用。因此我得出的结论是,处理程序仅在中断执行的情况下执行。 如果您无法在事件发生时执行一些代码,为什么还要在stm32上使用事件? 这是代码: #include "stm32f4xx.h" #include "stm32f4xx_syscfg.h" #include "stm32f4xx_rcc.h" #include "stm32f4xx_gpio.h" #include "stm32f4xx_exti.h" #include "misc.h" EXTI_InitTypeDef EXTI_InitStructure; void EXTILine0_Config(void); void LEDInit(void); void ExtInt(void) { LEDInit(); /* Configure EXTI Line0 (connected to PA0 pin) in interrupt mode */ EXTILine0_Config(); /* Generate software interrupt: simulate a rising edge applied …

2
SPI安全被打断吗?
我正在从固件内部写入microSD卡,但这是优先级最低的任务,因此在读/写过程中可能会被其他任务打断。 现在,假设我使用UART与该microSD卡进行了通信。读取过程中的问题是硬件RX FIFO会溢出,因此我可以努力的最大延迟为(FIFO大小×字节/秒),而在写入过程中将没有问题,因为另一端只会等到我发送下一个字符。 现在我正在使用SPI怎么工作?这种情况是否与写入无关紧要,而对于读取却取决于SPI FIFO大小?

4
如何在ARM Cortex A9上实现关键部分
我正在将一些旧代码从ARM926内核移植到CortexA9。此代码是裸机代码,不包含操作系统或标准库(全部自定义)。我遇到了与竞态条件有关的故障,应该通过对代码进行严格的分段来避免这种情况。 我想对我的方法提供一些反馈,以了解我的关键部分是否可能未正确为此CPU实施。我正在使用GCC。我怀疑有一些细微的错误。 另外,是否有一个开源库具有针对ARM的这些类型的原语(甚至是一个很好的轻量级的spinlock / semephore库)? #define ARM_INT_KEY_TYPE unsigned int #define ARM_INT_LOCK(key_) \ asm volatile(\ "mrs %[key], cpsr\n\t"\ "orr r1, %[key], #0xC0\n\t"\ "msr cpsr_c, r1\n\t" : [key]"=r"(key_) :: "r1", "cc" ); #define ARM_INT_UNLOCK(key_) asm volatile ("MSR cpsr_c,%0" : : "r" (key_)) 该代码的用法如下: /* lock interrupts */ ARM_INT_KEY_TYPE key; ARM_INT_LOCK(key); <access registers, …
15 c  embedded  interrupts 

4
AVR SEI指令
AVR SEI指令(http://www.atmel.com/webdoc/avrassembler/avrassembler.wb_SEI.html)在允许中断之前等待下一条指令完成。 如果我使用另一条指令在SREG中设置I标志,这还会等待1条指令吗? 换句话说:等待是SEI指令或状态寄存器的功能吗? 如果它是SEI指令的功能,那么在执行SEI的周期中或与下一条指令一起在哪一点实际设置该标志?

6
在嵌入式系统中使用中断时避免全局变量
对于避免全局变量的嵌入式系统,是否有一种在ISR与程序其余部分之间实现通信的好方法? 似乎一般的模式是要有一个在ISR和程序的其余部分之间共享并用作标志的全局变量,但是这种全局变量的使用对我而言是不利的。我提供了一个使用avr-libc样式ISR的简单示例: volatile uint8_t flag; int main() { ... if (flag == 1) { ... } ... } ISR(...) { ... flag = 1; ... } 我看不到本质上是一个范围界定问题。当然,ISR和程序其余部分都可以访问的任何变量必须固有地是全局的?尽管如此,我经常看到人们说的是“全局变量是实现ISR与程序其余部分之间通信的一种方式 ”(强调我的意思),这似乎暗示着还有其他方法。如果还有其他方法,那是什么?

4
控制器如何知道何时跳转到ISR?
我在谈论核心层面的事情。 据我了解,控制器内核只是执行从内存中提取的指令(提取-解码-执行)。当中断到达时,核心/ ALU如何决定跳至ISR? 因为我们或编译器没有添加任何指令来查询中断状态-那么它如何知道需要处理中断?


1
Arduino和中断:获取引脚值的快速方法
我使用的是Arduino Uno,并且已经根据我发现的说明1对其进行了设置,使其可以处理数字引脚2、3、4和5上的中断。 void setup() 包含以下代码来设置中断。 //Endable Interrupts for PCIE2 Arduino Pins (D0-7) PCICR |= (1<<PCIE2); //Setup pins 2,3,4,5 PCMSK2 |= (1<<PCINT18); PCMSK2 |= (1<<PCINT19); PCMSK2 |= (1<<PCINT20); PCMSK2 |= (1<<PCINT21); //Trigger Interrupt on rising edge MCUCR = (1<<ISC01) | (1<<ISC01); 现在,ISR(PCINT2_vect)函数在每个中断上触发。就像魅力一样。我的问题是,找出哪一个引脚是最好/最快的方法是什么? 我在Re中找到了一些东西:最好在引脚2、3上使用ISR(PCINT2_vect)或attachInterrupt?,但我不了解代码,因此无法立即使用。但这看起来令人印象深刻... 解决办法是什么? [2] http://arduino.cc/forum/index.php/topic,72496.15.html#lastPost 编辑: 目前,我正在从输入引脚寄存器中读取引脚状态: if (PIND & …

2
启用中断但没有ISR
我想知道如果启用了中断会发生什么情况(例如:恩智浦LPC1778的CAN模块中的仲裁丢失中断),但是没有为该中断定义ISR。 当发生这样的中断时,我知道相应的中断标志将被置位,但是由于我尚未定义任何ISR,因此不会为该中断的控制传递存储任何中断向量偏移地址,因此控制将回传到主例程,我可以通过在主例程中轮询中断标志来重置中断标志(这是我的想法)。当CPU确定没有ISR跳到该中断标志时,会有任何延迟吗? 任何可能发生的解决方案都可以真正帮助我。 谢谢。 更新: 我在uC上启用了CAN中断,但是没有定义ISR。当我执行内部回送测试时,代码进入了无限循环。这是在LPC1778上执行的无限循环的反汇编代码: B . ENDP 所以,如果您正在使用中断,请使用ISR。

3
软件中断与功能
在使用MCU大约三年后,我仍然不知道软件中断的用途是什么?我已经用STM32做过几项工作,但从未使用过软件中断。确实,这对我来说是一个大问题: 为什么当我们可以使用简单功能执行任务时,应该使用软件中断吗?软件中断和功能之间有什么区别? 每次您喜欢时,都可以调用一个函数(为工作编写的函数)。使用软件中断而不是简单的功能应该会带来一些好处。我不确定,但是我认为软件中断有好处:您可以为软件中断分配优先级,然后可以为软件中断赋予更高的优先级,以避免硬件中断破坏您的任务。
10 arm  stm32  interrupts 

3
正确使用引脚更改中断
我正在尝试使用引脚更改中断来检测按下的按钮。到目前为止,我从未使用过此类中断,并且存在一些问题,因此我想确定这是否正确。 如果我正确地获得了数据表,则必须执行以下操作以使用引脚更改中断: 在PCMSK寄存器中设置要控制的PIN 启用PIN寄存器以进行引脚更改中断控制(PCICR) 启用中断 使用相应的中断向量 项目:简单的Moodlamp,通过4个按钮控制颜色。 设定: Atmega168A-PU 4个迷你按钮开关 MOSFETs控制我的3瓦RGB LED 这是我正在使用的代码无法正常工作: #include <avr/io.h> #include <stdint.h> #include <avr/interrupt.h> #include <util/delay.h> #define BUTTON1 (1<<PC5) #define BUTTON2 (1<<PC4) #define BUTTON3 (1<<PC3) #define BUTTON4 (1<<PC2) #define GREEN (1<<PB1) #define BLUE (1<<PB2) #define RED (1<<PB3) void init() { // enable LED DDRB |= …

2
有什么理由不在AVR上使用Timer0?
只是一个基本问题...对于arduino / avr / ATMega328,我发现了许多使用Timer1的示例(甚至有一个完整的库),但很少有使用Timer0(或Timer2)的示例。 现在,我知道使用这些定时器中的任何一个来控制ISR方法都将禁止在其相关引脚上使用PWM,但是是否有特定的原因使人们似乎远离Timer0?它是否在内部用于其他不应该惹的麻烦? 我当前的应用程序可以使用Timer1很好,我只是想知道我是否缺少其他一些经常被忽略的计时器。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.