⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad.c

📁 TMS320C6713的16kCVSD编解码
💻 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 + -