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

📄 dsp2812-extad.c

📁 TI公司TMS320F2812的例程和说明文档
💻 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 int ch;

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();
	
	InitGpio();
	ch=0;
	
	
	//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_A = 0;
	adc_current_cannel_B = 0;
	ptr_A = 0;
	ptr_B = 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_A = 0;
	adc_current_cannel_B = 0;
}

interrupt void EXTERN_AD_INTERRUPT(void)
{
	dataresult = *EXT_ADC_READ;
	if(dataresult < ZERO_POINT)
	{
		dataresult = dataresult | 0x8000;
	}
	else
	{
		dataresult = dataresult & 0x7fff;
	}
	
	if(ch==0)
	{
		switch(adc_current_cannel_A)
		{
			case 0:
				ad_result0_A[ptr_A]=dataresult;
				break;
			case 1:
				ad_result1_A[ptr_A]=dataresult;
				break;			
			case 2:
				ad_result2_A[ptr_A]=dataresult;
				break;				
			case 3:
				ad_result3_A[ptr_A]=dataresult;
				break;		
			case 4:
				ad_result4_A[ptr_A]=dataresult;
				break;
			case 5:
				ad_result5_A[ptr_A]=dataresult;
				break;
			case 6:
				ad_result6_A[ptr_A]=dataresult;
				break;
			case 7:
				ad_result7_A[ptr_A]=dataresult;
				break;
			case 8:
				ad_result8_A[ptr_A]=dataresult;
				break;
			case 9:
				ad_result9_A[ptr_A]=dataresult;
				break;
			case 10:
				ad_result10_A[ptr_A]=dataresult;
				break;
			case 11:
				ad_result11_A[ptr_A]=dataresult;
				break;
			case 12:
				ad_result12_A[ptr_A]=dataresult;
				break;	
			case 13:
				ad_result13_A[ptr_A]=dataresult;
				break;
			case 14:
				ad_result14_A[ptr_A]=dataresult;
				break;
			case 15:
				ad_result15_A[ptr_A]=dataresult;
				break;
			default:
				break;
		}
		if(adc_current_cannel_A == 15)
		{
			adc_current_cannel_A = 0;
			ch=GpioDataRegs.GPBDAT.bit.GPIOB13 = 1;

			ptr_A++;
			if(ptr_A==ADC_N) ptr_A = 0;
		}
		else adc_current_cannel_A++;
	}
	else
	{
		switch(adc_current_cannel_B)
		{
			case 0:
				ad_result0_B[ptr_B]=dataresult;
				break;
			case 1:
				ad_result1_B[ptr_B]=dataresult;
				break;			
			case 2:
				ad_result2_B[ptr_B]=dataresult;
				break;				
			case 3:
				ad_result3_B[ptr_B]=dataresult;
				break;		
			case 4:
				ad_result4_B[ptr_B]=dataresult;
				break;
			case 5:
				ad_result5_B[ptr_B]=dataresult;
				break;
			case 6:
				ad_result6_B[ptr_B]=dataresult;
				break;
			case 7:
				ad_result7_B[ptr_B]=dataresult;
				break;
			case 8:
				ad_result8_B[ptr_B]=dataresult;
				break;
			case 9:
				ad_result9_B[ptr_B]=dataresult;
				break;
			case 10:
				ad_result10_B[ptr_B]=dataresult;
				break;
			case 11:
				ad_result11_B[ptr_B]=dataresult;
				break;
			case 12:
				ad_result12_B[ptr_B]=dataresult;
				break;	
			case 13:
				ad_result13_B[ptr_B]=dataresult;
				break;
			case 14:
				ad_result14_B[ptr_B]=dataresult;
				break;
			case 15:
				ad_result15_B[ptr_B]=dataresult;
				break;
			default:
				break;
		}
		if(adc_current_cannel_B == 15)
		{
			adc_current_cannel_B = 0;
			ch=GpioDataRegs.GPBDAT.bit.GPIOB13 = 0;
			
			ptr_B++;
			if(ptr_B==ADC_N) ptr_B = 0;
		}
		else adc_current_cannel_B++;
	}	

	
	PieCtrl.PIEACK.bit.ACK1 = 1;
	EINT;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -