📄 ad.c
字号:
#include "ICETEK-C6713-A.h"
#define AD_CTL *(unsigned char*)0x90100006//0x90100006进行通道选择和发送转换信号
#define AD_DATA_BASE 0x90140000
#define ORDER 2
#define AD_CHA0 *(unsigned short int*)(AD_DATA_BASE+0*ORDER)
#define AD_CHC0 *(unsigned short int*)(AD_DATA_BASE+1*ORDER)
#define AD_CHB0 *(unsigned short int*)(AD_DATA_BASE+2*ORDER)
#define AD_CHA1 *(unsigned short int*)(AD_DATA_BASE+4*ORDER)
#define AD_CHC1 *(unsigned short int*)(AD_DATA_BASE+5*ORDER)
#define AD_CHB1 *(unsigned short int*)(AD_DATA_BASE+6*ORDER)
#define LED *(char *)0x90100000
void interrupt Timer( void );
void initInterrupt(void);
unsigned short int a,b,c,d,e,f;
short int nChannelA0[256],nChannelA1[256];
short int nAD0[256],nAD1[256];
char cAD0[256],cAD1[256];
short int dAD0[256],dAD1[256];
short fAD0[256];
int nPointNumber=0;
//short int CVSDcounter=256;
short elliptic(short InData);
char CVSDCoder(short InData);
short CVSDDecoder(char InData);
//DA
#define DA_DATA_H *(char *)0x90100008
#define DA_DATA_L *(char *)0x9010000A
#define DA_CTL *(char *)0x9010000c
#define DA_CHN1 0x0
#define DA_CHN2 0x40
#define DA_CHN3 0x80
#define DA_CHN4 0xc0
short int dai=0;
main()
{
// unsigned char dbScanCode;
char led;
LED =0x5;
//nPointNumber=0;
reset_pll();
init_pll(); //cpu工作于200MHZ
init_emif(); // 初始化emif
InitCTR(); // 初始化ICETEK-CTR
initInterrupt();
while (1)
{
led= LED;
LED =~led;
}
}
void interrupt Timer( void )
{
int i;
short int nWork;
a= AD_CHA0 ;
b= AD_CHA1 ;
if (a&0x8000) // 数据有效性判断
{
a<<=4; nWork=a; nWork/=16; // 去除高4位
nChannelA0[nPointNumber]=nWork+2048;
cAD0[nPointNumber]=CVSDCoder(nChannelA0[nPointNumber]);//CVSDCoder(nChannelA0[CVSDcounter]);//调用编码子程序//cAD0[CVSDcounter]=CVSDCoder(nAD0[CVSDcounter]);//调用编码子程序
dAD0[nPointNumber]=CVSDDecoder(cAD0[nPointNumber]);//dAD0[CVSDcounter]=CVSDDecoder(cAD0[CVSDcounter]);// dAD0[CVSDcounter]=CVSDDecoder(cAD0[CVSDcounter]);//调用解码子程序
fAD0[nPointNumber]=elliptic(dAD0[nPointNumber]);
}
AD_CTL = 0x0; // 发送控制脉冲信号,进行下次转换 如果只需A0,A1通道只需送6即可
for (i=0;i<50;i++);
AD_CTL = 0x7; // 产生高电平
//DA
DA_DATA_L=(fAD0[nPointNumber])&0xff;
DA_DATA_H=(((fAD0[nPointNumber])>>8)&0x0f)|DA_CHN1;
DA_CTL=0;//启动DA
}
void initInterrupt(void)
{
// 设置中断控制寄存器
CSR&=0xfffffffe; // 关中断 GIE=0
ISTP=0x00000c00; // 重置中断向量表到0C00h
IMH=0x08000000; // 指定Timer1产生int15中断
IML=0;
ICR=0xff; // 清除等待的中断
IER=0x8003; // 使能int15中断
// 设置定时器产生中断信号的频率
TIMER1PRD=0x0C32;//0x0619;//0x0C32; // 定时器1的周期=0x186a,即8KHZ;实际使用32KHZ
TIMER1CTL=0x3c0; // 开始计数
CSR=CSR|1; // 开中断
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -