Hi, Ich benutze die RD9 von PIC24F128GA010 als meine Input Capture 2. Ich habe die configuriert wie auf daten blatt steht.. static inline void CONFIG_RD9_AS_DIG_INPUT() { _TRISD9 = 1; // Enable pull up // delay to settle } #define CONFIG_RINGI() CONFIG_RD9_AS_DIG_INPUT() #define RINGI _LATD9 //_LATD9 is port register for RD9 typedef enum { STATE_WAIT_FOR_FALL_EDGE = 0, STATE_WAIT_FOR_RISE_EDGE, } ICSTATE; ICSTATE e_isrICState = STATE_WAIT_FOR_FALL_EDGE; volatile uint16_t u16_oflowCount = 0; volatile uint8_t u8_captureFlag = 0; volatile uint16_t u16_lastCapture; volatile uint16_t u16_thisCapture; volatile uint32_t u32_pulseWidth; void configInputCapture2(void) { CONFIG_RINGI(); IC2CON = IC_TIMER3_SRC | //Timer 3 source IC_INT_1CAPTURE | //Interrupt every capture IC_IDLE_CON | // IC operate in sleep mode IC_EVERY_EDGE; //Capture every edge _IC2IF = 0; _IC2IP = 2; //higher than Timer3 so that Timer3 does not interrupt IC2 _IC2IE = 1; //enable } //void _ISRFAST _IC2Interrupt() void __attribute__((_interrupt_, auto_psv)) _IC2Interrupt(void) { _IC2IF = 0; u16_thisCapture = IC2BUF; //always read the buffer to prevent overflow clrLCD(); putstringLCD("SMS RXed"); main_mode = MODE_SMS; } Trözdem ländet er nicht wenn ich die pin nider ist. Kann jemand etwas merken bei diese konfiguration vielleicht ? VG Savio
Kommt denn der Interrupt überhaupt mal?
Ich denke, Deine InterruptServiceRoutine (ISR) benötigt vielzuviel
Laufzeit. Daher können weitere Ereignisse verloren gehen.
Savio schrieb:
1 | void __attribute__((_interrupt_, auto_psv)) _IC2Interrupt(void) |
2 | {
|
3 | _IC2IF = 0; |
4 | u16_thisCapture = IC2BUF; //always read the buffer to prevent |
5 | clrLCD(); |
6 | putstringLCD("SMS RXed"); |
7 | main_mode = MODE_SMS; |
8 | }
|
Die Aufrufe
1 | clrLCD(); |
2 | putstringLCD("SMS RXed"); |
sollten nicht direkt aus der ISR erfolgen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.