Hallo zusammen,
Ich habe folgendes Problem. Ich habe auf meinem AtXmega32 einen externen
Pin Interrupt auf Pin7 von PortD programmiert. Dazu habe ich den Treiber
von port_driver von Atmel verwendet.
Code:
1 | // Configure PD7 as input, triggered on rising edge
|
2 | PORT_ConfigurePins( &PORTD, 0x80, false, false, PORT_OPC_TOTEM_gc, PORT_ISC_RISING_gc );
|
3 | PORT_SetPinsAsInput( &PORTD, 0x80 );
|
4 |
|
5 | // Configure Interrupt0 to have medium interrupt level, triggered by pin 7
|
6 | PORT_ConfigureInterrupt0( &PORTD, PORT_INT0LVL_MED_gc, 0x80 );
|
7 |
|
8 | // Enable medium level interrupts in the PMIC
|
9 | PMIC.CTRL |= PMIC_MEDLVLEN_bm;
|
ISR:
1 | // Power Switch Interrupt
|
2 | ISR(PORTD_INT0_vect)
|
3 | {
|
4 | }
|
Die ISR wird ohne Probleme aufgerufen. Jetzt benötige ich noch einen
Timer der bei einem gewissen compare Wert auslöst.
Code:
1 | TCC0.CTRLA = 0x00;
|
2 | TCC0.INTCTRLB = 0x03; //Compare-Interrupts A activate as high-Level
|
3 | TCC0.CCA = 1800; // compare value
|
4 | TCC0.PER = 2000; //maximal value
|
5 | TCC0.CTRLA = TC_CLKSEL_DIV1024_gc; //Prescaler auf 1024
|
6 | PMIC.CTRL |= PMIC_HILVLEN_bm;
|
7 | sei();
|
ISR:
1 | ISR(TCC0_CCA_vect)
|
2 | {
|
3 | }
|
Das Problem ist nun, sobald ich einen external Pin Interrupt am Port D,
Pin7 bekomme springt mein Programm in die Timer ISR. Wodrann kann das
liegen?