Presentation is loading. Please wait.

Presentation is loading. Please wait.

AVR Programming: Interrupts September 17, 2010. What are interrupts? An asynchronous signal indicating the need for an event to be handled A synchronous.

Similar presentations


Presentation on theme: "AVR Programming: Interrupts September 17, 2010. What are interrupts? An asynchronous signal indicating the need for an event to be handled A synchronous."— Presentation transcript:

1 AVR Programming: Interrupts September 17, 2010

2 What are interrupts? An asynchronous signal indicating the need for an event to be handled A synchronous event in software indicating the need for a change in execution Temporarily halts program execution to enter an interrupt service routine (similar to a function but with a few key differences) 2

3 Why interrupts? 3 Allows your program to wait for an event without blocking Allows you to respond to special events in a time sensitive manner Cleans up your behavior code from constant polling steps

4 What happens on an interrupt? Program state (register data, status flags, program counter etc.) is pushed to the stack The program counter jumps to a predefined memory address (interrupt vector) that contains one instruction : jmp $XXXX XXXX is the hex value of the address of the first line of the interrupt handler On return all state data (including program counter) is popped off the stack into registers again fully restoring the original program 4

5 What different interrupts exist? ATmega128 defines 35 vectors Various things from timers to serial to analog conversion Right now we’ll use external interrupts There are 8 of them Shown as INTn 5

6 How to enable these interrupts 6 Use SEI to enable all interrupt and CLI to disable all interrupts

7 7 How does this look in code? #include volatile char externalValue;//a value that can be updated externally to the behavior code int main(void){ int x; externalValue = 0; DDRC |= _BV(PC1) | _BV(PC5) | _BV(PC0) | _BV(PC4); DDRE &= ~_BV(PE7); EICRB |= _BV(ISC70);//any logical change triggers interrupt EIMSK |= _BV(INT7);//enable external interrupt 7 sei();//global interrupt enable while(1){ for(x = 0; x<3; x++){ if(externalValue){ PORTC &= ~(_BV(PC1) | _BV(PC5));//turn lights green } else{ PORTC &= ~(_BV(PC0) | _BV(PC4));//turn lights red } PORTC |= _BV(PC1) | _BV(PC5) | _BV(PC0) | _BV(PC4);//turn lights off } ISR(INT7_vect){ externalValue = (PINE>>7) & 0x01;//read pin E }

8 8 Stuff to try out Look at other interrupts if you want External interrupts can be triggered in software – Output values on the interrupt’s digital I/O port Figure out how to connect a push button to one of the interrupt pins Combine with what you’ve learned about DIO You should not need the dragonfly library

9 9 Help/More Info AVR Interrupts Reference: http://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html Datasheet: http://www.atmel.com/dyn/resources/prod_documents/doc2467.pdf


Download ppt "AVR Programming: Interrupts September 17, 2010. What are interrupts? An asynchronous signal indicating the need for an event to be handled A synchronous."

Similar presentations


Ads by Google