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

📄 adc_fir.c

📁 AD转换代码 采样2812。。。。。。。。。。。。。。。。。
💻 C
字号:

#include "DSP281x_Device.h"   

// 函数声明

void Gpio_select(void);
void InitSystem(void);
interrupt void T1_Compare_isr(void); 		// EVA-T1 比较中断
interrupt void ADC_FIR_INT_ISR(void);	// ADC 服务中断

void main(void)
{
	InitSystem();		// 初始化DSP内核寄存器
	
	Gpio_select();		// 设置GPIO工作模式
	
	InitPieCtrl();		// 初始化 PIE单元 ( code : DSP281x_PieCtrl.c)
	
	InitPieVectTable(); // 初始化PIE中断向量表 ( code : DSP281x_PieVect.c )
	
	InitAdc();          // 初始化ADC
	
	// 从新映射EVA-T1比较和ADC中断
	EALLOW; 
   	PieVectTable.T1CINT = &T1_Compare_isr;    
   	PieVectTable.ADCINT = &ADC_FIR_INT_ISR;
   	EDIS;    
	
    // 使能EVA-T1CMPR INT (位于组2中断5)
   	PieCtrlRegs.PIEIER2.bit.INTx5 = 1;

	// 使能CPU INT1 (ADC) 和INT2(EVA-Timer1 比较):
    IER |= 3;
    
	// 全局使能中断
   	EINT;   
   	ERTM;   
   	
   	// 配置事件管理器EVA
    // T1/T2驱动T1PWM / T2PWM输出逻辑
    EvaRegs.GPTCONA.bit.TCMPOE = 1;
   	// GP Timer 1比较设置为地有效
	EvaRegs.GPTCONA.bit.T1PIN = 1;    
	// timer2 周期标志启动ADC                                                     
	EvaRegs.GPTCONA.bit.T2TOADC = 2;	
	
	EvaRegs.T1CON.all = 0x1002;          	// 配置T1为递增计数模式
    EvaRegs.T1PR = 37500;					// 2KHz PWM
    EvaRegs.T1CMPR = EvaRegs.T1PR/2;		// 50% 占空比
    EvaRegs.EVAIMRA.bit.T1CINT = 1;		// 使能T1CMPR中断
    EvaRegs.T1CON.bit.TENABLE = 1;		// 启动定时器
    
 	EvaRegs.T2CON.all = 0x0000;			/ 禁止定时器2
	EvaRegs.T2CNT = 0x0000;				// 清楚定时器2计数寄存器
    EvaRegs.T2PR = 1499;					// 50KHz (HSPCLK = 2和T2TPS = 1)
	EvaRegs.T2CON.all = 0x1040;			// 使能定时器
            
	while(1)
	{    
  	    EALLOW;
    	SysCtrlRegs.WDKEY = 0xAA;		// 看门狗处理
	    EDIS;
    }
} 	

void Gpio_select(void)
{
	EALLOW;
	GpioMuxRegs.GPAMUX.all = 0x0;				// 所有GPIO设置为I/O 
	GpioMuxRegs.GPAMUX.bit.T1PWM_GPIOA6 = 1; 	// T1PWM 有效
    GpioMuxRegs.GPBMUX.all = 0x0;   
    GpioMuxRegs.GPDMUX.all = 0x0;
    GpioMuxRegs.GPFMUX.all = 0x0;		 
    GpioMuxRegs.GPEMUX.all = 0x0; 
    GpioMuxRegs.GPGMUX.all = 0x0;
	
    GpioMuxRegs.GPADIR.all = 0x0;		// GPIO PORT配置为输入
    GpioMuxRegs.GPBDIR.all = 0x0;		// GPIO PORT配置为输入
    GpioMuxRegs.GPDDIR.all = 0x0;		// GPIO PORT配置为输入
    GpioMuxRegs.GPEDIR.all = 0x0;		// GPIO PORT配置为输入
    GpioMuxRegs.GPFDIR.all = 0x0;		// GPIO PORT配置为输入
    GpioMuxRegs.GPGDIR.all = 0x0;		// GPIO PORT配置为输入

    GpioMuxRegs.GPAQUAL.all = 0x0;	// 设置GPIO输入量化值为0
    GpioMuxRegs.GPBQUAL.all = 0x0;
    GpioMuxRegs.GPDQUAL.all = 0x0;
    GpioMuxRegs.GPEQUAL.all = 0x0;
    EDIS;
}     

void InitSystem(void)
{

   	EALLOW;
   	SysCtrlRegs.WDCR= 0x00AF;		// 配置看门狗 
   									// 0x00E8  禁止看门狗,预定标系数Prescaler = 1
   									// 0x00AF  不禁止看门狗, 预定标系数Prescaler = 64
   	SysCtrlRegs.SCSR = 0; 			// 看门狗产生复位	
   	SysCtrlRegs.PLLCR.bit.DIV = 10;	// 配置处理器锁相环,倍频系数为5
    
   	SysCtrlRegs.HISPCP.all = 0x1;   	// 配置高速外设时钟分频系数: 2
   	SysCtrlRegs.LOSPCP.all = 0x2;   	// 配置低速外设时钟分频系数: 4
      	
   	// 使用的外设时钟时钟设置:
   	// 一般不使用的外设的时钟禁止,降低系统功耗   
   	SysCtrlRegs.PCLKCR.bit.EVAENCLK=1;
   	SysCtrlRegs.PCLKCR.bit.EVBENCLK=0;
   	SysCtrlRegs.PCLKCR.bit.SCIAENCLK=0;
   	SysCtrlRegs.PCLKCR.bit.SCIBENCLK=0;
   	SysCtrlRegs.PCLKCR.bit.MCBSPENCLK=0;
   	SysCtrlRegs.PCLKCR.bit.SPIENCLK=0;  		//使能SPI时钟
   	SysCtrlRegs.PCLKCR.bit.ECANENCLK=0;
   	SysCtrlRegs.PCLKCR.bit.ADCENCLK=1;
   	EDIS;

}

interrupt void T1_Compare_isr(void)
{
    // 中断处理服务程序处理看门狗
   	EALLOW;
	SysCtrlRegs.WDKEY = 0x55;		
	EDIS;

    // 响应EVA-Timer1比较中断
    EvaRegs.EVAIFRA.bit.T1CINT = 1;
    // 响应该中断,准备接收更多的中断
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP2;
}

⌨️ 快捷键说明

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