Die folgenden Codeschnipsel stammen vom Hersteller. Ich bin völlig verwirrt darüber, was sie zu tun versuchen. Insbesondere etwas, was mit InterruptHandler zu tun hat.C-Code-Interrupt-Setup vom Hersteller
Bitte kommentieren Sie den Code im globalen Bereich. Sieht das richtig aus?
Auch die verschiedenen APIs enthalten alle Probleme für mich. Versuchen sie einen leeren Zeiger zu verwenden? ... Viel zu fragen, bitte kommentieren Sie hauptsächlich, wie sie vorschlagen, dass der Timer2 funktionieren würde.
...
/**
Section: Global Variables Definitions
*/
void (*TMR2_InterruptHandler)(void);
...
/**
Section: TMR2 APIs
*/
void TMR2_Initialize(void)
{
// Set TMR2 to the options selected in the User Interface
// T2CKPS 1:2; T2OUTPS 1:2; TMR2ON off;
T2CON = 0x11;
// T2CS LFINTOSC;
T2CLKCON = 0x04;
// T2PSYNC Not Synchronized; T2MODE Software control One shot; T2CKPOL Rising Edge; T2CKSYNC Not Synchronized;
T2HLT = 0x08;
// T2RSEL TMR4_postscaled;
T2RST = 0x02;
// PR2 8;
T2PR = 0x08;
// TMR2 0;
T2TMR = 0x00;
// Clearing IF flag before enabling the interrupt.
PIR4bits.TMR2IF = 0;
// Enabling TMR2 interrupt.
PIE4bits.TMR2IE = 1;
// Set Default Interrupt Handler
TMR2_SetInterruptHandler(TMR2_DefaultInterruptHandler);
// Start TMR2
TMR2_Start();
}
void TMR2_ISR(void)
{
// clear the TMR2 interrupt flag
PIR4bits.TMR2IF = 0;
if(TMR2_InterruptHandler)
{
TMR2_InterruptHandler();
}
}
void TMR2_SetInterruptHandler(void* InterruptHandler)
{
TMR2_InterruptHandler = InterruptHandler;
}
void TMR2_DefaultInterruptHandler(void)
{
// add your TMR2 interrupt custom code
// or set custom function using TMR2_SetInterruptHandler()
}
/**
End of File
*/
Danke, Steve
edit: Der Hersteller-Code enthält eine Routine (ich kann nicht scheinen, hier zu hinzufügen) für High-Level-Interrupts verwalten, die TMR2_ISR if (PIE4bits.TMR2IE ruft = = 1 & & PIR4bits.TMR2IF == 1) Dies würde jeden TMR2_DefaultInterruptHandler negieren, nicht wahr?
Nochmals vielen Dank für Ihre Hilfe.
Haben Sie im Allgemeinen kennen Wie funktionieren Interrupts und wofür sind sie gut? Was löst den Interrupt-Handler aus? (Es ist möglich, dass ein Interrupt-Handler für jeden Interrupt aufgerufen wird. In diesem Fall muss eine Art Spezifikation (z. B. eine globale Variable) angegeben werden, die den Interrupt ausgelöst hat.) – Scheff
Verwenden Sie den bereitgestellten Code und setzen Sie Ihren Code in TMR2_DefaultInterruptHandler –
Dies ist nur ein Skelett. Was für ein Bit verstehst du nicht, denn dieser Code macht nichts Sinnvolles.Einzelheiten zu den Hardwareregistern finden Sie in Ihrem Benutzerhandbuch. Informationen zu Interrupt-Kommunikation und Signalisierung finden Sie im Handbuch Ihres Betriebssystems. –