คำถามติดแท็ก interrupts

กลไกในการควบคุมการไหลของโปรแกรมในคอมพิวเตอร์ เมื่อถูกขัดจังหวะคอมพิวเตอร์จะบันทึกสถานะการทำงานปัจจุบันและการเปลี่ยนแปลงการเรียกใช้รหัสที่ขึ้นอยู่กับการขัดจังหวะที่สร้างขึ้น การขัดจังหวะอาจเป็นได้ทั้งที่มาจากฮาร์ดแวร์หรือที่มาจากซอฟต์แวร์ การขัดจังหวะที่มาจากซอฟต์แวร์เรียกว่ากับดัก เป็นกลไกทางเลือกในการสำรวจความคิดเห็นและเป็นพื้นฐานที่ใช้ I / O, มัลติทาสก์และการควบคุมส่วนใหญ่

4
Edge ทริกเกอร์และระดับทริกเกอร์หมายความว่าอย่างไร
ฉันกำลังศึกษาสถาปัตยกรรมไมโครโพรเซสเซอร์ 8085 ตัวและขอบคำที่เรียกใช้และระดับทริกเกอร์ทำให้ฉันสับสนมากจริงๆ ใครช่วยอธิบายมันด้วยคำพูดของคนธรรมดา? ในขณะที่ศึกษาการขัดจังหวะของ 8085 ชื่อ RST 7.5, RST 6.5, RST 5.5 และ TRAP ฉันเจอคำเหล่านี้และพวกเขาก็สับสนฉัน ที่นี่ฉันได้แนบลิงก์เอกสารหนึ่งไฟล์ที่ฉันกำลังอ่านและฉันได้พูดถึงไดอะแกรมความสับสนของฉัน ในเอกสาร RST 7.5 -> Edge เรียกใช้ RST 5.5 -> เรียกระดับ TRAP -> เรียกใช้ขอบและเรียกใช้ระดับ (เพราะอะไรมันสร้างความแตกต่างหรือไม่) ลิงค์เอกสาร

6
โปรโตคอลการ จำกัด / การซิงโครไนซ์เทคนิคแบบอนุกรม
เนื่องจากการสื่อสารแบบซีเรียลแบบอะซิงโครนัสแพร่กระจายอย่างกว้างขวางในอุปกรณ์อิเล็กทรอนิกส์ทุกวันนี้ฉันเชื่อว่าพวกเราหลายคนได้พบคำถามเช่นนี้เป็นครั้งคราว พิจารณาอุปกรณ์อิเล็กทรอนิกส์Dและคอมพิวเตอร์PCที่เชื่อมต่อกับสายอนุกรม (RS-232 หรือคล้ายกัน) และจำเป็นต้องมีการแลกเปลี่ยนข้อมูลอย่างต่อเนื่อง Ie PCกำลังส่งเฟรมคำสั่งแต่ละเฟรมX msและDกำลังตอบกลับด้วยรายงานสถานะ / เฟรม telemetry แต่ละรายการY ms(สามารถส่งรายงานเป็นการตอบสนองต่อคำขอหรือเป็นอิสระ - ไม่สำคัญเลยที่นี่) กรอบการสื่อสารสามารถมีข้อมูลไบนารีใด ๆ โดยพลการ สมมติว่าเฟรมการสื่อสารเป็นแพ็กเก็ตที่มีความยาวคงที่ ปัญหา: เนื่องจากโปรโตคอลมีความต่อเนื่องด้านการรับอาจหลุดการซิงโครไนซ์หรือเพียงแค่ "เข้าร่วม" ที่อยู่ตรงกลางของเฟรมที่ส่งต่อเนื่องดังนั้นมันจะไม่รู้ว่าจุดเริ่มต้นของเฟรม (SOF) นั้นอยู่ที่ไหน ข้อมูลมีความหมายที่แตกต่างกันไปตามตำแหน่งของ SOF ข้อมูลที่ได้รับจะเสียหายและอาจเกิดขึ้นตลอดไป ทางออกที่ต้องการ รูปแบบการลด / ประสานที่เชื่อถือได้ในการตรวจจับ SOF ด้วยเวลาการกู้คืนสั้น ๆ (เช่นไม่ควรใช้เวลามากกว่านั้นพูด 1 เฟรมเพื่อซิงโครไนซ์อีกครั้ง) เทคนิคที่มีอยู่ฉันรู้ (และใช้บางส่วน) ของ: 1) ส่วนหัว / การตรวจสอบ - SOF เป็นค่าไบต์ที่กำหนดไว้ล่วงหน้า ตรวจสอบผลรวมในตอนท้ายของเฟรม จุดเด่น:เรียบง่าย …
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 */ …

2
SPI ปลอดภัยที่จะถูกขัดจังหวะหรือไม่?
ฉันกำลังเขียนไปยังการ์ด microSDจากภายในเฟิร์มแวร์ของฉัน แต่มันเป็นงานที่มีลำดับความสำคัญต่ำสุดดังนั้นจึงสามารถถูกขัดจังหวะโดยงานอื่น ๆ ในขณะที่อยู่ในระหว่างการอ่าน / เขียน ตอนนี้สมมติว่าฉันสื่อสารกับการ์ด microSD นี้โดยใช้ UART ปัญหาระหว่างการอ่านคือฮาร์ดแวร์ RX FIFOจะล้นดังนั้นความล่าช้าสูงสุดที่ฉันสามารถทำได้คือ (ขนาด FIFO ×ไบต์ / วินาที) และระหว่างการเขียนจะไม่มีปัญหาเพราะปลายอีกด้านจะรอจนกระทั่งฉัน ส่งอักขระต่อไป ตอนนี้ฉันใช้ SPI ได้อย่างไร สถานการณ์เหมือนกันสำหรับการเขียนมันไม่สำคัญและสำหรับการอ่านมันขึ้นอยู่กับขนาด SPI FIFO?

4
วิธีการนำส่วนที่สำคัญไปใช้กับ ARM Cortex A9
ฉันกำลังย้ายรหัสดั้งเดิมจากแกน ARM926 ไปยัง CortexA9 รหัสนี้เป็น baremetal และไม่รวมระบบปฏิบัติการหรือไลบรารีมาตรฐานที่กำหนดเองทั้งหมด ฉันมีความล้มเหลวที่ดูเหมือนจะเกี่ยวข้องกับสภาพการแข่งขันที่ควรได้รับการป้องกันโดยการแบ่งส่วนที่สำคัญของรหัส ฉันต้องการความคิดเห็นเกี่ยวกับวิธีการของฉันเพื่อดูว่าส่วนที่สำคัญของฉันอาจใช้ไม่ได้กับ CPU นี้หรือไม่ ฉันใช้ GCC ฉันสงสัยว่ามีข้อผิดพลาดเล็กน้อย นอกจากนี้มีไลบรารี opensource ที่มี primitives ประเภทนี้สำหรับ ARM (หรือแม้แต่ไลบราล็อก / เซมาฟอร์ไลบรารี่ที่มีน้ำหนักเบา) หรือไม่? #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 …
15 c  embedded  interrupts 

4
คำสั่ง AVR SEI
คำสั่ง AVR SEI ( http://www.atmel.com/webdoc/avrassembler/avrassembler.wb_SEI.html ) รอให้คำสั่งถัดไปเสร็จสิ้นก่อนที่จะเปิดใช้อินเทอร์รัปต์ ถ้าฉันใช้คำสั่งอื่นเพื่อตั้งค่าสถานะ I ใน SREG สิ่งนี้จะรอ 1 คำสั่งด้วยหรือไม่ กล่าวอีกนัยหนึ่ง: การรอคุณลักษณะของคำสั่ง SEI หรือการลงทะเบียนสถานะหรือไม่ ถ้ามันเป็นคุณสมบัติของคำสั่ง SEI ดังนั้นธงจะตั้งค่าในจุดใดในรอบที่เรียกใช้ SEI หรือด้วยคำสั่งต่อไป

6
หลีกเลี่ยงตัวแปรโกลบอลเมื่อใช้อินเตอร์รัปต์ในระบบฝังตัว
มีวิธีที่ดีในการใช้การสื่อสารระหว่าง ISR และส่วนที่เหลือของโปรแกรมสำหรับระบบฝังตัวที่หลีกเลี่ยงตัวแปรทั่วโลกหรือไม่? ดูเหมือนว่ารูปแบบทั่วไปคือการมีตัวแปรทั่วโลกซึ่งใช้ร่วมกันระหว่าง ISR และส่วนที่เหลือของโปรแกรมและใช้เป็นธง แต่การใช้ตัวแปรทั่วโลกนี้ขัดแย้งกับธัญพืชให้ฉัน ฉันได้รวมตัวอย่างง่ายๆโดยใช้ ISR สไตล์ avr-libc: volatile uint8_t flag; int main() { ... if (flag == 1) { ... } ... } ISR(...) { ... flag = 1; ... } ฉันไม่สามารถเห็นสิ่งที่เป็นปัญหาในการกำหนดขอบเขต ตัวแปรใดที่สามารถเข้าถึงได้โดยทั้ง ISR และส่วนที่เหลือของโปรแกรมจะต้องเป็นสากลโดยแท้จริง? แม้จะมีสิ่งนี้ฉันก็มักจะเห็นคนพูดถึงสิ่งต่าง ๆ ตามแนว "ตัวแปรทั่วโลกเป็นวิธีหนึ่งในการนำการสื่อสารระหว่าง ISRs และส่วนที่เหลือของโปรแกรม" (เน้นที่เหมือง) ซึ่งดูเหมือนจะบ่งบอกว่ามีวิธีอื่น ๆ ถ้ามีวิธีอื่นพวกมันคืออะไร?

4
คอนโทรลเลอร์ทราบได้อย่างไรว่าจะข้ามไปยัง ISR เมื่อใด
ฉันกำลังพูดถึงสิ่งต่าง ๆ ในระดับแกนกลาง เท่าที่ฉันเข้าใจแกนควบคุมเพียงแค่รันคำสั่งที่ดึงมาจากหน่วยความจำ (Fetch - Decode - Execute) เมื่อมีอินเทอร์รัปต์มาถึงแกนประมวลผล / ALU จะตัดสินใจข้ามไปยัง ISR อย่างไร เนื่องจากเราหรือผู้แปลไม่ได้เพิ่มคำสั่งใด ๆ ในการสำรวจสถานะขัดจังหวะ - แล้วจะทราบได้อย่างไรว่าต้องมีการขัดจังหวะ

5
อะไรคือความแตกต่างระหว่างการขัดจังหวะการเปลี่ยนแปลงและการขัดจังหวะภายนอกบน PIC
อะไรคือความแตกต่างของฟังก์ชั่นระหว่าง IOC และ EXT Interrupt บน PIC? ขณะนี้ฉันใช้ PIC12F1822 และนอกเหนือจากการตรวจสอบเลเยอร์เพิ่มเติมที่คุณต้องทำกับ IOC (เช่นพินที่ทำให้เกิดการขัดจังหวะ) ทั้งสองนั้นเหมือนกัน อะไรคือความแตกต่างในทางปฏิบัติถ้ามี? เมื่อไหร่ที่คุณจะใช้อันใดอันหนึ่ง?

1
Arduino และอินเตอร์รัปต์: วิธีที่รวดเร็วในการรับค่าพิน
ฉันใช้Arduino Unoแล้วตั้งค่าให้ทำงานกับการขัดจังหวะบนพินดิจิตอล 2, 3, 4 และ 5 ตามคำอธิบายที่1 ที่ฉันพบ 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) …

2
เปิดใช้งานอินเตอร์รัปต์ แต่ไม่มี ISR
ฉันอยากจะรู้ว่าจะเกิดอะไรขึ้นถ้าเปิดใช้งานอินเทอร์รัปต์ (ตัวอย่าง: Arbitration Lost Interrupt ใน CAN โมดูลของ LPC1778 ของ NXP) แต่ไม่มีการกำหนด ISR สำหรับการอินเตอร์รัป เมื่อการขัดจังหวะเกิดขึ้นฉันรู้ว่าการตั้งค่าการขัดจังหวะตามลำดับจะได้รับการตั้งค่า แต่เนื่องจากฉันไม่ได้กำหนด ISR ใด ๆ จะไม่มีที่อยู่ใด ๆ ของเวกเตอร์ออฟเซ็ตขัดจังหวะที่เก็บไว้สำหรับการควบคุมการถ่ายโอน เป็นรูทีนหลักและฉันสามารถรีเซ็ตการตั้งค่าอินเตอร์รัปต์โดยการสำรวจในรูทีนหลัก (นี่คือสิ่งที่ฉันกำลังคิด) จะมีเวลาแฝงใด ๆ เมื่อ CPU รู้ว่าไม่มี ISR ที่จะข้ามไปหรือไม่ ทางออกใด ๆ ที่อาจเกิดขึ้นสามารถช่วยฉันได้จริงๆ ขอบคุณ ปรับปรุง: ฉันเปิดใช้งาน CAN อินเตอร์รัปต์บน uC ของฉันได้ แต่ไม่ได้กำหนด ISR เมื่อฉันทำการทดสอบลูปแบ็คภายในรหัสที่ป้อนลงในลูปไม่สิ้นสุด นี่คือรหัส disassembly ของ infinite loop ที่ถูกเรียกใช้งานบน …

