📄 initialisation.c
字号:
/** *****************************************
INITIALISATION.C
***************************************** **/
/* Header Microchip */
#include "p33fxxxx.h"
#include "timer.h"
#include "qei.h"
#include "pwm12.h"
#include "adc.h"
/* Header PG'Bot */
#include "initialisation.h"
#include "constante.h"
#include "carte.h"
#include "identificateur_PGBot.h"
#include "variable_globale.h"
#include "ECAN1Drv.h"
/* ********************
TIMER
******************** */
void initialisation_timer(void)
{
//TIMER 1 :
ConfigIntTimer1(T1_INT_PRIOR_1 & T1_INT_ON);
WriteTimer1(0);
OpenTimer1( T1_ON & T1_IDLE_CON & T1_GATE_OFF & T1_PS_1_1 & T1_SYNC_EXT_OFF & T1_SOURCE_INT,PR1_VAL);
}
/* ********************
OSCILLATEUR
******************** */
void oscConfig(void){
/* Configure Oscillator to operate the device at 40Mhz
Fosc= Fin*M/(N1*N2), Fcy=Fosc/2
Fosc= 8M*40/(2*2)=80Mhz for 8M input clock */
// PLLFBD=38; /* M=40 */
PLLFBD=30; /* M=32 */
CLKDIVbits.PLLPOST=0; /* N1=2 */
CLKDIVbits.PLLPRE=0; /* N2=2 */
OSCTUN=0; /* Tune FRC oscillator, if FRC is used */
/* Disable Watch Dog Timer */
RCONbits.SWDTEN=0;
/* Clock switch to incorporate PLL*/
__builtin_write_OSCCONH(0x03); // Initiate Clock Switch to Primary
// Oscillator with PLL (NOSC=0b011)
__builtin_write_OSCCONL(0x01); // Start clock switching
while (OSCCONbits.COSC != 0b011); // Wait for Clock switch to occur
}
void clearIntrflags(void){
/* Clear Interrupt Flags */
IFS0=0;
IFS1=0;
IFS2=0;
IFS3=0;
IFS4=0;
}
/* ********************
PWM
******************** */
void init_pwm(void)
{
ConfigIntMCPWM1( PWM1_INT_DIS );
SetDCMCPWM1(1,VITESSE_MOTEUR_CC_0,0);
OpenMCPWM1(VITESSE_MOTEUR_CC_MAX,0, PWM1_EN &
PWM1_IDLE_CON &
PWM1_OP_SCALE1 &
PWM1_IPCLK_SCALE1 &
PWM1_MOD_FREE,
PWM1_MOD1_COMP &
PWM1_PDIS3H &
PWM1_PDIS2H &
PWM1_PEN1H &
PWM1_PDIS3L &
PWM1_PDIS2L &
PWM1_PEN1L,
PWM1_SEVOPS1 &
PWM1_OSYNC_PWM &
PWM1_UEN);
}
void initialisation_moteur_CC(void)
{
TRIS_FIN_DE_COURSE = ENTREE;
P1DC1 = VITESSE_MOTEUR_CC_0 - 500; //On fait tourner le moteur pour faire
while (FIN_DE_COURSE == 1); //descendre les pinces jusqu'au capteur
P1DC1 = VITESSE_MOTEUR_CC_0; //de fin de course
points_actuels = VALEUR_INIT_QEI;
POSCNT = VALEUR_INIT_QEI;
}
/* ********************
QEI
******************** */
void init_QEI_mapp (void){
TRIS_QEI1A = ENTREE; //QEI A sur RP4
TRIS_QEI1B = ENTREE; //QEI B sur RP5
// AD1PCFGL=0xffff; //Port B en num閞ique
RPINR14=0x0405;
RPINR15=0xFFFF;
}
void init_qei(void)
{
QEI1CON = 0x0700;
DFLT1CON = 0x0000;
MAX1CNT = VALEUR_MAXI_QEI;
POS1CNT = VALEUR_INIT_QEI;
}
/* ********************
DMA
******************** */
void dma0init(void){
/* Dma Initialization for ECAN1 Transmission */
DMACS0=0;
DMA0CON=0x2020;
DMA0PAD=0x0442; /* ECAN 1 (C1TXD) */
DMA0CNT=0x0007;
DMA0REQ=0x0046; /* ECAN 1 Transmit */
DMA0STA= __builtin_dmaoffset(ecan1msgBuf);
DMA0CONbits.CHEN=1;
IEC0bits.DMA0IE=1;
}
void dma2init(void){
/* Dma Initialization for ECAN1 Reception */
DMACS0=0;
DMA2CON=0x0020;
DMA2PAD=0x0440; /* ECAN 1 (C1RXD) */
DMA2CNT=0x0007;
DMA2REQ=0x0022; /* ECAN 1 Receive */
//DMA2REQ=0x0034; /* ECAN 1 Receive */
DMA2STA= __builtin_dmaoffset(ecan1msgBuf);
DMA2CONbits.CHEN=1;
IEC1bits.DMA2IE=1;
}
/* ********************
Bus ECAN
******************** */
void ecan1ClkInit(void){
/* FCAN is selected to be FCY */
/* FCAN = FCY = 40MHz */
C1CTRL1bits.CANCKS = 0x1;
/*
Bit Time = (Sync Segment + Propagation Delay + Phase Segment 1 + Phase Segment 2)=20*TQ
Phase Segment 1 = 8TQ
Phase Segment 2 = 6Tq
Propagation Delay = 5Tq
Sync Segment = 1TQ
CiCFG1<BRP> =(FCAN /(2 譔譌BAUD))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -