📄 rtdx.c
字号:
#include <stdio.h>
#include "DSP28_Device.h" /* fprintf(), puts() */
#include <stdlib.h> /* abort() */
#include <rtdx.h> /* RTDX */
#include "target.h" /* TARGET_INITIALIZE() */
#include "math.h"
/* TARGET_INITIALIZE() */
//#include "math.h"
#define CHA1 0x0800fd
#define CHA2 0x0800fe
#define FIL_LEN 3
#pragma DATA_SECTION(DA_addrx,".da_addra");
#pragma DATA_SECTION(DA_addrxx,".da_addrb");
int *p1,*p2,*ad1,*ad2;
int DA_addrx;
int DA_addrxx;
RTDX_CreateOutputChannel(ochan);
RTDX_CreateInputChannel(ichan);
int filter_median(int *p)
{
/* int x,i,j;
for(i=0;i<FIL_LEN;i++)
{
x=p[i];
for(j=i+1;j<FIL_LEN;j++)
{
if(p[j]<x)
{
x=p[j];
p[j]=p[i];
p[i]=x;
}
}
}
return (p[FIL_LEN/2-1]+p[FIL_LEN/2]+p[FIL_LEN/2+1])/3;
// return p[FIL_LEN/2];
*/
int x=0,i;
for(i=0;i<FIL_LEN;i++)
x+=p[i];
return x/FIL_LEN;
}
void main( void )
{
unsigned int response,counter;
int i,k,j;
unsigned int IQ[2];
unsigned int test[11]={0,409,819,1229,1638,2048,2457,2867,3277,3686,4095};
response=555;
p1=(int *)CHA1;
p2=(int *)CHA2;
ad1=(int *)0x0800fc;
ad2=(int *)0x0800ff;
InitSysCtrl(); //必要时,需要修改其中的相关寄存器配置,在使用时需查看;配置是否满足需求
//////////////////////////////////////////////////////////////////
// Initializing GPIO
EALLOW;
GpioMuxRegs.GPAMUX.all=0xfff0; // 配置端口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 Initialized OK !!!
///////////////////////////////////////////////////////////////////
//// Interrupt Control and Initializing ///////////////////////////
DINT;
IER=0x0000;
IFR=0x0000;
// InitPieCtrl();
// InitPieVectTable();
InitXintf();
XIntruptRegs.XINT1CR.all=0x0003; // 允许外设中断,触发方式为负边沿
XIntruptRegs.XINT2CR.all=0x0002;
PieCtrl.PIEIER1.bit.INTx3=1;
PieCtrl.PIEIER1.bit.INTx4=1;
IER|=0x0001;
EINT;
//// Interrupt configured OK !!!
////////////////////////////////////////////////////////////////////
// GENERATE SQUARE SIGNAL: configure the T1 PR
EvaRegs.T1PR=0x0001; // Timer1 period
EvaRegs.T1CMPR=0x0001; // Timer1 compare
EvaRegs.T1CNT=0x0000; //Timer1 counter
EvaRegs.T1CON.all=0x9042;
EvaRegs.GPTCONA.all=0x0042;
////////////////////////////////////////////////////////////////////
TARGET_INITIALIZE();
RTDX_Init();
RTDX_enableOutput(&ochan);
RTDX_enableInput(&ichan);
/////////////////////////////////////////////
GpioDataRegs.GPADAT.bit.GPIOA0=1;
for(i=0;i<100;i++) ;
GpioDataRegs.GPADAT.bit.GPIOA0=0;
for(i=0;i<100;i++) ;
i=4095;
/* while(1){
for(i=0;i<4096;i++)
{
DA_addrx=i;
DA_addrxx=i;
}
}
*/
DA_addrx=i;
DA_addrxx=i;
counter=0;
DA_addrx=i;
DA_addrxx=i;
while(1)
{
/* for(j=0;j<11;j++)
{
for(i=0;i<11;i++)
{
DA_addrx=test[i];
DA_addrxx=test[j];
}
}
*/
if ( (RTDX_read( &ichan,IQ, sizeof(IQ) )) != sizeof(IQ))
{
counter++;
fprintf(stderr,"\nError: RTDX_read() expired times:%d\n",counter);
continue;
}
DA_addrx=IQ[0];
DA_addrxx=IQ[1];
if ( !RTDX_write( &ochan, &response, sizeof(response) ) )
{
fprintf(stderr,"\nError:%d RTDX_write() failed!\n",i);
abort();
}
/*
switch(command)
{
case 125:
if ( (RTDX_read( &ichan,IQ, sizeof(IQ) )) != sizeof(IQ))
{
fprintf(stderr,"\nError: RTDX_read() from matlab error\n");
abort();
}
DA_addrx=IQ[0];
DA_addrxx=IQ[1];
break;
default:
break;
}
*/
} // end while
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -