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

📄 initial.c

📁 用凌阳16位单片机SPMC75F2413A来控制无刷直流电动机的详细程序包
💻 C
字号:

/* ========================================================================= */
/* The information contained herein is the exclusive property of             */
/* Sunplus Technology Co. And shall not be distributed, reproduced,          */
/* or disclosed in whole in part without prior written permission.           */
/*             (C) COPYRIGHT 2004 SUNPLUS TECHNOLOGY CO.                     */
/*                    ALL RIGHTS RESERVED                                    */
/* The entire notice above must be reproduced on all authorized copies.      */
/* ========================================================================= */
/* 																			 */
/* ========================================================================= */
/* Project Name  : AN_SPMC75_0003	            							 */
/* File Name     : Initial.c 												 */
/* Description   : 系统初始化												 */
/*                                                 						     */
/* Processor     : SPMC75F2413A											     */
/* Tools	     : u'nSP IDE tools v1.18.1A or later version				 */
/* ========================================================================= */
/* Revision																	 */
/* ========================================================================= */
/* Version       :  1.00   													 */
/* Date			 :	2005.9.1												 */
/* Modified by   :	更换正规的文件头和最新的头文件							 */
/* Description	 :												    		 */
/* ========================================================================= */


//=============================================//
//Include File
//=============================================//
#include	"BLDC.h"

//=============================================//
//PDC Initial and SPD CAP Initial etc.
//=============================================//
static void Timer_PDC_Init(void)
{
	P_IOB_Attrib->B.bit8 = 0;
	P_IOB_Dir->B.bit8    = 0;
	P_IOB_Buffer->B.bit8 = 0;
	
	P_IOB_Attrib->B.bit9 = 0;
	P_IOB_Dir->B.bit9 	 = 0;
	P_IOB_Buffer->B.bit9 = 0;
	
	P_IOB_Attrib->B.bit10 = 0;
	P_IOB_Dir->B.bit10 	  = 0;
	P_IOB_Buffer->B.bit10 = 0;

	P_POS0_DectCtrl->W = CW_TMR0_PDCR_SPLCK_FCKdiv32 |
						 CW_TMR0_PDCR_SPLMOD_Mode2   |
						 CW_TMR0_PDCR_PDEN | 100;

/*	P_POS0_DectCtrl->B.SPLMOD = CB_TMR0_PDCR_SPLMOD_Mode2;
	P_POS0_DectCtrl->B.PDEN   = CB_TMR0_PDCR_PDEN;
	P_POS0_DectCtrl->B.SPLCK  = CB_TMR0_PDCR_SPLCK_FCKdiv32;
	P_POS0_DectCtrl->B.SPDLY  = 100;*/	
	P_POS0_DectCtrl->B.SPLCNT = 10;

/* ------------------------------- */	
	P_TMR0_Ctrl->W = CW_TMR0_MODE_Normal  | CW_TMR0_CLEGS_Rising |
					 CW_TMR0_CKEGS_Rising | CW_TMR0_CCLS_PDR 	 |
					 CW_TMR0_SPCK_FCKdiv8 | CW_TMR0_TMRPS_FCKdiv64;
	
/*	P_TMR0_Ctrl->B.CCLS  = CB_TMR0_CCLS_PDR;
	P_TMR0_Ctrl->B.CLEGS = CB_TMR0_CLEGS_Rising;
	P_TMR0_Ctrl->B.CKEGS = CB_TMR0_CKEGS_Rising;
	P_TMR0_Ctrl->B.TMRPS = CB_TMR0_TMRPS_FCKdiv64;
	P_TMR0_Ctrl->B.MODE  = CB_TMR0_MODE_Normal;
	P_TMR0_Ctrl->B.SPCK  = CB_TMR0_SPCK_FCKdiv8;*/
	
	P_TMR0_INT->B.TCVIE = CB_TMR0_TCVIE_Enable;
/* ------------------------------- */
	P_TMR0_IOCtrl->B.IOAMODE = CB_TMR0_IOAMOD_Capture_PDR;
	P_TMR0_INT->B.PDCIE = CB_TMR0_PDCIE_Enable;
	
	P_TMR_Start->B.TMR0ST = CB_TMR_TMR0ST_Start;
}

//=============================================//
//120/180 Degree Wave Trigger For BLDC etc.
//=============================================//
static void Timer_BLDC_Init(void)
{
	P_TPWM_Write->W = CW_TWCR_TMR3WE;
	
	P_TMR3_Ctrl->W = CW_TMR3_MODE_PWM_Edge | 
					 CW_TMR3_TMRPS_FCKdiv1 |
					 CW_TMR3_CKEGS_Rising  |
					 CW_TMR3_CCLS_TPR;
					 
/*	P_TMR3_Ctrl->B.MODE = CB_TMR3_MODE_PWM_Edge;
	P_TMR3_Ctrl->B.TMRPS = CB_TMR3_TMRPS_FCKdiv1;
	P_TMR3_Ctrl->B.CKEGS = CB_TMR3_CKEGS_Rising;
	P_TMR3_Ctrl->B.CCLS = CB_TMR3_CCLS_TPR;*/

	P_TMR3_TPR->W  = CYCPWM;
	P_TMR3_TGRA->W = MINPWM;
	P_TMR_LDOK->W  = CW_TMR_LDOK0;

//	P_TMR3_INT->B.TPRIE = CB_TMR3_TPRIE_Enable;
	
	P_IOB_SPE->W = CW_IOB_W1N_SFR_EN | CW_IOB_V1N_SFR_EN |	\
				   CW_IOB_U1N_SFR_EN | CW_IOB_W1_SFR_EN  |	\
				   CW_IOB_V1_SFR_EN  | CW_IOB_U1_SFR_EN;
	
	P_TMR3_IOCtrl->W = CW_TMR3_IOAMOD_Output_10 |	\
					   CW_TMR3_IOBMOD_Output_10 |	\
					   CW_TMR3_IOCMOD_Output_10;
	
	P_TMR3_OutputCtrl->W = 0;			   
	P_TMR3_OutputCtrl->B.POLP = CB_TMR3_POLP_Active_High;

	P_TMR_Output->W = CW_TMR_TMR3AOE_Enable | CW_TMR_TMR3BOE_Enable |	\
					  CW_TMR_TMR3COE_Enable | CW_TMR_TMR3DOE_Enable |	\
					  CW_TMR_TMR3EOE_Enable | CW_TMR_TMR3FOE_Enable;

	P_TMR_Start->B.TMR3ST = CB_TMR_TMR3ST_Start;	
}

//=============================================//
//Fault input protect function
//=============================================//
static void Timer_Fault_Init(void)
{
/*	P_Fault1_Release->W = 0xAA55;
	P_Fault1_Release->W = 0x55AA;
	P_Fault1_Ctrl->W = CW_TMR3_FCR_OCE  | 	\
					   CW_TMR3_FCR_OCIE |	\
				 	   CW_TMR3_FCR_OCLS_High;*/

	P_Fault1_Release->W = 0x55AA;
	P_Fault1_Release->W = 0xAA55;
	P_Fault1_Ctrl->B.FTCNT = 15;
	
	P_Fault1_Ctrl->W |= CW_TMR3_FCR_FTPINIF | 	\
						CW_TMR3_FCR_FTPINIE ;
					/*	CW_TMR3_FCR_FTPINE;	*/
						
	P_IOB_Attrib->B.bit6 = 0;
	P_IOB_Dir->B.bit6 	 = 0;
	P_IOB_Data->B.bit6 	 = 1;
	P_IOB_SPE->W |= CW_IOB_FTIN1_SFR_EN;
}

//=============================================//
//
//=============================================//
static void Spmc75_CMT_Init(void)
{
	P_CMT_Start->W = 0x0000;

	P_CMT_Ctrl->W = 0x0000;
	P_CMT_Ctrl->B.CKA 	= CB_CKA_FCK_16;
	P_CMT_Ctrl->B.CM0IE = CB_CMT0_INT_EN;
	P_CMT_Ctrl->B.CM0IF = CB_CLEAR_CM0IF;
	
	P_CMT0_TPR->W = 2929;//512Hz@24M/16

/*	P_CMT_Ctrl->B.CKB = CB_CKB_FCK_1;
	P_CMT_Ctrl->B.CM1IE = CB_CMT1_INT_EN;
	P_CMT_Ctrl->B.CM1IF = CB_CLEAR_CM1IF;
	
	P_CMT1_TPR->W = 6000;*/
	
	P_CMT_Start->B.ST0 = CB_CMT0_Start;	
//	P_CMT_Start->B.ST1 = CB_CMT1_Start;
}

/*=================================================================*/
/*   Increment PID计算部分
/*=================================================================*/
static void IncPIDInit(void)
{
	sptr->IncPoint  = MINPWM;
    sptr->LastError = 0;
    sptr->PrevError = 0;
	
	sptr->Proportion = KPP;
    sptr->Integral   = KPI;
    sptr->Derivative = KPD;
    sptr->SetPoint   = SETSPD;
}

//=============================================//
//
//=============================================//
void Spmc75_System_Init(void)
{
	Disable_FIQ_IRQ();
	P_IOB_Attrib->B.bit14 	= 1;
	P_IOB_Dir->B.bit14 		= 1;
	P_IOB_Buffer->B.bit14	= 1;
	P_IOB_Data->B.bit14 	= 0;
	
	IncPIDInit();
	Spmc75_CMT_Init();
	Timer_BLDC_Init();
	Timer_PDC_Init();
	MC75_DMC_UART_Setup(9600);	
	Timer_Fault_Init();	
	INT_FIQ_IRQ();
}
//=============================================//
//	*END*
//=============================================//

⌨️ 快捷键说明

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