📄 dsp2812-extad.c
字号:
/*************************************************************************
filename: DPS2812-AD.C
designer: 戴展波
date: 2004/12/17
*************************************************************************/
#include <string.h>
#include <math.h>
#include "DSP28_Device.h"
#include "DPS2812_FFT.h"
#include "DPS2812_REGISTER.h"
unsigned int adc_dealdata_flag;
unsigned long timer0_period;
unsigned long timer1_period;
unsigned long timer2_period;
void InitVariable(void);
void addata_deal(void);
interrupt void EXTERN_AD_INTERRUPT(void);
void main(void)
{
//初始化定值
InitVariable();
//初始化系统控制
InitSysCtrl();
//关总中断
DINT;
IER = 0x0000;
IFR = 0x0000;
//初始化PIE控制
InitPieCtrl();
//初始化PIE矢量表
InitPieVectTable();
//初始化外设
InitPeripherals();
//初始化外部AD
init_extern_ad();
/*初始化EV*/
InitEv();
//AD中断服务子程序
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.XINT1 = &EXTERN_AD_INTERRUPT; //XINT1_ISR;
EDIS; // This is needed to disable write to EALLOW protected registers
//开启IER
IER |= M_INT1;
//使能总中断
EINT;
//使能全局实时中断DBGM
ERTM;
for(;;)
{
if(adc_dealdata_flag == 1)
{
//本次转换完成
adc_dealdata_flag = 0;
}
KickDog();
}
}
void InitVariable(void)
{
adc_current_cannel = 0;
ptr = 0;
preptr = 0;
ptrint = 0;
halfptr = 0;
halfpreptr = 0;
halfptrint = 0;
adc_dealdata_flag = 0;
//timer2_period = 150000000 / 50 / ADC_N;
}
void addata_deal(void)
{
}
/*********************************************************************
函数名: void EEPROM_Write_Enable(void)
目的: EEPROM的写使能
输入: 无
输出: 无
*********************************************************************/
void init_extern_ad(void)
{
unsigned int i;
//清空ADC中断
i = *EXT_ADC_READ;
//清掉CPLD的AD
*EXT_ADC_MODE = 0;
//设置ADC模式
*EXT_ADC_MODE = 0x1F;
adc_cannel = 0x0F;
adc_current_cannel = 0;
}
interrupt void EXTERN_AD_INTERRUPT(void)
{
dataresult = *EXT_ADC_READ;
if(dataresult < ZERO_POINT)
{
dataresult = dataresult | 0x8000;
}
else
{
dataresult = dataresult & 0x7fff;
}
switch(adc_current_cannel)
{
case 0:
ad_result1[ptr] = dataresult;
break;
case 1:
ad_result2[ptr] = dataresult;
break;
case 2:
ad_result3[ptr] = dataresult;
break;
case 3:
ad_result4[ptr] = dataresult;
break;
case 4:
ad_result5[ptr] = dataresult;
break;
case 5:
ad_result6[ptr] = dataresult;
break;
case 6:
ad_result7[ptr] = dataresult;
break;
case 7:
ad_result8[ptr] = dataresult;
break;
case 8:
ad_result9[ptr] = dataresult;
break;
case 9:
ad_result10[ptr] = dataresult;
break;
case 10:
ad_result11[ptr] = dataresult;
break;
case 11:
ad_result12[ptr] = dataresult;
break;
case 12:
ad_result13[ptr] = dataresult;
break;
case 13:
ad_result14[ptr] = dataresult;
break;
case 14:
ad_result15[ptr] = dataresult;
break;
case 15:
ad_result16[ptr] = dataresult;
break;
default:
break;
}
if(adc_current_cannel == adc_cannel)
{
adc_current_cannel = 0;
ptr++;
if(ptr == ADC_N)
{
ptr = 0;
}
//设置标志位
adc_dealdata_flag = 1;
}
else
{
adc_current_cannel++;
}
PieCtrl.PIEACK.bit.ACK1 = 1;
EINT;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -