Interrupt Control Unit Lecturer: Reza Arjmandi Autumn 2015 Lecture 10, 11: Introduction Interrupt Concept, interrupt control unit and External Interrupt.

Slides:



Advertisements
Similar presentations
Awe sim.
Advertisements

معاونت درمان امور مامایی اردیبهشت 90. برای ثبت اطلاعات در برنامه نرم افزاری نظام مراقبت مرگ پریناتال ابتدا لازم است برنامه نرم افزار info-path وپرنیان.
Definition. قانون بیز P(b|a) = P(a|b)P(b)/P(a) P(b|a) = P(a|b)P(b)/P(a) این قانون برای استنتاج آماری استفاده می شود. این قانون برای استنتاج آماری استفاده.
Decision Tree.
مراحل مختلف اجرای يک برنامه
فایل پردازی در C File based Programming in C. انواع فایل متنی –سرعت بالا –حجم کمتر –امکان دسترسی تصادفی –حفظ امنیت داده ها دودویی (باینری) –امکان باز.
External & internal Interrupts. Interrupt Sources There are 21 different interrupts and each one has its own vector located in a predefined location at.
ARM Session , Spring Copyright © 2012 Mohammad Moallemi.
1 Network Address Translation (NAT). 2 Private Network شبکه خصوصی شبکه ای است که بطور مستقیم به اینترنت متصل نیست در یک شبکه خصوصی آدرس های IP به دلخواه.
Lesson four Grade three
How to installHow to use You must have a pejvak Shortcut in your computers Desktop: You must have a pejvak Shortcut in your computers Desktop: double.
1 بنام خدا زبان برنامه نویسی C (21814( Lecture 14 Structures.
به نام خدا برنامه سازی سمت سرور (php)
نوشتن كد برنامه در AVR STUDIO. شروع برنامه قسمت داده :.DSEG.ORG 0X60.DEF TEMP,R16.EQU LENGTH,10.SET KEY_PORT,PORTC.STRING:.BYTE 5.
فصل 4 پرتهای ورودی و خروجی. برای هر پورت سه ثبات 8 بیتی در منطقه رجیسترهای I/O وجود دارد که بعنوان مثال برای پورت A این ثبات ها عبارتند از:
Stepper Motor Configuration
Data Types Modifiers Base data type Size Sign signed int 2 B unsigned float 4 B short double 8 B long char 1 B.
Alphanumeric LCD Configuration
PORT(I/O) Configuration
Seven Segment Configuration Lecturer: Reza Arjmandi Autumn 2015 Lecture 5: Introduction 7Segment Configuration.
برای هر پورت سه آدرس در حافظهSRAM یا سه ثبات ورودی خروجی I/O 8 بیتی تعریف میشود که عبارتند از: 1- یک ثبات برای نوشتن و خواندن داده به نام PORTX (Port.
Lecturer: Reza Arjmandi Autumn 2015
Timer Counter 1 Lecturer: Reza Arjmandi Autumn 2015 Lecture 14, 15: Introduction Timer/Counter1 Registers, initialization.
تایمر در میکروکنترلرهای AVR. تایمرها در میکروکنترلرهای AVR تایمر در حقیقت یک شمارنده است که پالس ورودی را می شمارد. در صورتی که پالس ورودی کنتور از پالس.
Analog to Digital Converter(ADC) Lecturer: Reza Arjmandi Autumn 2015 Lecture 18: Introduction ADC Unit and initialization.
پیاده سازی کنترلر PC/104. Contents PC/104 پیاده سازی کنترلر HILتست 1.
Session 7,8.
[c.
تهیه و تنظیم: فاطمه قاسمی دانشگاه صنعتی شریف – پاییز 86
Session 6.
تمرین هفتم بسم الله الرحمن الرحیم درس یادگیری ماشین محمدعلی کیوان راد
نکات بسیار مهم در مورد دانشگاه تبریز
ویژگی های DHCP جلوگیری از Conflict سرعت بخشیدن به کارها مدیریت متمرکز
فصل دوم: نگاهی کلی به سیستم عامل.
بنام خدا زبان برنامه نویسی C (21814( Lecture 12 Selected Topics
SY800 router mode [AD-14-TB ].
اسلایدهای فصل سوم کتاب سیلبرشاتز دانشکده مهندسی کامپیوتر دانشگاه شریف
دانلود جدیدترین مقالات برق الکترونیک و کامپیوتر
آشنایی مقدماتی با نرم افزار Endnote X4
نکات بسیار مهم در مورد دانشگاه تبریز
آزمایشگاه پایگاه داده ها قیود در جداول یک پایگاه داده در SQL Server
چگونه بفهمیم آیا ژورنالی ISI است؟ ایمپکت فاکتور دارد یا خیر؟
دانشگاه علوم پزشکی شهید بهشتی
پيکره بندی تايمر / کانترها
Route configuration for 5400W ADSL Router
SSO Single Sign-on Systems
آشنایی با پایگاه داده mysql
Session 5.
آموزش کرک کردن نرم افزار ACTIVE HDL
مدار منطقی Logic Circuits
مدارهای منطقی فصل سوم - خصوصیات توابع سويیچی
Software configuration management
آشنایی مقدماتی با نرم افزار Endnote X4
آموزش نرم افزار EndNote
Lecturer: Reza Arjmandi Autumn 2015
شرایط مرزی (Boundary Conditions) در مدل سازی آب زیرزمینی
Bucket sort اكرم منوچهري زهرا منوچهري
وبلاگ جامع مهندسی برق و الکترونیک
راهنمای استفاده از ابزار Mailings در Ms Word
آشنایی مقدماتی با نرم افزار Endnote X4
بسم الله الرحمن الرحیم هرس درخت تصمیم Dr.vahidipour Zahra bayat
آشنایی مقدماتی با نرم افزار Endnote
کاربرد کامپیوتر در داروخانه
جستجوی منابع الکترونیک
به نام خدا Koha برنامه.
فصل ششم مدارهای ترتیبی.
Uniprocessor Scheduling
فصل 8 –Process and Deployment
kbkjlj/m/lkiubljj'pl;
طریقه ارسال اطلاعات به فیدا و دریافت شناسه فروشنده
Presentation transcript:

Interrupt Control Unit Lecturer: Reza Arjmandi Autumn 2015 Lecture 10, 11: Introduction Interrupt Concept, interrupt control unit and External Interrupt

AVR Microcontroller-General Structure AVR CPU BUS Flash Memory SRAM EEPROM Counter USART TWI ADC MCU Control and Timing I/O Ports Interface I/O Ports Interface Watchdog Timer SPI ISP Interrupt Unit PORTDPORTCPORTBPORTA Internal Calibrated Oscillator Crystal Oscillator ATMEGA32 Block Diagram: DataSheet Page4

Polling #include DDRD_Bit2=0; PORTD_Bit2=1;//enable internal pull-up resistor DDRA=0xFF; DDRB=0xFF; void main(void) { LCDinit();//initialize LCD while(1) { if(PIND_Bit2==0) { LCDstring(“Danger!!”); … } LCDstring(“PlayMusic); PORTB_Bit0=1; __delay_cycles(500000); PORTB_Bit1=1; __delay_cycles(500000); PORTB_Bit2=1; __delay_cycles(500000); PORTB_Bit3=1; } Polling while(PIND_Bit2!=0); ?

Interrupt #include void main(void) { LCDinit(); while(1) { LCDstring(“PlayMusic); PORTB_Bit0=1; __delay_cycles(500000); PORTB_Bit1=1; __delay_cycles(500000); PORTB_Bit2=1; __delay_cycles(500000); PORTB_Bit3=1; } __interrupt void Function(void) { … LCDstring(“Danger!!”); … } Clicked Interrupt Source ISR(Interrupt Service Routine) در زمان رخداد یک وقفه، برنامه ‌ ی در حال اجرا متوقف شده و زیر برنامه ‌ ی وقفه (ISR) شروع به اجرای برنامه ‌ ی خود میکند و پس از پایان زیر برنامه ‌ ی مورد نظر اجرای برنامه ‌ ی اصلی ادامه می یابد

Interrupt-Mechanism برنامه اصلی ادامه برنامه اصلی ISR وقفه بازگشت از وقفه

Interrupt-Stack Memory … … ROM(Flash) 0x0000 0x0001 0x0002 0x0003 0x0004 … 0xFFFF PC= #include void main(void) { LCDinit(); while(1) { LCDstring(“PlayMusic); PORTB_Bit0=1; __delay_cycles(500000); PORTB_Bit1=1; __delay_cycles(500000); PORTB_Bit2=1; __delay_cycles(500000); PORTB_Bit3=1; } __interrupt void Function(void) { … LCDstring(“Danger!!”); … } 0xFFF1 0xFFF2 0xFFF3 Interrupt Source Stack(In SRAM) IRQ Main ISR PC= 0x0003 PC= Interrupt Vector PC= CPU

Interrupt-Source Internall OR IRQ CPU Timer/ Counter ADC IRQ External منابع وقفه (Interrupt Sources): اتفاقاتی هستند که در صورت وقوع، به طور خودکار به اطلاع CPU می رسند، این منابع مشخص ومعین میباشند قبلا توسط سازنده میکرو کنترولر طراحی شده و کاربر آن را نمیتواند تغییر دهد بردار وقفه (Interrupt Vector): هنگام رخداد یک وقفه، آدرسی که در شمارنده برنامه قرار میگیرد را « بردار وقفه » میگویند. این آدرس، همان آدرس شروع ISR مربوط به برنامه ‌ ی وقفه است

Interrupt-Source شماره بردار آدرس منبع وقفهنام بردار وقفه در IAR توضیح 1$000RESETRESET_vect External Pin, Power-on Reset, Brown out Reset, Watch dog Reset And JTAG AVR Reset 2$002INT0INT0_vect External Interrupt Request 0 3$004INT1INT1_vect External Interrupt Request 1 4$006TIMER2 COMPTIMER2_COMP_vect Timer/Counter2 Compare Match 5$008TIMER 2 OVFTIMER2_OVF_vect Timer/Counter2 Overflow 6$00ATIMER1 CAPTTIMER1_CAPT_vect Timer/Counter1 Capture Event 7$00CTIMER1 COMPATIMER1_COMPA_vect Timer/Counter1 Compare Match A 8$00ETIMER1 COMPBTIMER1_COMPB_vect Timer/Counter1 Compare Match B 9$010TIMER1 OVFTIMER1_OVF_vect Timer/Counter1 Overflow 10$012TIMER0 OVFTIMER0_OVF_vect Timer/Counter0 Overflow 11$014SPI,STCSPI_STC_vect Serial Transfer Complete 12$016USART,RXCUSART_RXC_vect USART Rx Complete 13$018USART,UDREUSART_UDRE_vect USART Data Register Empty 14$01AUSART, TXCUSART_TXC_vect USART TX Complete 15$01CADCADC_vect ADC Conversion Complete 16$01EEEPROM ReadyEE_RDY_vect EEPROM Ready 17$020Analog ComparatorANA_COMP_vect Analog Comparator Interrupt 18$022TWITWI_vec Two-wire serial Interface 19$024INT2INT2_vect External Interrupt Request 2 20$026TIMER0 COMPTIMER0_COMP_vect Timer/Counter0 Compare Match 21$028SPM ReadySPM_RDY_vect Store Program Memory Ready Example: File: iom16.h #define RESET_vect (0x00) #define INT0_vect (0x04) #define INT1_vect (0x08) #define TIMER2_COMP_vect (0x0C) #define TIMER2_OVF_vect (0x10) #define TIMER1_CAPT_vect (0x14) #define TIMER1_COMPA_vect (0x18) … نکته ! در صورت درخواست همزمان دو یا چند وقفه ابتدا به اولویت بالاتر پاسخ داده میشود وپس از آن به بقیه وقفه ‌ ها بر حسب اولویت رسیدگی میشود. نکته ! در میکروکنترولرهای AVR منابع وقفه، با توجه به نوع میکروکنترولر متفاوت است. به عنوان نمونه در ATMEGA8 9 منبع وقفه و در ATMEGA16 21 منبع وقفه موجود است

Interrupt-Flag Bits بیت فعال ساز اختصاصی : برای فعال سازی هر یک از 21 منبع وقفه یک بیت اختصاصی در رجیستر های مربوطه وجود دارد بیت فعال ساز عمومی : در میکروکنترولرهای AVR یک بیت فعال سازی عمومی (Global Interrupt Enable) به نام i وجود دارد. i=0  تمام وقفه ها غیرفعال ( حتی اگر بیت فعال سازی اختصاصی شان فعال باشد ) i=1  تمامی وقفه ها میتوانند توسط بیت اختصاصی شان فعال شوند بیت i یک بیت مهم در برنامه نویسی وقفه میباشد و یک دستور اسمبلی خاص برای کار وتغییر با آن وجود داد : نکته ! وقتی CPU وارد ISR میشود، بصورت خودکار i=0 شده و بعد از انجام شدن آن ISR مجددا بصورت خودکار i=1 میشود #include … void main(void) { asm(“sei”); //sei: Set i=1 … asm(“cli”); //cli: clear i, i=0 } بیت Flag درخواست وقفه : به ازای هر منبع وقفه یک بیت Flag وجود دارد که، یک شدن این بیت به معنای رخ دادن آن وقفه است، و اگر آن وقفه فعال نباشد بیت Flag آن وقفه تا زمانی که پاک نشود یک باقی مانده و با فعال شدن بیت فعال ساز یک IRQ به CPU ارسال میشود و پردازنده ISR مربوط به آن وقفه را اجرا میکند و در ابتدای اجرای ISR بیت Flag صفر میشود. یا SREG_Bit7=1; //Enable Global Interrupt SREG_Bit7=0; //Disable Global Interrupt SREG_I=1;

Interrupt-Programming مراحل برنامه نویسی یک وقفه بصورت زیر میباشد : 1- فعال کردن وقفه مورد نظر، بوسیله 1 کردن بیت فعال ساز اختصاصی آن وقفه (Interrupt Enable) 2- فعال کردن بیت فعال سازی عمومی وقفه ‌ ها (Global Interrupt Enable) بوسیله دستور asm(“sei”) 3- نوشتن برنامه ‌ ی وقفه مربوطه (ISR) در محل بردار وقفه مربوطه (Interrupt vector) به صورت زیر : #pragma vector = نام بردار وقفه __interrupt void نام تابع (void) { دستورات زیر برنامه ‌ ی وقفه }

External Interrupt OR IRQ نکته ! در هنگام استفاده از پایه ‌ های میکرو به عنوان وقفه خارجی، حتما باید پایه را به صورت ورودی تعریف کنیم، وگرنه هر تغییری در سطح منطقی پایه (High-Low) به عنوان یک درخواست وقفه در نظر گرفته میشود

External Interrupt-Register بیت فعال سازی اختصاصی وقفه ‌ های خارجی INT0: بیت فعال ساز وقفه خارجی صفر INT1: بیت فعال سازی وقفه خارجی یک INT2: بیت فعال ساز وقفه خارجی دو Example: #include void main(void) { GICR_Bit5=1; //enable external interrupt2 … } GICR: General Interrupt Control Register

External Interrupt-Register بیت تنظیمات مربوط به نحوه تریگر شدن وقفه های خارجی MCUCR: MCU Control Register INT0INT1 ISC01ISC00 شکل تریگر نوع تریگر شدن وقفه صفر Trigger 00 سطح منطقی صفر در پین INT0 Low level 01 هر تغییری در سطح منطقی پین INT0 Toggle 10 لبه ‌ ی پایین رونده در پین INT0 Falling edge 11 لبه ‌ ی بالا رونده در پین INT0 Rising edge OR ISC11ISC10 شکل تریگر نوع تریگر شدن وقفه یک Trigger 00 سطح منطقی صفر در پین INT1 Low level 01 هر تغییری در سطح منطقی پین INT1 Toggle 10 لبه ‌ ی پایین رونده در پین INT1 Falling edge 11 لبه ‌ ی بالا رونده در پین INT1 Rising edge OR

Example: #include void main(void) { GICR_INT2=1; //enable external interrupt2 MCUCSR_ISC2=1; //Trigger interrupt2 on rising edge } External Interrupt-Register بیت تنظیمات مربوط به نحوه تریگر شدن وقفه های خارجی MCUCSR: MCU Control AND Status Register INT2 ISC2 شکل تریگر نوع تریگر شدن وقفه دو Trigger 0 لبه ‌ ی پایین رونده در پین INT2 Falling edge 1 لبه ‌ ی بالا رونده در پین INT2 Rising edge

External Interrupt-Example1 #include void main(void) { DDRA_Bit2=1; DDRD_Bit2=0; PORTD_Bit2=1; GICR|=(1<<INT0); //Enable External interrupt0 MCUCR|=(1<<ISC01);//Trigger on falling edge asm("sei"); while(1); } #pragma vector=INT0_vect __interrupt void LED(void) { for(unsigned char i=0;i<2;i++) { PORTA_Bit2=1; __delay_cycles(200000); PORTA_Bit2=0; __delay_cycles(200000); } برنامه ‌ ای بنویسید که بوسیله وقفه خارجی صفر، LED روی بیت 2 از پورت A دو بار چشمک بزند و سپس خاموش شود، تحریک وقفه با لبه ‌ ی پایین رونده صورت بگیرد ( مشاهده میشود : به محض فشرده شدن کلید، برنامه وقفه شروع به کار کند )

External Interrupt-Example2 برنامه ‌ ای بنویسید که بوسیله وقفه خارجی صفر، LED روی بیت 2 از پورت A دو بار چشمک بزند و سپس خاموش شود، تحریک وقفه با لبه ‌ ی بالا رونده صورت بگیرد ( مشاهده میشود : هنگامی که کلید فشرده میشود، تا زمانی که کلید رها نشود برنامه وقفه شروع به کار نمیکند ) #include void main(void) { DDRA_Bit2=1; DDRD_Bit2=0; PORTD_Bit2=1; GICR|=(1<<INT0); //Enable External interrupt0 MCUCR|=(1<<ISC01)|(1<<ISC00); //Trigger on rising edge asm("sei"); while(1); } #pragma vector=INT0_vect __interrupt void LED(void) { for(unsigned char i=0;i<2;i++) { PORTA_Bit2=1; __delay_cycles(200000); PORTA_Bit2=0; __delay_cycles(200000); }

External Interrupt-Example3 برنامه ‌ ای بنویسید که بوسیله وقفه خارجی صفر، LED روی بیت 2 از پورت A دو بار چشمک بزند و سپس خاموش شود، تحریک وقفه با هر دو سطح منطقی صورت گیرد ( مشاهده میشود : هنگامی که کلید فشرده شده و نگه داشته میشود، برنامه وقفه شروع به کار میکند و پس از اینکه کلید رها میشود، مجددا برنامه وقفه شروع به کار میکند ) #include void main(void) { DDRA_Bit2=1; DDRD_Bit2=0; PORTD_Bit2=1; GICR|=(1<<INT0); //Enable External interrupt0 MCUCR|=(1<<ISC00);//Trigger on Toggle asm("sei"); while(1); } #pragma vector=INT0_vect __interrupt void LED(void) { for(unsigned char i=0;i<2;i++) { PORTA_Bit2=1; __delay_cycles(200000); PORTA_Bit2=0; __delay_cycles(200000); }

External Interrupt-Example4 مدار آشکار ساز عبور از صفر #include void main(void) { DDRA=0xFF; DDRD&=~(1<<PD2); PORTD|=(1<<PD2); GICR|=(1<<INT0); MCUCR|=(1<<ISC01); //falling edge asm("sei"); while(1); } #pragma vector=INT0_vect __interrupt void zero(void) { for(unsigned char i=0;i<=10;i++) { PORTA=0x01; __delay_cycles(1000); PORTA=0x00; }

Interrupt-Example5 ایجاد وقفه های تودرتو با ورود برنامه به ISR ، همزمان بیت فعال ساز عمومی i پاک شده و تا خروج آن صفر باقی میماند در نتیجه امکان پاسخ دهی به وقفه جدید در حین اجرای ISR وجود ندارد. در این وضعیت، نرم افزار میتواند بیت i را یک کند و درنتیجه وقفه تودرتو ایجاد میشود #include void main(void) { DDRD&=~(1<<PD2)|(1<<PD3); PORTD|=(1<<PD2)|(1<<PD3); DDRA|=(1<<PA2)|(1<<PA4); GICR|=(1<<INT0)|(1<<INT1); MCUCR|=(1<<ISC01)|(1<<ISC11); asm("sei"); while(1); } #pragma vector=INT0_vect __interrupt void function1(void) { asm("sei"); for(unsigned char i=0;i<3;i++) { PORTA_Bit2=1; __delay_cycles( ); PORTA_Bit2=0; __delay_cycles( ); } #pragma vector=INT1_vect __interrupt void Function2(void) { for(unsigned char i=0;i<=3;i++) { PORTA_Bit4=1; __delay_cycles(200000); PORTA_Bit4=0; __delay_cycles(200000); }

Interrupt-Example6 پروژه کنترل موتور Stepper: کنترل جهت چرخش و سرعت پله ‌ ای با استفاده از وقفه

Interrupt-Example6 #include void delay_ms(unsigned int MS); void CW_Rotate(); void CCW_Rotate(); unsigned char i,j; unsigned int SpeedDelay =100; enum RotateDirection{CW,CCW}; RotateDirection RD=CCW; void main(void) { DDRA=0xFF; DDRD&=~(1<<PD2)|(1<<PD3); //set PD2 and PD3 as input PORTD|=(1<<PD2)|(1<<PD3); //enable internal pull-up resistor DDRB_Bit2=0; //set PB2 as input PORTB_Bit2=1; //enable internal pull-up resistor GICR|=(1<<INT0)|(1<<INT1)|(1<<INT2); //Enable Interrupt 0,1,2 MCUCR|=(1<<ISC01)|(1<<ISC11); MCUCSR&=~(1<<ISC2); asm("sei"); while(1) { switch(RD) { case(CW): CW_Rotate(); break; case(CCW): CCW_Rotate(); break; } #pragma vector=INT0_vect __interrupt void SpeedDown(void) { SpeedDelay+=10; } #pragma vector=INT1_vect __interrupt void SpeedUp(void) { if(SpeedDelay>10) SpeedDelay-=10; } #pragma vector=INT2_vect __interrupt void ChangeDirection(void) { if(RD==CW) RD=CCW; else RD=CW; }

Contact us