📄 ad_da.c
字号:
#include "ICETEK-C6713-A.h"
#define AD_CTL *(unsigned char*)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 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
void interrupt Timer( void );
void initInterrupt(void);
void DAcontrol(void) ;
unsigned short int a,b,c,d,e,f;
int nChannelA0[256],nChannelA1[256];
int nAD0[256],nAD1[256];
int nPointNumber;
int loop;
main()
{
loop=0;
nPointNumber=0;
INT_DisableGlobal();
// PLL_Init();
init_emif(); // 初始化emif
INT_EnableGlobal();
initInterrupt();
while ( 1 )
{
}
}
void interrupt Timer( void ) // 控制 AD 采数
{
int i;
int nWork;
a= AD_CHA0 ;
b= AD_CHA1 ;
c= AD_CHB0 ;
d= AD_CHB1 ;
e= AD_CHC0 ;
f= AD_CHC1 ;
if ( (a&0x8000)&&(b&0x8000) ) // 数据有效性判断
{
a<<=4; nWork=a; nWork/=16; // 去除高4位
nChannelA0[nPointNumber]=nWork;
// b<<=4; nWork=b; nWork/=16; // 去除高4位
// nChannelA1[nPointNumber]=nWork;
nPointNumber++;
DAcontrol();
if ( nPointNumber>=256 )
{
for ( i=0;i<256;i++ )
{
nAD0[i]=nChannelA0[i];
// nAD1[i]=nChannelA1[i];
}
//DAcontrol();
nPointNumber=0; // 软中断位置
}
}
AD_CTL = 0x0; // 发送控制脉冲信号,进行下次转换 如果只需A0,A1通道只需送6即可
for (i=0;i<20;i++);
AD_CTL = 0x7; // 产生高电平
return;
}
void DAcontrol(void) // 控制 DA 输出
{ //short i;
DA_DATA_L=nChannelA0[loop]&0xff;
DA_DATA_H=((nChannelA0[loop]>>8)&0x0f)|DA_CHN2;
DA_CTL=0;
loop++;
if(loop==256)
loop=0;
//Delay(2);
return;
}
void initInterrupt(void)
{
// 设置中断控制寄存器
CSR&=0xfffffffe; // 关中断 GIE=0
ISTP=0x00000c00; // 重置中断向量表到0C00h
IMH=0x08000000; // 指定Timer1产生int15中断
IML=0;
ICR=0xff; // 清除等待的中断
IER=0x8003; // 使能int15中断
// 设置定时器产生中断信号的频率
TIMER1PRD=0x100; // 定时器1的周期=0x1000
TIMER1CTL=0x3c0; // 开始计数
CSR=CSR|1; // 开中断
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -