ระบบฝังตัว - ขัดจังหวะ

การขัดจังหวะเป็นสัญญาณไปยังโปรเซสเซอร์ที่ปล่อยออกมาจากฮาร์ดแวร์หรือซอฟต์แวร์ซึ่งบ่งบอกถึงเหตุการณ์ที่ต้องดำเนินการทันที เมื่อใดก็ตามที่เกิดการขัดจังหวะขึ้นคอนโทรลเลอร์จะดำเนินการตามคำสั่งปัจจุบันให้เสร็จสิ้นและเริ่มการทำงานของไฟล์Interrupt Service Routine (ISR) หรือ Interrupt Handler. ISR จะบอกโปรเซสเซอร์หรือคอนโทรลเลอร์ว่าต้องทำอย่างไรเมื่อเกิดการขัดจังหวะ การขัดจังหวะอาจเป็นได้ทั้งการขัดจังหวะฮาร์ดแวร์หรือการขัดจังหวะซอฟต์แวร์

ฮาร์ดแวร์ขัดจังหวะ

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

ซอฟต์แวร์ขัดจังหวะ

การขัดจังหวะของซอฟต์แวร์เกิดจากเงื่อนไขพิเศษหรือคำสั่งพิเศษในชุดคำสั่งซึ่งทำให้เกิดการขัดจังหวะเมื่อดำเนินการโดยโปรเซสเซอร์ ตัวอย่างเช่นหากหน่วยตรรกะทางคณิตศาสตร์ของโปรเซสเซอร์รันคำสั่งเพื่อหารตัวเลขด้วยศูนย์เพื่อทำให้เกิดข้อยกเว้นแบบหารด้วยศูนย์ซึ่งทำให้คอมพิวเตอร์ละทิ้งการคำนวณหรือแสดงข้อความแสดงข้อผิดพลาด คำแนะนำการขัดจังหวะซอฟต์แวร์ทำงานคล้ายกับการเรียกรูทีนย่อย

Polling คืออะไร?

สถานะของการตรวจสอบอย่างต่อเนื่องเรียกว่า polling. ไมโครคอนโทรลเลอร์คอยตรวจสอบสถานะของอุปกรณ์อื่น ๆ และในขณะที่ดำเนินการดังกล่าวไม่มีการดำเนินการอื่นใดและใช้เวลาในการประมวลผลทั้งหมดในการตรวจสอบ ปัญหานี้สามารถแก้ไขได้โดยใช้การขัดจังหวะ

ในวิธีการขัดจังหวะตัวควบคุมจะตอบสนองเฉพาะเมื่อเกิดการขัดจังหวะ ดังนั้นคอนโทรลเลอร์จึงไม่จำเป็นต้องตรวจสอบสถานะ (แฟล็กสัญญาณ ฯลฯ ) ของอุปกรณ์ที่เชื่อมต่อและในตัว

ขัดจังหวะ v / s การสำรวจ

นี่คือการเปรียบเทียบที่แยกความแตกต่างของการขัดจังหวะจากการสำรวจ -

ขัดจังหวะ การสำรวจความคิดเห็น
การขัดจังหวะก็เหมือนกับไฟล์ shopkeeper. หากมีใครต้องการบริการหรือผลิตภัณฑ์เขาก็ไปหาเขาและแสดงความเห็นถึงความต้องการของเขา ในกรณีที่มีการขัดจังหวะเมื่อได้รับแฟล็กหรือสัญญาณจะแจ้งให้คอนโทรลเลอร์ทราบว่าจำเป็นต้องได้รับการซ่อมบำรุง วิธีการสำรวจความคิดเห็นก็เหมือนกับไฟล์ salesperson. พนักงานขายเดินจากประตูหนึ่งไปอีกประตูหนึ่งขณะขอซื้อผลิตภัณฑ์หรือบริการ ในทำนองเดียวกันคอนโทรลเลอร์จะคอยตรวจสอบแฟล็กหรือสัญญาณทีละรายการสำหรับอุปกรณ์ทั้งหมดและให้บริการกับส่วนประกอบใดก็ตามที่ต้องการบริการ

