📄 pwm_m.c
字号:
//
// TMDX ALPHA RELEASE
// Intended for product evaluation purposes
//
//###########################################################################
//
// FILE: DSP28_Example.c
//
// TITLE: DSP28 CPU_Timer example program.
//
//###########################################################################
//
// Ver | dd mmm yyyy | Who | Description of changes
// =====|=============|======|===============================================
// 0.55| 06 May 2002 | S.S. | EzDSP Alpha Release
// 0.57| 27 May 2002 | L.H. | No change
//###########################################################################
// Step 0. Include required header files
// DSP28_Device.h: device specific definitions #include statements for
// all of the peripheral .h definition files.
// DSP28_Example.h is specific for the given example.
#include "DSP28_Device.h"
#include "ext_inf.h"
void Moto(Uint16 tag);
interrupt void ISRTimer0(void);
void SendData(Uint16 data);
Uint16 numms=0;
void main(void)
{
/*初始化系统*/
InitSysCtrl();
/*关中断*/
DINT;
IER = 0x0000;
IFR = 0x0000;
/*初始化PIE控制寄存器*/
InitPieCtrl();
/*初始化PIE矢量表*/
InitPieVectTable();
/*初始化外设*/
InitPeripherals();
InitGpio();
EALLOW;
PieVectTable.TINT0 = &ISRTimer0;
EDIS;
/*设置CPU*/
ConfigCpuTimer(&CpuTimer0, 100, 500);
StartCpuTimer0();
/*开中断*/
IER |= M_INT1;
PieCtrl.PIEIER1.bit.INTx7=1;
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
*LedReg = 0xFF; // 关 LED
*Led8Lock = 0x07; // 灭数码管
SendData(0xFF);
while(1)
{
Moto(0);
}
}
void Moto(Uint16 tag)
{
if (tag)
{
if(numms==10) //10ms
{
GpioDataRegs.GPBDAT.bit.GPIOB0 = 0;
GpioDataRegs.GPBDAT.bit.GPIOB1 = 0;
GpioDataRegs.GPBDAT.bit.GPIOB2 = 0;
GpioDataRegs.GPBDAT.bit.GPIOB3 = 1;
}
if(numms==20) //20ms
{
GpioDataRegs.GPBDAT.bit.GPIOB0 = 1;
GpioDataRegs.GPBDAT.bit.GPIOB1 = 0;
GpioDataRegs.GPBDAT.bit.GPIOB2 = 0;
GpioDataRegs.GPBDAT.bit.GPIOB3 = 0;
}
if(numms==30) //30ms
{
GpioDataRegs.GPBDAT.bit.GPIOB0 = 0;
GpioDataRegs.GPBDAT.bit.GPIOB1 = 0;
GpioDataRegs.GPBDAT.bit.GPIOB2 = 1;
GpioDataRegs.GPBDAT.bit.GPIOB3 = 0;
}
if(numms==40) //40ms
{
GpioDataRegs.GPBDAT.bit.GPIOB0 = 0;
GpioDataRegs.GPBDAT.bit.GPIOB1 = 1;
GpioDataRegs.GPBDAT.bit.GPIOB2 = 0;
GpioDataRegs.GPBDAT.bit.GPIOB3 = 0;
}
if(numms>=40) numms=1;
}
else
{
if(numms==10) //10ms
{
GpioDataRegs.GPBDAT.bit.GPIOB0 = 0;
GpioDataRegs.GPBDAT.bit.GPIOB1 = 1;
GpioDataRegs.GPBDAT.bit.GPIOB2 = 0;
GpioDataRegs.GPBDAT.bit.GPIOB3 = 0;
}
if(numms==20) //20ms
{
GpioDataRegs.GPBDAT.bit.GPIOB0 = 0;
GpioDataRegs.GPBDAT.bit.GPIOB1 = 0;
GpioDataRegs.GPBDAT.bit.GPIOB2 = 1;
GpioDataRegs.GPBDAT.bit.GPIOB3 = 0;
}
if(numms==30) //30ms
{
GpioDataRegs.GPBDAT.bit.GPIOB0 = 1;
GpioDataRegs.GPBDAT.bit.GPIOB1 = 0;
GpioDataRegs.GPBDAT.bit.GPIOB2 = 0;
GpioDataRegs.GPBDAT.bit.GPIOB3 = 0;
}
if(numms==40) //40ms
{
GpioDataRegs.GPBDAT.bit.GPIOB0 = 0;
GpioDataRegs.GPBDAT.bit.GPIOB1 = 0;
GpioDataRegs.GPBDAT.bit.GPIOB2 = 0;
GpioDataRegs.GPBDAT.bit.GPIOB3 = 1;
}
if(numms>=40) numms=1;
}
}
interrupt void ISRTimer0(void)
{
PieCtrl.PIEACK.bit.ACK1=1;
numms++;
}
void SendData(Uint16 data)
{
Uint16 i,Temp;
Temp = 0x80;
for (i=0;i<8;i++)
{
if ((data & Temp)==0) ClrData;
else SetData;
Temp >>= 1;
ClrClk;
SetClk;
}
*Led8Lock = 0x03;
*Led8Lock = 0x07;
SetData;
}
//===========================================================================
// No more.
//===========================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -