28027ADC模数转换
/***************************************************************************************************
**FileName: ** ContinuousADC-main.c
**Description: ** 配置SOC0 对ADCINA2通道连续转换,通过EOC0触发ADCInterrupt 1
***************************************************************************************************/
/***************************************************************************************************
**Description ** 头文件
***************************************************************************************************/
#include "DSP28x_Project.h"
#include "DSP2802x_Device.h"
/***************************************************************************************************
**Description ** 函数声明
***************************************************************************************************/
void ADCSetup(void);
interrupt void adc_isr(void);
/***************************************************************************************************
**Description ** 变量定义
***************************************************************************************************/
volatile Uint32 g_ADC_Results; // 存放ADC计算结果
/***************************************************************************************************
**Function: ** main
**Description: ** Main program
**Input: ** Null
**Output: ** Null
**Others: ** Null
***************************************************************************************************/
void main(void)
{
Uint32 l_ADC_Results_Tmp;
/* 系统初始化 */
InitSysCtrl();
#ifdef FLASH
MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
InitFlash(); // Flash初始化
#endif
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;
PieVectTable.ADCINT1 = &adc_isr;
EDIS;
/* 使能PIE ADCINT1*/
PieCtrlRegs.PIEIER1.bit.INTx1 = 1; // 使能PEI INT 1.1
IER |= M_INT1; // 使能CPU中断1
EINT; // 使能全局中断INTM
CpuTimer0Regs.PRD.all = 10000; // 1/6 S
/* GPIO初始化 */
// GpioSetup();
/* AD初始化 */
ADCSetup();
while(1)
{
}
}
/***************************************************************************************************
**Function: ** void GpioSetup(void)
**Description: ** 初始化GPIO引脚
**Input: ** Null
**Output: ** Null
**Others: ** Null
***************************************************************************************************/
/***************************************************************************************************
**Function: ** void ADCSetup(void)
**Description: ** 初始化ADC模块
**Input: ** Null
**Output: ** Null
**Others: ** Null
***************************************************************************************************/
void ADCSetup(void)
{
EALLOW;
AdcRegs.ADCCTL1.bit.ADCREFSEL = 0; // 使用内部参考源
AdcRegs.ADCCTL1.bit.ADCBGPWD = 1; // 上电能带隙
AdcRegs.ADCCTL1.bit.ADCREFPWD = 1; // 内部参考缓冲电路上电
AdcRegs.ADCCTL1.bit.ADCPWDN = 1; // 内部模拟电路上电
AdcRegs.ADCCTL1.bit.ADCENABLE = 1; // ADC使能
asm(" RPT#100 || NOP");
AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1; // 中断脉冲在 ADC 结果锁存到结果寄存器可的一个周期前产生
/* SOCx 通道选择 */
AdcRegs.ADCSOC0CTL.bit.CHSEL= 2;//选择 ADCA2通道
/* 采样窗设置 */
AdcRegs.ADCSOC0CTL.bit.ACQPS = 63;
/* 中断模式设置 */
AdcRegs.INTSEL1N2.bit.INT1CONT = 1; //ADC连续转换使能,
AdcRegs.INTSEL1N2.bit.INT1E = 1; // 使能ADC中断1
AdcRegs.INTSEL1N2.bit.INT1SEL = 0; // ADC SOC0转换结束触发ADCInterrupt 1
/* 选择ADCINT1触发的SOC */
AdcRegs.ADCINTSOCSEL1.bit.SOC0 = 1;
EDIS;
AdcRegs.ADCSOCFRC1.bit.SOC0 = 1; // 强制SOC0开始一次转换
}
/***************************************************************************************************
**Function: ** interrupt void adc_isr(void)
**Description: ** ADCINT1中断
**Input: **
**Output: ** Null
**Others: ** Null
***************************************************************************************************/
interrupt void adc_isr(void)
{
g_ADC_Results = AdcResult.ADCRESULT0;
AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; // 清除ADCINT1中断标志
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // 应答PIE
}
**FileName: ** ContinuousADC-main.c
**Description: ** 配置SOC0 对ADCINA2通道连续转换,通过EOC0触发ADCInterrupt 1
***************************************************************************************************/
/***************************************************************************************************
**Description ** 头文件
***************************************************************************************************/
#include "DSP28x_Project.h"
#include "DSP2802x_Device.h"
/***************************************************************************************************
**Description ** 函数声明
***************************************************************************************************/
void ADCSetup(void);
interrupt void adc_isr(void);
/***************************************************************************************************
**Description ** 变量定义
***************************************************************************************************/
volatile Uint32 g_ADC_Results; // 存放ADC计算结果
/***************************************************************************************************
**Function: ** main
**Description: ** Main program
**Input: ** Null
**Output: ** Null
**Others: ** Null
***************************************************************************************************/
void main(void)
{
Uint32 l_ADC_Results_Tmp;
/* 系统初始化 */
InitSysCtrl();
#ifdef FLASH
MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
InitFlash(); // Flash初始化
#endif
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;
PieVectTable.ADCINT1 = &adc_isr;
EDIS;
/* 使能PIE ADCINT1*/
PieCtrlRegs.PIEIER1.bit.INTx1 = 1; // 使能PEI INT 1.1
IER |= M_INT1; // 使能CPU中断1
EINT; // 使能全局中断INTM
CpuTimer0Regs.PRD.all = 10000; // 1/6 S
/* GPIO初始化 */
// GpioSetup();
/* AD初始化 */
ADCSetup();
while(1)
{
}
}
/***************************************************************************************************
**Function: ** void GpioSetup(void)
**Description: ** 初始化GPIO引脚
**Input: ** Null
**Output: ** Null
**Others: ** Null
***************************************************************************************************/
/***************************************************************************************************
**Function: ** void ADCSetup(void)
**Description: ** 初始化ADC模块
**Input: ** Null
**Output: ** Null
**Others: ** Null
***************************************************************************************************/
void ADCSetup(void)
{
EALLOW;
AdcRegs.ADCCTL1.bit.ADCREFSEL = 0; // 使用内部参考源
AdcRegs.ADCCTL1.bit.ADCBGPWD = 1; // 上电能带隙
AdcRegs.ADCCTL1.bit.ADCREFPWD = 1; // 内部参考缓冲电路上电
AdcRegs.ADCCTL1.bit.ADCPWDN = 1; // 内部模拟电路上电
AdcRegs.ADCCTL1.bit.ADCENABLE = 1; // ADC使能
asm(" RPT#100 || NOP");
AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1; // 中断脉冲在 ADC 结果锁存到结果寄存器可的一个周期前产生
/* SOCx 通道选择 */
AdcRegs.ADCSOC0CTL.bit.CHSEL= 2;//选择 ADCA2通道
/* 采样窗设置 */
AdcRegs.ADCSOC0CTL.bit.ACQPS = 63;
/* 中断模式设置 */
AdcRegs.INTSEL1N2.bit.INT1CONT = 1; //ADC连续转换使能,
AdcRegs.INTSEL1N2.bit.INT1E = 1; // 使能ADC中断1
AdcRegs.INTSEL1N2.bit.INT1SEL = 0; // ADC SOC0转换结束触发ADCInterrupt 1
/* 选择ADCINT1触发的SOC */
AdcRegs.ADCINTSOCSEL1.bit.SOC0 = 1;
EDIS;
AdcRegs.ADCSOCFRC1.bit.SOC0 = 1; // 强制SOC0开始一次转换
}
/***************************************************************************************************
**Function: ** interrupt void adc_isr(void)
**Description: ** ADCINT1中断
**Input: **
**Output: ** Null
**Others: ** Null
***************************************************************************************************/
interrupt void adc_isr(void)
{
g_ADC_Results = AdcResult.ADCRESULT0;
AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; // 清除ADCINT1中断标志
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // 应答PIE
}
还没人赞这篇日记