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

📄 main.c

📁 spwm(用凌阳调试过
💻 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_0021			            					 */
/* File Name     : main.c 													 */
/* Description   : Edge-Aligned PWM Generation of MCP Timer Module			 */
/*                												             */
/* 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 "Spmc75_regs.h"
#include "unspmacro.h"
int Data[3];
int DIR[3];
void Daly_Time(int Time);
main()
{
	int i;
	Disable_FIQ_IRQ();								//关闭所有中断	
	P_IOB_Dir->W |= 0x00bf;	
	P_IOB_Attrib->W |= 0x00bf;
	P_IOB_Buffer->W &= 0xff00;
	P_IOB_Buffer->W |= 0x0047;
	P_IOB_SPE->W |= 0x003f;							//设置PWM输出的IO口
	P_TPWM_Write->W |= CW_TWCR_TMR3WE;				//允许TMR3的寄存器修改
	P_TMR3_Ctrl->B.MODE = CB_TMR3_MODE_PWM_Edge;
	P_TMR3_Ctrl->B.CCLS = CB_TMR3_CCLS_TPR;
	P_TMR3_Ctrl->B.CKEGS = CB_TMR3_CKEGS_Rising;
	P_TMR3_Ctrl->B.TMRPS = CB_TMR3_TMRPS_FCKdiv1;
	//设置定时器工作模式为单边对称PWM发生模式,定时计数器的清零时钟选为周期匹配
	//信号,计数边沿选用上升沿,计数时钟选为Fosc。
	P_TMR3_OutputCtrl->B.DUTYMODE = CB_TMR3_DUTYMODE_Independent;
	P_TMR3_OutputCtrl->B.POLP = CB_TMR3_POLP_Active_High;
	P_TMR3_OutputCtrl->W |= CW_TMR3_UOC_Mode0 + CW_TMR3_VOC_Mode0;
	P_TMR3_OutputCtrl->W |= CW_TMR3_WOC_Mode0 + CW_TMR3_WPWM_Out_PWM;
	P_TMR3_OutputCtrl->W |= CW_TMR3_VPWM_Out_PWM + CW_TMR3_UPWM_Out_PWM;
	P_TMR3_OutputCtrl->B.SYNC = CB_TMR3_SYNC_NoSync;
	P_TMR3_IOCtrl->W = CW_TMR3_IOCMOD_Output_01+CW_TMR3_IOBMOD_Output_01;
	P_TMR3_IOCtrl->W |= CW_TMR3_IOAMOD_Output_01;
	//设置PWM发生方式为三路独立方式,信号极性为高电平有效,PWM比较模式选为正常的
	//双极性方式,输出模式选为方式1
	P_TMR3_TPR->W = 2400;    
	//定时周期值设置为2400,由于工作在双边计数方式,PWM的周期为4800
	P_TMR_Start->B.TMR3ST = CB_TMR_TMR3ST_Start;    //启动定时器3
	P_TMR3_TGRA->W = 800;
	P_TMR3_TGRB->W = 1600;
	P_TMR3_TGRC->W = 0;
	P_TMR_LDOK->W |= CW_TMR_LDOK0;					//设置PWM比较数据入缓冲器,而后启动同步更新
	P_TMR_Output->W |= 0x003f;						//使能PWM的IO输出功能。
	DIR[0] = 0;
	DIR[1] = 0;
	DIR[2] = 0;
	Data[0] = 800;
	Data[1] = 1600;
	Data[2] = 0;
	while(1)
	{
		Daly_Time(100);
		for(i=0;i<3;i++)
		{
			if(DIR[i] == 0)
			{
				Data[i] += 100;
				if(Data[i] > 2400)
				{
					DIR[i] = 1;
					Data[i] = 4800 - Data[i];
				}
			}
			else
			{
				Data[i] -= 100;
				if(Data[i] < 0)
				{
					DIR[i] = 0;
					Data[i] = -Data[i];
				}
			}
		}
		P_TMR3_TGRA->W = Data[0];
		P_TMR3_TGRB->W = Data[1];
		P_TMR3_TGRC->W = Data[2];
		P_TMR_LDOK->W |= CW_TMR_LDOK0;
	}
}

void Daly_Time(int Time)
{
	int i;
	while(--Time > 0)
	{
		for(i = 0;i < 1000;i++)
		{ ;}
	}
}

⌨️ 快捷键说明

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