3
ฟังก์ชันขัดจังหวะซอฟต์แวร์เทียบกับ
หลังจากทำงานกับ MCU มาประมาณ 3 ปีฉันก็ไม่รู้ว่าการใช้อินเตอร์รัปต์ซอฟต์แวร์คืออะไร ฉันทำงานหลายอย่างด้วยSTM32และฉันไม่เคยใช้งานอินเตอร์รัปต์ซอฟต์แวร์ อันที่จริงนี่เป็นคำถามใหญ่สำหรับฉัน: ทำไมเมื่อเราสามารถใช้ฟังก์ชั่นง่าย ๆ ในการทำงานเราควรใช้ซอฟต์แวร์ขัดจังหวะหรือไม่ ซอฟต์แวร์ขัดจังหวะและฟังก์ชั่นต่างกันอย่างไร? ทุกครั้งที่คุณต้องการคุณสามารถเรียกฟังก์ชั่น (ที่คุณเขียนสำหรับงานของคุณ) ควรจะมีประโยชน์บางอย่างในการใช้ซอฟต์แวร์ขัดจังหวะแทนที่จะเป็นฟังก์ชั่นที่เรียบง่าย ฉันไม่แน่ใจ แต่ฉันคิดว่ามีประโยชน์สำหรับการขัดจังหวะโดยซอฟต์แวร์: คุณสามารถกำหนดลำดับความสำคัญสำหรับการขัดจังหวะซอฟต์แวร์จากนั้นคุณสามารถให้ความสำคัญกับการขัดจังหวะของซอฟต์แวร์เพื่อหลีกเลี่ยงการขัดจังหวะการทำงานของฮาร์ดแวร์
10 arm  stm32  interrupts 

3
การใช้งานที่ถูกต้องของการขัดจังหวะการเปลี่ยนพิน
ฉันกำลังพยายามใช้การขัดจังหวะการเปลี่ยนพินเพื่อตรวจจับปุ่มกด จนถึงตอนนี้ฉันไม่เคยทำงานกับการขัดจังหวะแบบนี้และมีปัญหาบางอย่างดังนั้นฉันจึงต้องการตรวจสอบให้แน่ใจว่านี่เป็นการใช้งานที่ถูกต้องหรือไม่ หากฉันได้รับแผ่นข้อมูลถูกต้องสิ่งต่อไปนี้จะต้องทำเพื่อใช้ขัดจังหวะการเปลี่ยนพิน: ตั้งค่า PIN ใดที่คุณต้องการควบคุมในการลงทะเบียน PCMSK เปิดใช้งานการลงทะเบียน PIN สำหรับการเปลี่ยนการควบคุมการขัดจังหวะพิน (PCICR) เปิดใช้งานการขัดจังหวะ ใช้เวกเตอร์ขัดจังหวะที่สอดคล้องกัน โครงการ: Simple Moodlamp, ควบคุมสีด้วยปุ่ม 4 ปุ่ม ติดตั้ง: Atmega168A-PU สวิตช์ปุ่มกดขนาดเล็ก 4 ปุ่ม MOSFETS เพื่อควบคุมไฟ LED RGB 3 วัตต์ของฉัน นี่คือรหัสที่ฉันใช้ซึ่งใช้งานไม่ได้ตามที่คาดไว้: #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 …

2
มีเหตุผลใดที่จะไม่ใช้ Timer0 บน AVR?
เป็นเพียงคำถามพื้นฐาน ... สำหรับ arduino / avr / ATMega328 ฉันพบตัวอย่างจำนวนมากโดยใช้ Timer1 (มีห้องสมุดทั้งหมดสำหรับมัน) แต่ไม่ค่อยมีใครใช้ Timer0 (หรือ Timer2) ตอนนี้ฉันรู้ว่าการใช้ตัวนับใด ๆ เหล่านี้เพื่อควบคุมวิธี ISR จะปิดการใช้งาน PWM บนหมุดที่เกี่ยวข้อง แต่มีเหตุผลเฉพาะที่ผู้คนดูเหมือนจะอยู่ห่างจาก Timer0 หรือไม่? มันใช้สำหรับอย่างอื่นภายในที่ไม่ควรยุ่งกับ? แอปพลิเคชันปัจจุบันของฉันใช้งาน Timer1 ได้ดีฉันแค่อยากรู้อยากเห็นหากฉันคิดถึงบางสิ่งเกี่ยวกับตัวจับเวลาที่ถูกละเลย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.