สิ่งที่เกี่ยวข้อง

วันศุกร์ที่ ๒๗ กรกฎาคม พ.ศ. ๒๕๕๐

ARM7TDMI Core - 9 Software Interrupt

9 Software Interrupt

คำสั่ง Software Interrupt จะทำให้เกิด Exception ขณะที่มันทำงาน ทำให้ Processor เข้าสู่ Supervisor mode และกระโดดเข้าไปที่ 0x00000008 ซึ่งก็เหมือนๆกับคำสั่งทั่วๆไปของ ARM ทำให้ SWI นั้นก็ต้องมี Prefix เช่นกัน ในการที่จะเข้ามายัง Software Interrupt ใดนั้นจะพิจารณาจากค่าที่ใช้กำหนดให้ทำงาน ซึ่งเรามักจะใช้ในการเข้ามาทำงานใน mode ที่เรากำหนดเองซึ่งแยกจาก User mode เพื่อป้องกันการทำงานที่อาจทำให้เกิดความเสียหายต่อระบบ คล้ายกับ System call ของ Operating System

….

คำสั่งสำหรับ Assembler:

SWI #3

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

switch( *(R14-4) & 0x00FFFFFF) // ให้ LR ย้อนกลับไป 4 byte ซึ่งเป็นตำแหน่งของคำสั่ง SWI

// จากนั้นก็ดึงเอาค่าที่ไม่ใช้งานเข้ามาพิจารณา

{

case (SWI-1) // 0 – 255 แต่เรียก 1 – 256 ทำให้ต้อง ลบหนึ่ง

ซึ่งบางทีอาจมีข้อแตกต่างขึ้นอยู่กับตัวแปลภาษาที่ใช้ด้วย ซึ่งอาจทำให้เราต้องเข้าไปจัดการเองหรือ ตัวแปลภาษานั้นอาจสามารถช่วยเข้ามาจัดการได้ก็ได้


ไม่มีความคิดเห็น:

ผู้สนับสนุน

จัดตามกลุ่ม