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

📄 fchev_can.c

📁 关于电动汽车控制采样处理的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*********************************************************************
**********************************************************************
**********************************************************************
*********************************************************************/


/*** Address Definitions ***/
#include        "f2407regs.h"    
/*+++++++++++*/
#include 		"firfilt.h"  
#include 		"pid_reg1.h"   
/*+++++++++++*/   


/*+++++++++++*/  
/*----PID definitions----*/
 PIDREG1 pid=PIDREG1_USER;  
 #pragma DATA_SECTION(fir,"firfilt");
 FIRFILT_ORD10 fir =FIRFILT_ORD10_LPF;  
/*+++++++++++*/ 
 

#define         DAC0    port0000        /* EVM DAC register 0 (I/O space) */
ioport unsigned port0000;               /* '24xx compiler specific keyword */

#define         DAC1    port0001        /* EVM DAC register 1 (I/O space) */
ioport unsigned port0001;               /* '24xx compiler specific keyword */

#define         DAC2    port0002        /* EVM DAC register 2 (I/O space) */
ioport unsigned port0002;               /* '24xx compiler specific keyword */

#define         DAC3    port0003        /* EVM DAC register 3 (I/O space) */
ioport unsigned port0003;               /* '24xx compiler specific keyword */

#define         DACUD   port0004        /* EVM DAC update register (I/O space) */
ioport unsigned port0004;               /* '24xx compiler specific keyword */

#define         DIPSWCH port0008        /* EVM DIP switch (I/O space) */
ioport unsigned port0008;               /* '24xx compiler specific keyword */

#define         LED     port0009        /* EVM LED bank (I/O space) */
ioport unsigned port0009;               /* '24xx compiler specific keyword */


/*** Constant Definitions ***/
/*#define         timer2_per    3215*/     /* 1ms timer2 period with a 1/4 timer prescaler and 40MHz CPUCLK */
#define         timer2_per    3215

int mbx2_a=-2,mbx2_b=-1,mbx2_c=-1,mbx2_d=-1;


int  CAN_TFLAG;/*CAN 发送时间计数*/
int  LED6_counter=0;         /*LED6 定时器2中断指示灯*/
int  LED7_counter=0;   /*LED7 CAN接收成功指示灯*/
int  LED8_counter=0;    /*LED8 CAN发送成功指示灯*/
int  LED_STATE=0x000F;   /*1-off ;0-on,low 4 bit for LED6-9*/
int temp_RCR=-1;         /*STORE THE *RCR REGISTER VALUE*/
int temp_TCR=-1;         /*STORE THE *TCR REGISTER VALUE*/
        

