📄 example_28xevpwm.c
字号:
#include <stdio.h>
#include "DSP28_Device.h" /* fprintf(), puts() */
#include <stdlib.h> /* abort() */
#include <rtdx.h> /* RTDX */
#include "target.h" /* TARGET_INITIALIZE() */
/* Declare and initialize an output channel called "ochan" */
RTDX_CreateOutputChannel(ochan);
void main( void )
{
unsigned int i;
/* Target initialization for RTDX */
EALLOW;
// On TMX samples, to get the best performance of on chip RAM blocks M0/M1/L0/L1/H0 internal
// control registers bit have to be enabled. The bits are in Device emulation registers.
DevEmuRegs.M0RAMDFT = 0x0300;
DevEmuRegs.M1RAMDFT = 0x0300;
DevEmuRegs.L0RAMDFT = 0x0300;
DevEmuRegs.L1RAMDFT = 0x0300;
DevEmuRegs.H0RAMDFT = 0x0300;
// Disable watchdog module
SysCtrlRegs.WDCR= 0x0068;
// Initalize PLL
SysCtrlRegs.PLLCR = 0xA;
// Wait for PLL to lock
for(i= 0; i< 5000; i++){}
// HISPCP/LOSPCP prescale register settings, normally it will be set to default values
SysCtrlRegs.HISPCP.all = 0x0001;
SysCtrlRegs.LOSPCP.all = 0x0002;
// Peripheral clock enables set for the selected peripherals.
SysCtrlRegs.PCLKCR.bit.EVAENCLK=1;
SysCtrlRegs.PCLKCR.bit.EVBENCLK=1;
SysCtrlRegs.PCLKCR.bit.SCIENCLKA=1;
SysCtrlRegs.PCLKCR.bit.SCIENCLKB=1;
SysCtrlRegs.PCLKCR.bit.MCBSPENCLK=1;
SysCtrlRegs.PCLKCR.bit.SPIENCLK=1;
SysCtrlRegs.PCLKCR.bit.ECANENCLK=1;
SysCtrlRegs.PCLKCR.bit.ADCENCLK=1;
// 初始化 GPIO
GpioMuxRegs.GPAMUX.all=0xffff; // 配置端口A,作为PWM clock和GPIO
GpioMuxRegs.GPADIR.all=0xffff;
GpioMuxRegs.GPAQUAL.all=0x0000;
GpioMuxRegs.GPEMUX.all=0x0003; // 配置端口E为外部中断XINT1,XINT2
GpioMuxRegs.GPEDIR.all=0x0003;
GpioMuxRegs.GPEQUAL.all=0x0000;
GpioMuxRegs.GPFMUX.all=0x0000;
GpioMuxRegs.GPFDIR.all=0x0005;
EDIS;
// GPIO CONFIGURE OK
// GpioDataRegs.GPFCLEAR.all=0x0001;
// asm("RPT #200||NOP");
// GpioDataRegs.GPFSET.all=0x0001;
DINT;
IER=0x0000;
IFR=0x0000;
InitPieCtrl();
InitPieVectTable();
// 允许外设中断,触发方式为负边沿
XIntruptRegs.XINT1CR.all=0x0001;
XIntruptRegs.XINT2CR.all=0x0001;
PieCtrl.PIEIER1.bit.INTx3=1;
PieCtrl.PIEIER1.bit.INTx4=1;
IER|=0x0001;
EINT;
// GENERATE SQUARE SIGNAL
//step1, 初始化定时器,初始化EVA Timer1
EvaRegs.T1PR=0x000e; // Timer1 period
EvaRegs.T1CMPR=0x0008; // Timer1 compare
EvaRegs.T1CNT=0x0000; //Timer1 counter
EvaRegs.T1CON.all=0x9042;
//step2,建立T1PWM 和 T2PWM 有比较逻辑驱动T1/T2 PWM
EvaRegs.GPTCONA.all=0x0042;
//step3 使能PWM1-PWM6 的比较器
/* EvaRegs.CMPR1=0x0008;
EvaRegs.ACTR.all=0x000a;
EvaRegs.DBTCONA.all=0x0000; // 禁止死区设置
// EvaRegs.COMCONA.bit.FCOMPOE=1;
// EvaRegs.COMCONA.bit.CENABLE=1;
EvaRegs.COMCONA.all=0x8200;
EvbRegs.ACTRB.all=0x0006;
EvbRegs.DBTCONB.all=0x0000;
EvbRegs.COMCONB.all=0xA600; */
// TARGET_INITIALIZE();
// Enable the channels
// RTDX_enableInput(&ichan);
// RTDX_enableOutput(&ochan);
TARGET_INITIALIZE();
RTDX_enableOutput(&ochan);
for ( i = 0; i < 100; i++ ) {
if ( !RTDX_write( &ochan, &i, sizeof(i) ) ) {
fprintf(stderr,
"\nError: RTDX_write() failed!\n");
abort();
}
while ( RTDX_writing != NULL ) {
#if RTDX_POLLING_IMPLEMENTATION
RTDX_Poll();
#endif
}
}
RTDX_disableOutput(&ochan);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -