📄 main_30f.c
字号:
#include "p30f4011.h"
#include "can.h"
#include "string.h"
#include "identificateur_PGBot.h"
#include "timer.h"
#include "string.h"
//#include "ECAN1Drv.h"
#define LED PORTBbits.RB0
#define FOSC 128e6
#define FCY FOSC/4
#define F_TMR1 1.0e+004
#define PR1_VAL (FCY/(F_TMR1))
/* CAN Baud Rate Configuration */
#define FCAN FCY //parceque CANCKS = 1
#define BITRATE 1.0e6
//Microchip
//#define NTQ 20 // 20 Time Quanta in a Bit Time
//Nono
#define NTQ 16 // 16 Time Quanta in a Bit Time
#define BRP_VAL ((FCAN/(2*NTQ*BITRATE))-1)
#define ID_CAN(x) (((x & 0x07C0) << 5) | ((x & 0x003F) << 2))
_FOSC(CSW_FSCM_OFF & XT_PLL16);
_FWDT(WDT_OFF);
_FBORPOR(PBOR_ON & BORV_20 & PWRT_64 & MCLR_EN);
_FGS(CODE_PROT_OFF);
_FICD(ICS_NONE);
void Configure_CAN_bus (void);
void envoie_string_ECAN(unsigned int id, char *msg);
void __attribute__((__interrupt__,auto_psv)) _T1Interrupt(void)
{
IFS0bits.T1IF = 0;
// LED=!LED;
}
void main (void)
{
unsigned char toto[9], *reception;
int i;
ADPCFG = 0xFFFF; /* Port b en mode digital */
TRISBbits.TRISB0 = 0;
// TRISBbits.TRISB0 = 1;
TRISBbits.TRISB1 = 1;
TRISBbits.TRISB2 = 1;
while(OSCCONbits.LOCK!=1); /* attendre le verouillage de la pll */
//TIMER 1 :
ConfigIntTimer1(T1_INT_PRIOR_1 & T1_INT_ON);
OpenTimer1( T1_ON & T1_IDLE_CON & T1_GATE_OFF & T1_PS_1_1 & T1_SYNC_EXT_OFF & T1_SOURCE_INT,PR1_VAL);
Configure_CAN_bus ();
LED = 0;
do{
if(PORTBbits.RB1==1) {
envoie_string_ECAN(DEP_PINCE, "DISTRIB"); // 8 car. max
LED=1;
while(CAN1IsRXReady(0)==0);
// for(i=0;i<40000;i++);
// CAN1ReceiveMessage (reception,8,0);
if(strcmp(reception,"CHARGE O")==0) LED=0;
// envoie_string_ECAN(DEP_PINCE, "CENTRE");
// while(CAN1IsRXReady(0)==0);
// CAN1ReceiveMessage (reception,8,0);
// if(strcmp(reception,"DEPOSE O")!=0) envoie_string_ECAN(ERREUR, " 404 ");
while((PORTBbits.RB1==1));
}
if(PORTBbits.RB2==1) {
envoie_string_ECAN(DEP_PINCE, "CENTRE");
while((PORTBbits.RB2==1));
}
} while(1);
}
/*********************************************************************
Configure CAN bus
*********************************************************************/
void Configure_CAN_bus (void)
{
/* mode configuration */
CAN1SetOperationMode( CAN_IDLE_CON &
CAN_MASTERCLOCK_1 & //FCAN = FCY
CAN_REQ_OPERMODE_CONFIG & //MODE CONFIGURATION
CAN_CAPTURE_DIS);
while(C1CTRLbits.OPMODE <=3);
// C1CTRLbits.REQOP=4;
// while(C1CTRLbits.OPMODE!=4);
/* config des registres */
CAN1Initialize( CAN_SYNC_JUMP_WIDTH1 &
CAN_BAUD_PRE_SCALE(1),
CAN_WAKEUP_BY_FILTER_DIS &
CAN_PROPAGATIONTIME_SEG_TQ(7) &
CAN_PHASE_SEG1_TQ(3) & CAN_PHASE_SEG2_TQ(5) &
CAN_SEG2_FREE_PROG & CAN_SAMPLE1TIME);
// C1CTRLbits.CANCKS = 0x1;
// C1CFG1bits.SJW = 0x0; /* Synchronization Jump Width set to 1 TQ */
// C1CFG1bits.BRP = BRP_VAL; /* Baud Rate Prescaler */
// C1CFG2bits.SEG1PH=0x2; /* Phase Segment 1 time is 3 TQ */
// C1CFG2bits.SEG2PHTS = 0x1; /* Phase Segment 2 time is set to be programmable */
// C1CFG2bits.SEG2PH = 0x4; /* Phase Segment 2 time is 5 TQ */
// C1CFG2bits.PRSEG = 0x6; /* Propagation Segment time is 7 TQ */
// C1CFG2bits.SAM = 0x1; /* Bus line is sampled three times at the sample point */
/* config TX */
CAN1SetTXMode(0,CAN_TX_STOP_REQ & CAN_TX_PRIORITY_HIGH);
CAN1SetTXMode(1,CAN_TX_STOP_REQ & CAN_TX_PRIORITY_HIGH_INTER);
CAN1SetTXMode(2,CAN_TX_STOP_REQ & CAN_TX_PRIORITY_LOW_INTER);
/* config RX */
CAN1SetRXMode(0,CAN_RXFUL_CLEAR & CAN_BUF0_DBLBUFFER_DIS);
CAN1SetRXMode(1,CAN_RXFUL_CLEAR);
/* filtres */
CAN1SetFilter(0, CAN_FILTER_SID(0x0018) & CAN_RX_EID_DIS, 0);
/* Load mask filter register */
CAN1SetMask(0, CAN_MASK_SID(0x00FC) & CAN_MATCH_FILTER_TYPE, 0);
/* mode normale */
CAN1SetOperationMode( CAN_IDLE_CON & CAN_CAPTURE_DIS &
CAN_MASTERCLOCK_1 & CAN_REQ_OPERMODE_NOR);
while(C1CTRLbits.OPMODE != 0);
// C1CTRLbits.REQOP=2;
// while(C1CTRLbits.OPMODE!=2);
return;
}
void envoie_string_ECAN(unsigned int id, char *msg)
{
//unsigned char i;
CAN1SendMessage((ID_CAN((id|STRING))),0,msg, 8, 0);
// ecan1WriteTxMsgBufId(0,id|STRING,0,0);
// ecan1WriteTxMsgBufData(0,8,(msg[0])|(msg[1]<<8),(msg[2])|(msg[3]<<8),(msg[4])|(msg[5]<<8),(msg[6])|(msg[7]<<8));
// C1TR01CONbits.TXREQ0=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -