ระบบฝังตัว - ขัดจังหวะ
การขัดจังหวะเป็นสัญญาณไปยังโปรเซสเซอร์ที่ปล่อยออกมาจากฮาร์ดแวร์หรือซอฟต์แวร์ซึ่งบ่งบอกถึงเหตุการณ์ที่ต้องดำเนินการทันที เมื่อใดก็ตามที่เกิดการขัดจังหวะขึ้นคอนโทรลเลอร์จะดำเนินการตามคำสั่งปัจจุบันให้เสร็จสิ้นและเริ่มการทำงานของไฟล์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 ไม่ว่าจะทำอะไรก็ตามและบังคับให้ข้ามไปที่ตารางเวกเตอร์ขัดจังหวะ