Gast
#301239
Hallo, Wie kann man den Eingang für ein Unterprogramm von Interrupt mit C schreiben? vielen Dank! Hua
|
Anzeige
|
Eingang für Interrupt_Unterprogramm
Gast
#301239
Hallo, Wie kann man den Eingang für ein Unterprogramm von Interrupt mit C schreiben? vielen Dank! Hua Je nach dem wodurch der Interrupt ausgelöst wurde, für ADC z.B.:
ISR(ADC_vect){} nachzulesen in der AVR-libc Modules.
Gast
#301241
Vielen Dank! Jetzt benutze ich Atmega8. Die Interrupt Vector No. ist 3, Programm Addresse ist 0x002. Wie kann ich meine Interrupt_Programm mit diese Interrupt Vector Verbindung machen? ISR(INT1_vect){}
Gast
#301243
Entschuldigung ich bin eine Anfangin. Welche Headdatei soll ich include? vielen vielen Dank! #include <avr/interrupt.h> #include <avr/io.h>
Gast
#301245
ISR(INT1_vect)
{
USART_TransmitString(" externe Interrupt happend ", 27);
return;
}
int main(void)
{
USART_Init(9600);
SREG = 0x80;
MCUCR = (1<<ISC11) | (1<<ISC10);
GICR = (1<<INT1);
for(;;);
}
Bei mir funktioniert noch nicht.
Wenn ein Interrupt happend, kann ich keine Ergebnisse bekommen. Welche
Fehler habe ich gemacht?
Vielen Dank!
In der ISR ein Port mit einer LED dran setzen dann sieht man ob der Interrupt oder der USART nicht funktioniert. Der PIN PB3 ist der Eingang: The rising edge of INT1 generates an interrupt request.
Gast
#301247
Ich habe ein anderes Programm für diesen Interrupt, es benutzt nicht
ISR, sonder lese direkt die Interrupt Falg Bit.
int main(void)
{
USART_Init(9600);
MCUCR = (1<<ISC11) | (1<<ISC10);
GICR = (1<<INT1);
while(!(GIFR & (1<<INTF1)));
USART_TransmitString(" externe Interrupt happend ", 27);
for(;;);
}
Es funktioniert. Das bedeutet, wenn die Schalter einschaltet, tretet
ein Interrupt und funktioniert der USART auch.
Ich denke, es gibt irgentwo Fehler in meinem Interrupt_Programm.
Soll ich "INT1_vect" selbst definieren? Oder für boot soll ich etwas
machen? Oder......?
Und ich wollte noch fragen, welcher Port ist "ein Port in der ISR"?
Vielen Danke!
Diese Schreibweise "ISR(INT1_vect)" gilt erst ab GCC.Version 4.x, bei einer älteren Version muss es heißen: zusätzlich #include <avr/signal.h> und anstelle von ISR(INT1_vect) gehört: SIGNAL(SIG_INTERRUPT1)
Gast
#301249
Wunderbar! Es funktioniert! herzlichen besten Dank! Ich wollte noch fragen, benutzt man SIGNAL auch für Interrupt? Welche Unterschied gibt es zwischen ISR und SIGNAL? ISR heist es ab GCC_Version 4.x Vorher war SIGNAL ein nicht zu unterbrechender Interrupt. INTERRUPT konnte durch einen anderen INTERRUPT unterbrochen werden. Ab GCC_Version 4.x gibt es nur mehr ISR = SIGNAL alt
Gast
#301251
Danke! Ich wollte noch fragen, wo kann ich wissen die Name für ein Interrupt? z.B. Für External Interrupt Request1 ist die Name "SIG_INTERRUPT1". Was ist für "USART,Rx Complete"? usw.
Gast
#301252
http://download.savannah.gnu.org/releases/avr-libc/ Unter avr-libc Modules Interrupts gibt es eine Liste mit den diversen Namen. Achtung! auf die richtige Version achten. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|