ขัดจังหวะบริการประจำ

สำหรับการขัดจังหวะทุกครั้งจะต้องมีรูทีนบริการขัดจังหวะ (ISR) หรือ interrupt handler. เมื่อเกิดการขัดจังหวะไมโครคอนโทรลเลอร์จะรันรูทีนบริการขัดจังหวะ สำหรับการขัดจังหวะทุกครั้งจะมีตำแหน่งคงที่ในหน่วยความจำที่เก็บแอดเดรสของรูทีนบริการขัดจังหวะ ISR ตารางตำแหน่งหน่วยความจำที่ตั้งไว้เพื่อเก็บแอดเดรสของ ISR เรียกว่าเป็น Interrupt Vector Table

ตารางเวกเตอร์ขัดจังหวะ

มีการขัดจังหวะหกรายการรวมถึง RESET ใน 8051

ขัดจังหวะ ตำแหน่ง ROM (Hex) พิน
ขัดจังหวะ ตำแหน่ง ROM (HEX)
Serial COM (RI และ TI) 0023
ตัวจับเวลา 1 ขัดจังหวะ (TF1) 001B
HW ภายนอกขัดจังหวะ 1 (INT1) 0013 P3.3 (13)
HW ภายนอกขัดจังหวะ 0 (INT0) 0003 P3.2 (12)
จับเวลา 0 (TF0) 000B
รีเซ็ต 0000 9
  • เมื่อเปิดใช้งานพินรีเซ็ต 8051 จะข้ามไปยังตำแหน่งแอดเดรส 0000 นี่คือการรีเซ็ตการเปิดเครื่อง

  • การขัดจังหวะสองรายการถูกตั้งค่าไว้สำหรับตัวจับเวลา: หนึ่งตัวสำหรับตัวจับเวลา 0 และอีกตัวสำหรับตัวจับเวลา 1 ตำแหน่งของหน่วยความจำคือ 000BH และ 001BH ตามลำดับในตารางเวกเตอร์ขัดจังหวะ

  • อินเตอร์รัปต์สองรายการถูกตั้งค่าไว้สำหรับการขัดจังหวะภายนอกของฮาร์ดแวร์ หมายเลขพิน 12 และหมายเลขพิน 13 ในพอร์ต 3 ใช้สำหรับการขัดจังหวะฮาร์ดแวร์ภายนอก INT0 และ INT1 ตามลำดับ ตำแหน่งหน่วยความจำคือ 0003H และ 0013H ตามลำดับในตารางเวกเตอร์ขัดจังหวะ

  • การสื่อสารแบบอนุกรมมีการขัดจังหวะเดียวที่เป็นของทั้งรับและส่ง ตำแหน่งหน่วยความจำ 0023H เป็นของการขัดจังหวะนี้

ขั้นตอนในการดำเนินการขัดจังหวะ

เมื่อการขัดจังหวะทำงานไมโครคอนโทรลเลอร์จะดำเนินการตามขั้นตอนต่อไปนี้ -

  • ไมโครคอนโทรลเลอร์จะปิดคำสั่งที่กำลังดำเนินการอยู่และบันทึกที่อยู่ของคำสั่งถัดไป (PC) บนสแต็ก

  • นอกจากนี้ยังบันทึกสถานะปัจจุบันของอินเทอร์รัปต์ทั้งหมดภายใน (กล่าวคือไม่ใช่บนสแต็ก)

  • มันข้ามไปยังตำแหน่งหน่วยความจำของตารางเวกเตอร์ขัดจังหวะที่เก็บแอดเดรสของรูทีนบริการขัดจังหวะ

  • ไมโครคอนโทรลเลอร์ได้รับที่อยู่ของ ISR จากตารางเวกเตอร์ขัดจังหวะและกระโดดไปที่มัน เริ่มต้นเพื่อเรียกใช้รูทีนย่อย interrupt service ซึ่งก็คือ RETI (return from interrupt)

  • เมื่อดำเนินการตามคำสั่ง RETI ไมโครคอนโทรลเลอร์จะกลับไปยังตำแหน่งที่ถูกขัดจังหวะ ขั้นแรกจะได้รับที่อยู่ตัวนับโปรแกรม (PC) จากสแต็กโดยการเปิดไบต์บนสุดของสแต็กลงในพีซี จากนั้นจะเริ่มดำเนินการจากที่อยู่นั้น

Edge Triggering เทียบกับ Level Triggering

โมดูลอินเทอร์รัปต์มีสองประเภทคือระดับทริกเกอร์หรือขอบทริกเกอร์

ระดับทริกเกอร์ Edge Triggered
โมดูลอินเทอร์รัปต์ระดับทริกเกอร์จะสร้างอินเทอร์รัปต์เสมอเมื่อใดก็ตามที่ยืนยันระดับของอินเทอร์รัปต์ซอร์ส โมดูลอินเทอร์รัปต์ที่ถูกทริกเกอร์ด้วยขอบจะสร้างการขัดจังหวะเฉพาะเมื่อตรวจพบขอบที่ยืนยันของแหล่งสัญญาณขัดจังหวะ ขอบจะถูกตรวจพบเมื่อระดับแหล่งสัญญาณขัดจังหวะเปลี่ยนไปจริงๆ นอกจากนี้ยังสามารถตรวจจับได้โดยการสุ่มตัวอย่างเป็นระยะและตรวจจับระดับที่ยืนยันได้เมื่อตัวอย่างก่อนหน้านี้ไม่ได้รับการยืนยัน
หากยังคงยืนยันแหล่งที่มาของการขัดจังหวะเมื่อตัวจัดการการขัดจังหวะของเฟิร์มแวร์จัดการการขัดจังหวะโมดูลขัดจังหวะจะสร้างการขัดจังหวะใหม่ทำให้ตัวจัดการขัดจังหวะถูกเรียกอีก โมดูลอินเทอร์รัปต์ที่ทริกเกอร์ Edge สามารถดำเนินการได้ทันทีไม่ว่าแหล่งสัญญาณขัดจังหวะจะทำงานอย่างไร
การขัดจังหวะระดับทริกเกอร์เป็นเรื่องยุ่งยากสำหรับเฟิร์มแวร์ การขัดจังหวะแบบ Edge-trigger ทำให้ความซับซ้อนของโค้ดของเฟิร์มแวร์ต่ำลดจำนวนเงื่อนไขสำหรับเฟิร์มแวร์และให้ความยืดหยุ่นมากขึ้นเมื่อมีการจัดการการขัดจังหวะ

การเปิดใช้งานและปิดใช้งานการขัดจังหวะ

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

การลงทะเบียน IE (interrupt enable) มีหน้าที่ในการเปิดใช้งานและปิดใช้งานการขัดจังหวะ IE คือการลงทะเบียน bitaddressable

ขัดจังหวะเปิดใช้งานการลงทะเบียน

EA - ET2 ES ET1 EX1 ET0 EX0
  • EA - เปิด / ปิดการใช้งานทั่วโลก

  • - - ไม่ได้กำหนด

  • ET2 - เปิดใช้งานตัวจับเวลา 2 ขัดจังหวะ

  • ES - เปิดใช้งานการขัดจังหวะพอร์ตอนุกรม

  • ET1 - เปิดใช้งานตัวจับเวลา 1 ขัดจังหวะ

  • EX1 - เปิดใช้งานการขัดจังหวะภายนอก 1

  • ET0 - เปิดใช้งานตัวจับเวลา 0 ขัดจังหวะ

  • EX0 - เปิดใช้งานอินเตอร์รัปต์ 0 ภายนอก

