initial.c

来自「永磁同步电机驱动控制」· C语言 代码 · 共 152 行

C
152
字号

/* ===================================================================== */
/* File name : MAIN.C   */
/* Author: HU QINGBO      */
/* Data: 2006.9.29      */
/* Version: 1.0         */
/* Organization: DSP MOTO CONTROL PROGROM 
/*               Zhejiang Tianhuang Techonology Industry Ltd.,  */
/* Description : C-PROGRAM TO CONTROL A DC USE F2407A          */ 
/* ================================================================== */
/*  头文件  */
#include "F2407_c.H"

void system_initial()
{

     asm("  out 600h,0ffffh");
     asm("	setc INTM");
     asm("	setc SXM");
     asm("	clrc OVM");
     asm("	clrc CNF");
     WDCR=0X6f;
     WDKEY=0X55;
     WDKEY=0XAA;
     SCSR1=0X00FC;
     IMR=0;
     IFR=IFR;
	   	    
}

void ad_initial()
{
        ADCTRL1=0X4000;     // Reset ADC module
        asm(" nop");
        ADCTRL1=0X3020;    // Take ADC out of reset,不受仿真悬挂影响
	                      //    启动/停止模式,低优先级,最快的转换速度
	                      //    双排序工作,禁止其他工作模式
  	    
	    MAX_CONV=0X2;         // Setup for 3 conversions
	    CHSELSEQ1=0X3210; 	// Convert Channels 0,1,2,3;0=ib,1=ia,2=signal,3=vdc
	    CHSELSEQ2=0X7654; 	// Convert Channels 4,5,6,7
	    CHSELSEQ3=0XBA98;  	// Convert Channels 8,9,10,11
        CHSELSEQ4=0XFEDC;  	// Convert Channels 12,13,14,15
        ADCTRL2=0X4000;        //复位通道指针。
}

void io_initial()
{

	    MCRA=0X0FFF;       //B4-B7,PWM1-6,CAP1-3,SCI,XINT ;
	    MCRB=0XFFFF;      //仿真口,SPI,CAN ,XINT2
	    MCRC=0X0;       //E0-E7,CAP5-6,F2-F6        
	    PADATDIR=0X0;   //NO IO PORT
	    PBDATDIR=0X0;   //B6,B7 OUTPUT PORT
	    PCDATDIR=0X0;   //NO IO PORT
	    PDDATDIR=0X0;                  //NO IO PORT
	    PEDATDIR=0X0;   //E2-E6  INPUT PORT KEY
	    PFDATDIR=0X0;   //F2-F5 OUTPUT PORT,F6 INPUT PORT	
	    
}

void spi_initial()
{
     
		SPICCR=0X000F;  	//设置数据长度为16位,复位SPI
		SPICTL=0X000e;  	//主工作模式,正常的SPI时钟方式,允许发送
		SPIBRR=0X07F;   	//Set up the SPI to 250k speed.
		SPICCR=0X008F;  	//启动SPI时钟.
}

void ev_initial()
{

	    EVAIMRA=0X80;                  //开T1周期
	    EVAIMRB=0X0;                                     
	    EVAIMRC=0X0;                  
	    EVAIFRA=0XFFFF;                  //清中断标志
	    EVAIFRB=0XFFFF;
	    EVAIFRC=0XFFFF;
	    GPTCONA=0X0;                   // NO TCMPR                                   
	    T1PR=500;                     //T1周期25微秒    
	    T1CNT=0;                         
	    T1CON=0X0800;
	    ACTRA=0X999;                    //PWM2,4 ACTIVE LOW,OTHER LOW
	    DBTCONA=0XFE4;                    //NO DEADTIME 
	    COMCONA=0X08A00;              //CMPR UINT ON, ACTR ,ENABLE CMPR   
	    T1CMPR=0;                       
	    CMPR1=0;
	    CMPR2=0;
	    CMPR3=0;
	    T2CON=0X1870;                 //定向增减,enable,qep 
	    T2PR=0XFFFF;
	    T2CNT=0;

	    EVBIMRA=0X0;
	    EVBIMRB=0X0;
	    EVBIMRC=0X6;                     //CAP5,CAP6 INT
	    EVBIFRA=0XFFFF;
	    EVBIFRB=0XFFFF;
	    EVBIFRC=0XFFFF;
	    GPTCONB=0;
	    T4CON=0;       
	    T3CON=0;
	    T3CNT=0;  
	    T3PR=0;       
	    T4PR=0; 
	    T4CNT=0;
}

void cap_initial()
{

	    CAPCONA=0;                     //使能捕获单元,选T2,捕获双沿                                       //清捕获寄存器单元
	    CAP1FBOT=CAP1FBOT;                        
	    CAP1FBOT=CAP1FBOT;
	    CAP2FBOT=CAP2FBOT;
	    CAP2FBOT=CAP2FBOT;
	    CAP3FBOT=CAP3FBOT;
	    CAP3FBOT=CAP3FBOT;
	    CAPFIFOA=0;                     //防止出现丢脉冲的现象
	    
	    CAPCONB=0;  
	    CAP4FBOT=CAP4FBOT;                        
	    CAP4FBOT=CAP4FBOT;
	    CAP5FBOT=CAP5FBOT;
	    CAP5FBOT=CAP5FBOT;
	    CAP6FBOT=CAP6FBOT;
	    CAP6FBOT=CAP6FBOT;
	    CAPFIFOB=0;                     //防止出现丢脉冲的现象
}

void sci_initial()
{

       SCICCR=0X27;
       SCICTL1=0X3;
       SCICTL2=0X2;
       SCIHBAUD=0X0;
       SCILBAUD=0X2A;           
       SCICTL1=0X23; 
       SCIPRI=0X0;      
       
}

void xint_initial()
{
       XINT1CR=0X0;            
       XINT2CR=0X0;          
}

  
 

⌨️ 快捷键说明

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