คอนโทรลเลอร์ทราบได้อย่างไรว่าจะข้ามไปยัง ISR เมื่อใด


12

ฉันกำลังพูดถึงสิ่งต่าง ๆ ในระดับแกนกลาง

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

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

คำตอบ:


13

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

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

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


1
บ่อยครั้งที่มันไม่ได้เป็นCALLคำสั่งทั่วไปเนื่องจากการขัดจังหวะถูกยกเลิกในวิธีที่แตกต่าง (เทียบRETกับRETI)
glglgl

1
ฉันสามารถสันนิษฐานได้อย่างปลอดภัยหรือไม่ว่าเมื่อฮาร์ดแวร์ตรวจจับอินเตอร์รัปต์ยืนยันสัญญาณแทนที่จะเป็นหน่วยความจำซีพียูจะได้รับคำสั่งจากที่อื่นเพื่อกระโดด ... เช่นสวิตช์อาจ ... เมื่อสวิตช์ดับการเรียกคำสั่งจากหน่วยความจำและเมื่อสวิตช์เปิด ดำเนินการคำสั่งนี้หรือไม่?
วอนด์

3

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


2

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

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


2

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

คอนโทรลเลอร์มีเวกเตอร์ขัดจังหวะ (หรือบางครั้งมากกว่าหนึ่งขึ้นอยู่กับประเภทของขัดจังหวะ) ซึ่งเป็นที่อยู่ที่เก็บ ISR ที่อยู่นี้จะเหมือนกันเสมอ - เป็นเหมือนเวกเตอร์รีเซ็ตที่เริ่มต้นโปรแกรม

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

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

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

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