⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 initialisation.c

📁 Who to use ECAN network with dsPIC33F, Microchip microcontroller.
💻 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 + -