📄 main.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 + -