Bonjour,
J'utilise dans un programme la fonction DelayMs() comme définie dans le programme "blinkled" qui est utilisé pour comprendre MPLAB.
Mais je ne comprends pas trop certaines opérations.
Voici la fonction :
J'utilise un PIC32MX79, et un quartz externe de 10MHz.Code:/* Adds support for PIC32 Peripheral library functions and macros */ #include <plib.h> // Configuration Bits #pragma config FNOSC = PRIPLL // Oscillator Selection #pragma config FPLLIDIV = DIV_2 // PLL Input Divider (PIC32 Starter Kit: use divide by 2 only) #pragma config FPLLMUL = MUL_20 // PLL Multiplier #pragma config FPLLODIV = DIV_1 // PLL Output Divider #pragma config FPBDIV = DIV_1 // Peripheral Clock divisor #pragma config FWDTEN = OFF // Watchdog Timer #pragma config WDTPS = PS1 // Watchdog Timer Postscale #pragma config FCKSM = CSDCMD // Clock Switching & Fail Safe Clock Monitor #pragma config OSCIOFNC = ON // CLKO Enable #pragma config POSCMOD = XT // Primary Oscillator #pragma config IESO = OFF // Internal/External Switch-over #pragma config FSOSCEN = OFF // Secondary Oscillator Enable #pragma config CP = OFF // Code Protect #pragma config BWP = OFF // Boot Flash Write Protect #pragma config PWP = OFF // Program Flash Write Protect #pragma config ICESEL = ICS_PGx2 // ICE/ICD Comm Channel Select #pragma config DEBUG = ON // Debugger Disabled for Starter Kit // application defines #define SYS_FREQ (100000000) // prototype void DelayMs(unsigned int); // blink_leds application code int main(void) { ... } void DelayMs(unsigned int msec) { unsigned int tWait, tStart; tWait=(SYS_FREQ/2500)*msec; //SYS_FREQ(100000000) tStart=ReadCoreTimer(); while((ReadCoreTimer()-tStart)<tWait); // wait for the time to pass }
Je ne comprends pas pourquoi on divise "SYS_FREQ" par 2500 puisque on veut avoir une 1ms. Il faudrait divisé par 10000 nan?? 1ms=10-3=1/1000 ! Et après on multiplie par "msec" pour attendre le nbr de ms souhaité nan?
-----