main.c

来自「SPMC75 CPU 」· C语言 代码 · 共 56 行

C
56
字号
//============================================================
//	工程名称:	SPWM-300
//	功能描述:	300点SPWM
//	组成文件:	main.c
//				spmc75f2413a.h, unspmacro.h
//	完成日期:	2006-5-18
//============================================================
#include "Spmc75_regs.h"
#include "unspmacro.h"

	void MCP4_T_PWM_init(void);
	//正弦表,300个点,取值范围在50~750
	//如果TPR=1200,中心PWM计数方式,计数周期2400,
	//没次TPR中断更新TGRA~TGRC值,生成50Hz SPWM波
	//载波频率为15K
	
	extern int iSin_TAB[];
	int phases_Add_U = 0;    //U相相位累加值
	int	phases_Add_V = 100;  //V相相位累加值
	int phases_Add_W = 200;	 //W相相位累加值
	
	int main(void)
	{
		MCP4_T_PWM_init();
		INT_IRQ(); 
		while(1);	
	}

//=================================================================================================
// Description: IRQ3 interrupt source is XXX,used to XXX
// Notes: 已没有问题
//=================================================================================================
	void IRQ3(void) __attribute__ ((ISR));
	void IRQ3(void)
	{
		if(P_TMR4_Status->B.TPRIF)
		{ 
		  //对MCP3、MCP4的各寄存器进行设置时,一定要先对P_TPWM_Write寄存器进行设置
		  //推荐先读取P_TPWM_Write的值,再与0x5A01或0x5A02进行或运算,再写回P_TPWM_Write					
		  P_TPWM_Write->W |= 0x5A02;    //MCP4各控制寄存器写使能
		  
		  if(++phases_Add_U >= 300)phases_Add_U -= 300;
		  if(++phases_Add_V >= 300)phases_Add_V -= 300;
		  if(++phases_Add_W >= 300)phases_Add_W -= 300;
		  P_TMR4_TGRA->W = iSin_TAB[phases_Add_U];	   //设定占空比 
		  P_TMR4_TGRB->W = iSin_TAB[phases_Add_V];     //设定占空比
	 	  P_TMR4_TGRC->W = iSin_TAB[phases_Add_W];     //设定占空比
	  	  //注意:对TGRA--TGRC数据进行改写时,应该设定P_TMR_LDOK的值,以将改写值载入相应寄存器
	 	  P_TMR_LDOK->W = 0x00AA;  
	 	  P_TMR4_Status->B.TPRIF = 1;
	 	        
		}
	}


⌨️ 快捷键说明

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