/*** Global Variable Definitions ***/                     
int Ib=-1,If=-1,Ubus=-1;     /*the current of battery&Fuel cell and the bus voltage*/   
int temp=0xFFFF;    /*varialbe value for ouput of DAC to produce control signal*/
int end_ad=-1;              /*the flag of end of ad conversion*/  
int channel_0=-1,channel_1=-1,channel_2=-1,channel_3=-1;/*the result of ad0-3*/
/*+++++++++++++++*/ 
int tx_cnt=0;      
void sci_init(void);    
void delay(void);
int P_FC_ref=0;
/*+++++++++++++++*/

  
                 
        
         main()
{   
		
	/*	;(3)系统初始化程序        */
	     asm(" SETC INTM");
    	     asm(" CLRC SXM");
       	asm(" CLRC OVM");
		asm(" CLRC CNF");
		asm(" nop");   
          asm(" nop");
		asm(" nop");     
/*** Configure the System Control and Status registers ***/
    *SCSR1 = 0x00FD;
/*
 bit 15        0:      reserved
 bit 14        0:      CLKOUT = CPUCLK
 bit 13-12     00:     IDLE1 selected for low-power mode
 bit 11-9      000:    PLL x4 mode
 bit 8         0:      reserved
 bit 7         1:      1 = enable ADC module clock
 bit 6         1:      1 = enable SCI module clock
 bit 5         1:      1 = enable SPI module clock
 bit 4         1:      1 = enable CAN module clock
 bit 3         1:      1 = enable EVB module clock
 bit 2         1:      1 = enable EVA module clock
 bit 1         0:      reserved
 bit 0         1:      clear the ILLADR bit           */
    *SCSR2 = (*SCSR2 | 0x000B) & 0x000F;
/*
 bit 15-6      0's:    reserved
 bit 5         0:      do NOT clear the WD OVERRIDE bit
 bit 4         0:      XMIF_HI-Z, 0=normal mode, 1=Hi-Z'd
 bit 3         1:      disable the boot ROM, enable the FLASH
 bit 2     no change   MP/MC* bit reflects state of MP/MC* pin
 bit 1-0      11:      11 = SARAM mapped to prog and data       */


/*** Disable the watchdog timer ***/
    *WDCR  = 0x00E8;
/*
 bits 15-8     0's:     reserved
 bit 7         1:       clear WD flag
 bit 6         1:       disable the dog
 bit 5-3       101:     must be written as 101
 bit 2-0       000:     WDCLK divider = 1          */

/*** Setup external memory interface for LF2407 EVM ***/
    WSGR = 0x0000;
    asm(" NOP");
    WSGR = 0x0040;
/*
 bit 15-11     0's:    reserved
 bit 10-9      00:     bus visibility off
 bit 8-6       001:    1 wait-state for I/O space
 bit 5-3       000:    0 wait-state for data space
 bit 2-0       000:    0 wait state for program space   */

/*** Setup shared I/O pins ***/
    *MCRA = 0x0000;                     /* group A pins */
/*
 bit 15        0:      0=IOPB7,     1=TCLKINA
 bit 14        0:      0=IOPB6,     1=TDIRA
 bit 13        0:      0=IOPB5,     1=T2PWM/T2CMP
 bit 12        0:      0=IOPB4,     1=T1PWM/T1CMP
 bit 11        0:      0=IOPB3,     1=PWM6
 bit 10        0:      0=IOPB2,     1=PWM5
 bit 9         0:      0=IOPB1,     1=PWM4
 bit 8         0:      0=IOPB0,     1=PWM3
 bit 7         0:      0=IOPA7,     1=PWM2
 bit 6         0:      0=IOPA6,     1=PWM1                           
 bit 5         0:      0=IOPA5,     1=CAP3
 bit 4         0:      0=IOPA4,     1=CAP2/QEP2
 bit 3         0:      0=IOPA3,     1=CAP1/QEP1
 bit 2         0:      0=IOPA2,     1=XINT1
 bit 1         0:      0=IOPA1,     1=SCIRXD
 bit 0         0:      0=IOPA0,     1=SCITXD       */
    *MCRB = 0xFEC0;                     /* group B pins */
/*
 bit 15        1:      0=reserved,  1=TMS2 (always write as 1)
 bit 14        1:      0=reserved,  1=TMS  (always write as 1)
 bit 13        1:      0=reserved,  1=TD0  (always write as 1)
 bit 12        1:      0=reserved,  1=TDI  (always write as 1)
 bit 11        1:      0=reserved,  1=TCK  (always write as 1)
 bit 10        1:      0=reserved,  1=EMU1 (always write as 1)
 bit 9         1:      0=reserved,  1=EMU0 (always write as 1)
 bit 8         0:      0=IOPD0,     1=XINT2/ADCSOC
 bit 7         1:      0=IOPC7,     1=CANRX
 bit 6         1:      0=IOPC6,     1=CANTX
 bit 5         0:      0=IOPC5,     1=SPISTE
 bit 4         0:      0=IOPC4,     1=SPICLK
 bit 3         0:      0=IOPC3,     1=SPISOMI
 bit 2         0:      0=IOPC2,     1=SPISIMO
 bit 1         0:      0=IOPC1,     1=BIO*
 bit 0         0:      0=IOPC0,     1=W/R*            */
    *MCRC = 0x0000;                     /* group C pins */
/*
 bit 15        0:      reserved
 bit 14        0:      0=IOPF6,     1=IOPF6
 bit 13        0:      0=IOPF5,     1=TCLKINB
 bit 12        0:      0=IOPF4,     1=TDIRB
 bit 11        0:      0=IOPF3,     1=T4PWM/T4CMP
 bit 10        0:      0=IOPF2,     1=T3PWM/T3CMP
 bit 9         0:      0=IOPF1,     1=CAP6
 bit 8         0:      0=IOPF0,     1=CAP5/QEP4
 bit 7         0:      0=IOPE7,     1=CAP4/QEP3
 bit 6         0:      0=IOPE6,     1=PWM12
 bit 5         0:      0=IOPE5,     1=PWM11
 bit 4         0:      0=IOPE4,     1=PWM10
 bit 3         0:      0=IOPE3,     1=PWM9
 bit 2         0:      0=IOPE2,     1=PWM8
 bit 1         0:      0=IOPE1,     1=PWM7
 bit 0         0:      0=IOPE0,     1=CLKOUT      */

  
  

/*** Setup timers 1 and 2, and the PWM configuration ***/
    *T1CON = 0x0000;                   /* disable timer 1 */
    *T2CON = 0x0000;                   /* disable timer 2 */
    *GPTCONA = 0x0000;                  /* configure GPTCONA */
/*     
 bit 15        0:      reserved
 bit 14        0:      GP timer 2 Status. Read only. 
 bit 13        0:      T1STAT, read-only
 bit 12-11     00:     reserved
 bit 10-9      00:     T2TOADC, 00 = no timer2 event starts ADC
 bit 8-7       00:     T1TOADC, 00 = no timer1 event starts ADC
 bit 6         0:      TCOMPOE, 0 = Hi-z all timer compare outputs
 bit 5-4       00:     reserved
 bit 3-2       00:     T2PIN, 00 = forced low
 bit 1-0       00:     T1PIN, 00 = forced low  */     
 
  
/* Timer 2: configure to generate a T ms periodic interrupt */
    *T2CNT = 0x0000;                    /* clear timer counter */
    *T2PR = timer2_per;                 /* set timer period */
    *T2CON = 0x1700;                    /* configure T2CON register */
/*     
 bit 15-14     00:     stop immediately on emulator suspend
 bit 13        0:      reserved
 bit 12-11     10:     10 = continous-up count mode
 bit 10-8      111:    111 = x/128 prescaler
 bit 7         0:      T2SWT1, 0 = use own TENABLE bit
 bit 6         0:      TENABLE, 0 =Disable timer operation
 bit 5-4       00:     00 = CPUCLK is clock source
 bit 3-2       00:     00 = reload compare reg on underflow
 bit 1         0:      0 = disable timer compare
 bit 0         0:      SELT1PR, 0 = use own period register     */

/*** Setup the core interrupts ***/
    *IMR = 0x0000;   /* clear the IMR register */
    *IFR = 0x003F;   /* clear any pending core interrupts */
    *IMR = 0x0006;   /* enable desired core interrupts:T2peroid INT3&CAN ERROR HIGH INT2 */

/*** Setup the event manager interrupts ***/
    *EVAIMRA = 0x0000;                  /* enable desired EVA group A interrupts */
    *EVAIMRB = 0x0001;        /* enable desired EVA group B interrupts:T2PINT ENABLE */
    *EVAIMRC = 0x0000;                  /* enable desired EVA group C interrupts */
    *EVAIFRA = 0xFFFF;                  /* clear all EVA group A interrupts */
    *EVAIFRB = 0xFFFF;                  /* clear all EVA group B interrupts */
    *EVAIFRC = 0xFFFF;                  /* clear all EVA group C interrupts */


/*__________________________;(4)CAN初始化程序______________________________ */
            
      /*;~~~~~~~ CAN 位定时器配置 ~~~~~~~~~~~~*/
     	*MDER=0x0040;			/*;MD2=1,MBX2为发送方式*/
          *CAN_IFR=0xFFFF;     	/*;清全部CAN中断标志*/
		*LAM1_H=0x7000;		/*;设置邮箱2、3的屏蔽ID寄存器    */
		*LAM1_L=0xFFFF;		/*	;0则ID必须匹配      */

          *MCR=0x1000;			/*	;CCR=1 改变配置请求    */
W_CCE:	if(*GSR&0x0010==0x0000)goto W_CCE;  /*;等待改变配置使能  */
					/*;当CCE=1 时即可配置 BCR2、BCR1 寄存器    */
 		
		*BCR2=0x0027;			/*	;波特率预分频寄存器	40M/(39+1)=1M   */
		*BCR1=0x0013;			/*	;波特率设置为2+3+3=8  */
		*MCR=*MCR&0xEFFF;     /*;CCR=0 改变配置结束请求				*/
W_NCCE: 	if(*GSR&0x0010==0x0010)goto W_NCCE;/*;等待改变配置不使能     */
		                               /*;只有当CEE=0时,BCR2、BCR1  */
                                         /*;寄存器配置成功  */
    /*;~~~~写 CAN 邮箱内容前寄存器设置~~~~~~*/
          *MDER=0x0040;			/*	;不使能邮箱,邮箱2设为接收方式*/
		*MCR=0x0103;			/*	;CDR=1,数据区改变请求   */
    /*;~~~~~~~写 CAN 邮箱内容~~~~~~~~~~~~~*/
          *MSGID2H=0x4080; 			/*;设置邮箱2的控制字及ID 
									;IDE=0, AME=1, AAM=0
										;标准方式为MSGID2H[12~2]*/ 
		 *MSGID2L=0xFFFF; 									
          *MSGCTRL2=0x0008;	/*	;设置控制域    */
								/*;数据长度DCL = 8,RTR=0 数据帧 */
		
		 
		    
		 

		
		*MBX2A=0x0000;			/*;邮箱2信息初始化    */
		*MBX2B=0x0000;
		*MBX2C=0x0000;
		*MBX2D=0x0000;

		 /* *MSGID3L=0xFFFF; */
		   *MSGID3H=0x4088; 
		   *MSGID3L=0xFFFF;
		   
		*MSGCTRL3=0x0008;		/*	;RTR=0,DCL=8    */           
       /*;邮箱3信息初始化 */
		*MBX3A=0x000F;			
		*MBX3B=0x0200;
		*MBX3C=0x0400;
		*MBX3D=0x0400;
       /*;~~~~~~~~~写 CAN 邮箱内容后寄存器设置~~~~~~~~~~~~*/

		*MCR=0x2480;	/*	;DBO=1,ABO=1,STM=0   */    
		/*===================*/
		/**MCR=0x24C0; */	  
		/*===================*/	
		*MDER=0x004C;			/*	;ME3=1,MBX3 发送, ME2=1 接收    */
		/**CAN_IMR=0xF7FF; */		/*;中断MBX3不使能,MBX2使能,*/
          *CAN_IMR=0x8480;
                                         /*;中断优先级           */
		*CAN_IFR=0xFFFF;		/*	;清全部中断标志  */
                                                             
/*=======================================================================*/ 


  /*+++++++++++++++++++++*/   
    sci_init();
  /*+++++++++++++++++++++*/   
             
             
/*+++++++++++++++++++++*/ 
   /* Fixed Order Filter Initialisation                               */   
        fir.dbuffer_ptr=&fir.dbuffer[0];
        fir.coeff_ptr=&fir.coeff[0];
        fir.init(&fir);      
/*+++++++++++++++++++++*/ 
  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -