واحد AIC
میکروکنترلرهای ARM شرکت ATMEL
خانواده AT91SAM7Sxxx
تعریف اصطلاحات
AIC = Advanced Interrupt Controller
واحد پیشرفته مدیریت وقفه
معمولاً تمام سیستم های ریزپردازنده ای دارای واحد کنترل وقفه هستند.
وظیفه واحد مدیریت وقفه اخذ درخواست های وقفه از همه واحدهای میکرو و ارسال درخواست وقفه به CPU است. در پردازنده های ARM این درخواست ها از دو مسیر (nIRQ و nFIQ) به CPU ارسال می شود.
FIQ = Fast Interrupt Request (بالاترین اولویت را دارد)
IRQ = Interrupt Request
ثبات های موجود در واحد مدیریت وقفه معمولاً برای تعیین اولویت (priority) برای هر منبع وقفه و ماسک وقفه ها به کار می روند.
Interrupt Controller
SoC (System-on-a-Chip)
ARM
CPU
External Inputs (Keyboard)
Serial Port (UART)
Timers
Watchdog Timer
Wireless NIC (Network I/F Card)
…
Interrupt Controller
…
AIC in AT91
Source Vector Register 0 (0x080)
Source Vector Register 1 (0x084)
Source Vector Register 2 (0x088)
Source Vector Register 29 (0x0F0)
Source Vector Register 30 (0x0F8)
Source Vector Register 31 (0x0FC)
…..
SMR 0 (0x000)
SMR 1 (0x004)
SMR 2 (0x008)
SMR 29 (0x074)
SMR 30 (0x078)
SMR 31 (0x07C)
…..
IRQ Vector Reg (0x100)
FIQ Vector Reg (0x104)
US0_IRQ
US1_IRQ
TC0_IRQ
TC1_IRQ
TC2_IRQ
IRQ0_IRQ
IRQ1_IRQ
IRQ2_IRQ
nIRQ
nFIQ
Interrupt Enable Reg (0x120)
End of Interrupt Reg (0x130)
Set Priority
Base Address: 0xFFFF_F000
AIC
واحد AIC دارای ویژگی های زیر است:
اولویت بندی 8 سطحی
قابلیت مستقل فعال شدن وقفه توسط ماسک وقفه
کنترلر برداری وقفه
مدیریت 32 منبع وقفه
هدف از طراحی سخت افزاری این واحد کم کردن بار و حجم برنامه و کاهش زمان Interrupt Latency (تاخیر پاسخ به وقفه) طراحی شده است.
نکته جالب این است که هرگاه وقفه ای با اولویت بالاتر درخواست شود، حتی اگر در حال رسیدگی و اجرای وقفه ای با اولویت پایین تر باشیم، به سراغ رسیدگی به وقفه با اولویت بالاتر می رود.
AIC
منابع وقفه داخلی را می توان حساس به لبه بالا رونده یا حساس به سطح بالا تعریف کرد.
منابع وقفه خارجی را می توان حساس به لبه (بالا یا پایین رونده) یا حساس به سطح (بالا یا پایین) تعریف کرد.
AIC
مسیرهای ورودی و خروجی: پین های FIQ، IRQ0 و IRQ1 با واحد PIO مشترک هستند. پس در صورت استفاده باید به مد مربوطه نسبت داده شوند.
PMC: واحد AIC به صورت مداوم با کلاک تغذیه می شوند و واحد PMC هیچ کنترلی بر روی آن ندارد.
منابع وقفه
منابع وقفه:
منبع وقفه صفرم تنها پین FIQ است.
منبع وقفه یکم وقفه سیستم (SYS) است مانند RTT، PMC، PIT، MC
منبع وقفه دوم الی سی و یک مربوط به وقفه ادوات جانبی است.
از این به بعد منابع وقفه را با نام های FIQ، SYS، PID2 الی PID31 می شناسیم.
منابع وقفه خارجی می توانند به صورت مستقیم به پین های FIQ، IRQ0 یا IRQ1 متصل شوند یا از طریق PIO.
مود منابع وقفه
واحد AIC می تواند به صورت مستقل هر منبع وقفه را برنامه ریزی نماید.
SRCTYPE (AIC_SMRx) x=0..31
AIC_SMR (Source Mode Register)
فعال سازی منابع وقفه
هر منبع وقفه (شامل FIQ الی PID31) را می توان فعال یا غیرفعال کرد.
FIQ, SYS, PIDx bits (AIC_IECR) = 1 (enable)
FIQ, SYS, PIDx bits (AIC_IDCR) = 1 (disable)
FIQ, SYS, PIDx bits (AIC_IMR) = 0 (disable), 1 (enable)
AIC_IECR (Interrupt Enable Command Register)
AIC_IDCR (Interrupt Disable Command Register)
SET و CLEAR نمودن منابع وقفه
تمامی منابع وقفه که حساس به لبه هستند را می توان به صورت دستی یک یا صفر نمود.
روی حساس به سطح اثری ندارد.
FIQ, SYS, PIDx bits (AIC_ISCR) = 1 (set)
FIQ, SYS, PIDx bits (AIC_ICCR) = 1 (clear)
به منظور تست اتوماتیک یا اشکال زدایی نرم افزاری
شرایط و وضعیت وقفه
وقفه داخلی
وقفه خارجی
شرایط و وضعیت وقفه
AIC_IPR: فعالیت واقعی منابع را صرفنظر از ماسک شده یا نشده نشان می دهد.
AIC_ISR: نشان دهنده شماره شناسایی منبع وقغه در جریان است (IRQID)
سوالی هست؟؟؟