ในการเปิดใช้งานการขัดจังหวะเราทำตามขั้นตอนต่อไปนี้ -

  • บิต D7 ของทะเบียน IE (EA) ต้องสูงเพื่อให้การลงทะเบียนส่วนที่เหลือมีผล

  • หาก EA = 1 อินเทอร์รัปต์จะเปิดใช้งานและจะได้รับการตอบสนองหากบิตที่เกี่ยวข้องใน IE มีค่าสูง หาก EA = 0 จะไม่มีการขัดจังหวะตอบสนองแม้ว่าพินที่เกี่ยวข้องในทะเบียน IE จะสูงก็ตาม

Interrupt Priority ใน 8051

เราสามารถปรับเปลี่ยนลำดับความสำคัญของการขัดจังหวะได้โดยกำหนดลำดับความสำคัญที่สูงกว่าให้กับการขัดจังหวะอันใดอันหนึ่ง สิ่งนี้ทำได้โดยการเขียนโปรแกรมลงทะเบียนที่เรียกว่าIP (ขัดจังหวะลำดับความสำคัญ)

รูปต่อไปนี้แสดงบิตของการลงทะเบียน IP เมื่อรีเซ็ตการลงทะเบียน IP จะมี 0 ทั้งหมด เพื่อให้ลำดับความสำคัญสูงกว่ากับการขัดจังหวะใด ๆ เราทำให้บิตที่เกี่ยวข้องในทะเบียน IP สูง

- - - - PT1 PX1 PT0 PX0

- IP.7 ไม่ได้ดำเนินการ.
- IP.6 ไม่ได้ดำเนินการ.
- IP 5 ไม่ได้ดำเนินการ.
- IP.4 ไม่ได้ดำเนินการ.
PT1 IP.3 กำหนดระดับลำดับความสำคัญของการขัดจังหวะตัวจับเวลา 1
PX1 IP.2 กำหนดระดับความสำคัญภายนอก Interrupt 1
PT0 IP.1 กำหนดระดับลำดับความสำคัญของการขัดจังหวะตัวจับเวลา 0
PX0 IP.0 กำหนดระดับความสำคัญภายนอก Interrupt 0

ขัดจังหวะภายใน Interrupt

จะเกิดอะไรขึ้นถ้า 8051 เรียกใช้ ISR ที่เป็นของอินเทอร์รัปต์และอีกอันหนึ่งใช้งานได้ ในกรณีเช่นนี้การขัดจังหวะที่มีลำดับความสำคัญสูงสามารถขัดจังหวะการขัดจังหวะที่มีลำดับความสำคัญต่ำได้ นี้เรียกว่าinterrupt inside interrupt. ใน 8051 การขัดจังหวะที่มีลำดับความสำคัญต่ำอาจถูกขัดจังหวะด้วยการขัดจังหวะที่มีลำดับความสำคัญสูง แต่จะไม่ถูกขัดจังหวะโดยการขัดจังหวะที่มีลำดับความสำคัญต่ำอื่น

การทริกเกอร์การขัดจังหวะโดยซอฟต์แวร์

มีหลายครั้งที่เราจำเป็นต้องทดสอบ ISR ด้วยวิธีการจำลอง สามารถทำได้ด้วยคำแนะนำง่ายๆในการตั้งค่าอินเตอร์รัปต์ให้สูงและทำให้ 8051 ข้ามไปที่ตารางเวกเตอร์ขัดจังหวะ ตัวอย่างเช่นตั้งค่าบิต IE เป็น 1 สำหรับตัวจับเวลา 1 คำสั่งSETB TF1 จะขัดจังหวะ 8051 ไม่ว่าจะทำอะไรก็ตามและบังคับให้ข้ามไปที่ตารางเวกเตอร์ขัดจังหวะ