A
angeline
Guest
Jeg er en ny bruker ved hjelp DSPIC30F3010.Jeg prøver å bruke skriving fange modul å fange perioden squarewave bruker MPLAB IDE å gjøre mitt programmering.Jeg bruker ICD2 å vise resultat av register som IC7BUF.Jeg er ikke noen endringer i bufferen, men jeg satt en LED å sikre at min koden angir skriving fange avbruddsordrelinje og viser meg ja.Håper kan få noen råd.
Code:
# Include <p30f3010.h>
# Include <math.h>
# Include <stdio.h># define LED LATDbits.LATD0/************* Globale variabler og Konstanter *************/
unsigned int tid = 0, captureresult1 = 0, captureresult2 = 0; / * Variablar brukes for perioden beregning * /void __attribute__ ((__interrupt__)) _IC7Interrupt (void);/**** FUNCTION prototyper ****/
void IC_SETUP (void);
void TIMER2_SETUP (void);/****** Hoveddelen ******/
int main (void)
(
TRISD = 0; / * Sette Port D som utgang * /
PORTD = 0; / * Reset LED * /
PORTD = 0xff; / * Tenn lyset, for å teste PIC fungerer * /
TRISB = 0x003f; / * Sette PortB som input * /
ADPCFG = 0xFFFF; / * Innstilling av analoge pin som digital inngang * /TIMER2_SETUP (); / * Ringe tidtakeren Setup Funksjon * /
IC_SETUP (); / * Ringe INPUT Capture Setup Funksjon * /
mens (1)
(
)return (0);
)
/ *** SETUP_IC ****/
void IC_SETUP (void)
(
IC7CONbits.ICM = 3; / * Capture hvert stigende kanten * /
IC7CONbits.ICBNE = 0; / * Input fange bufferen er tom * /
IC7CONbits.ICOV = 0; / * No input fangst overflyten inntraff * /
IC7CONbits.ICI = 0; / * Interrupt på hver fange hendelsen * /
IC7CONbits.ICTMR = 1; / * TMR2 innholdet er tatt på fanget hendelsen * /
IC7CONbits.ICSIDL = 0; / * Input fange modul vil fortsette å operere i CPU Inaktiv modus * /
IFS1bits.IC7IF = 0; / * Interrupt bit tømmes * /
IEC1bits.IC7IE = 1; / * Sett IC7 avbruddsordrelinje aktivere bits * /)/**** Avbruddsordrelinje FOR IC7 ****/
void __attribute__ ((__interrupt__)) _IC7Interrupt (void)
(
flyktige unsigned int * ptr;ptr = &IC7BUF; / * Initialise IC7BUF peker * /
captureresult1 = * ptr;
captureresult2 = * ptr ;
LED = ~ LED;captureresult1 = IC7BUF;perioden = captureresult2-captureresult1;
/ * IFS1bits.IC7IF = 0; / * Interrupt bit tømmes * /
)/ *** TIMER_SETUP *** /
void TIMER2_SETUP (void)
(
T2CONbits.TCS = 1; / * Bruke Intern Klokke (Fosc / 4) * /
T2CONbits.T32 = 1; / * TMRx og TMRy danne et 32-bits tidtaker * /
T2CONbits.TCKPS = 0; / * Bruke 1:1 prescale verdi * /
T2CONbits.TGATE = 0; / * Tidsur Gate opphopning funksjonshemmede * /
T2CONbits.TSIDL = 0; / * Fortsett i inaktiv modus * /
T2CONbits.TON = 1; / * Starts Tidtaker * /
)
)Takk
Code:
# Include <p30f3010.h>
# Include <math.h>
# Include <stdio.h># define LED LATDbits.LATD0/************* Globale variabler og Konstanter *************/
unsigned int tid = 0, captureresult1 = 0, captureresult2 = 0; / * Variablar brukes for perioden beregning * /void __attribute__ ((__interrupt__)) _IC7Interrupt (void);/**** FUNCTION prototyper ****/
void IC_SETUP (void);
void TIMER2_SETUP (void);/****** Hoveddelen ******/
int main (void)
(
TRISD = 0; / * Sette Port D som utgang * /
PORTD = 0; / * Reset LED * /
PORTD = 0xff; / * Tenn lyset, for å teste PIC fungerer * /
TRISB = 0x003f; / * Sette PortB som input * /
ADPCFG = 0xFFFF; / * Innstilling av analoge pin som digital inngang * /TIMER2_SETUP (); / * Ringe tidtakeren Setup Funksjon * /
IC_SETUP (); / * Ringe INPUT Capture Setup Funksjon * /
mens (1)
(
)return (0);
)
/ *** SETUP_IC ****/
void IC_SETUP (void)
(
IC7CONbits.ICM = 3; / * Capture hvert stigende kanten * /
IC7CONbits.ICBNE = 0; / * Input fange bufferen er tom * /
IC7CONbits.ICOV = 0; / * No input fangst overflyten inntraff * /
IC7CONbits.ICI = 0; / * Interrupt på hver fange hendelsen * /
IC7CONbits.ICTMR = 1; / * TMR2 innholdet er tatt på fanget hendelsen * /
IC7CONbits.ICSIDL = 0; / * Input fange modul vil fortsette å operere i CPU Inaktiv modus * /
IFS1bits.IC7IF = 0; / * Interrupt bit tømmes * /
IEC1bits.IC7IE = 1; / * Sett IC7 avbruddsordrelinje aktivere bits * /)/**** Avbruddsordrelinje FOR IC7 ****/
void __attribute__ ((__interrupt__)) _IC7Interrupt (void)
(
flyktige unsigned int * ptr;ptr = &IC7BUF; / * Initialise IC7BUF peker * /
captureresult1 = * ptr;
captureresult2 = * ptr ;
LED = ~ LED;captureresult1 = IC7BUF;perioden = captureresult2-captureresult1;
/ * IFS1bits.IC7IF = 0; / * Interrupt bit tømmes * /
)/ *** TIMER_SETUP *** /
void TIMER2_SETUP (void)
(
T2CONbits.TCS = 1; / * Bruke Intern Klokke (Fosc / 4) * /
T2CONbits.T32 = 1; / * TMRx og TMRy danne et 32-bits tidtaker * /
T2CONbits.TCKPS = 0; / * Bruke 1:1 prescale verdi * /
T2CONbits.TGATE = 0; / * Tidsur Gate opphopning funksjonshemmede * /
T2CONbits.TSIDL = 0; / * Fortsett i inaktiv modus * /
T2CONbits.TON = 1; / * Starts Tidtaker * /
)
)Takk