工具/软件:Code Composer Studio
我更改了ADC示例代码,然后使用它打印ADC的输出。输出似乎有一个大约100的错误。我使用模拟发现向adcina0提供了1V dc的输入
这是我使用的代码
//###################################################################
//
//文件:adc_so_ePWM_cpu01.c
//
//标题:ADC通过ePWM触发F2837xS。
//
//! \addtogroup cpu01_example_list
//! <H1>ADC ePWM触发(ADC_SOC_ePWM)</H1>
//!
//! 此示例设置ePWM以定期触发ADC。
//!
//! 程序运行后,内存将包含:\n
//! -\b AdcaResults \b:来自的一系列模数转换示例
//! 针脚A0。 样本之间的时间根据周期确定
//! ePWM计时器。
//
//###################################################################
//$TI发行版:F2837xS支持库V210 $
//$发布日期:11月1日星期二15:35:23 CDT 2016 $
//版权所有:版权所有(C) 2014-2016 Texas2016 Texas Instruments Incorporated -
// http://www.ti.com/ 保留所有权利$
//###################################################################
//
//包含的文件
//
#include "F28x_Project.h"
#include "stdio.h"
const结构PIE_VECT_TABLE PieVectorTableInit ={
PIE_RESERT_ISR,//保留
PIE_RESERT_ISR,//保留
PIE_RESERT_ISR,//保留
PIE_RESERT_ISR,//保留
PIE_RESERT_ISR,//保留
PIE_RESERT_ISR,//保留
PIE_RESERT_ISR,//保留
PIE_RESERT_ISR,//保留
PIE_RESERT_ISR,//保留
PIE_RESERT_ISR,//保留
PIE_RESERT_ISR,//保留
PIE_RESERT_ISR,//保留
PIE_RESERT_ISR,//保留
Timer1_ISR,// CPU计时器1中断
TIMER2_ISR,// CPU Timer 2 Interrupt (TIMER2_ISR,// CPU计时器2中断)
datalog_isr,//数据记录中断
RTOS_ISR,// RTOS中断
EMM_ISR,//仿真中断
NMI_ISR,//不可屏蔽中断
illegal _isr,//非法操作陷阱
User1_ISR,//用户定义的陷阱1
User2_ISR,//用户定义的陷阱2.
User3_ISR,//用户定义的陷阱3.
User4_isr,//用户定义的陷阱4.
USER5_ISR,//用户定义陷阱5.
USER6_ISR,//用户定义陷阱6.
USER7_ISR,//用户定义陷阱7.
USER8_ISR,//用户定义陷阱8.
USER9_ISR,//用户定义陷阱9.
USER10_ISR,//用户定义陷阱10
USER11_ISR,//用户定义陷阱11.
USER12_ISR,//用户定义陷阱12.
ADCA1_ISR,// 1.1 - ADCA中断1
ADCB1_ISR,// 1.2 - ADCB中断1
ADCC1_ISR,// 1.3 - ADCC中断1
XINT1_ISR,// 1.4 - XINT1中断
XINT2_ISR,// 1.5 - XINT2中断
ADCD1_ISR,// 1.6 - ADCD中断1
TIMER0_ISR,// 1.7 -计时器0中断
WAKE_ISR,// 1.8 -待机和中止唤醒中断
EPWM1_TZ_ISR,// 2.1 - ePWM1跳闸区域中断
EPWM2_TZ_ISR,// 2.2 - ePWM2跳闸区域中断
EPWM3_TZ_ISR,// 2.3 - ePWM3跳闸区域中断
EPWM4_TZ_ISR,// 2.4 - ePWM4跳闸区域中断
EPWM5_TZ_ISR,// 2.5 - ePWM5跳闸区域中断
EPWM6_TZ_ISR,// 2.6 - ePWM6跳闸区域中断
EPWM7_TZ_ISR,// 2.7 - ePWM7跳闸区域中断
EPWM8_TZ_ISR,// 2.8 - ePWM8跳闸区域中断
EPWM1_ISR,// 3.1 - ePWM1中断
EPWM2_ISR,// 3.2 - ePWM2中断
EPWM3_ISR,// 3.3 - ePWM3中断
EPWM4_ISR,// 3.4 - ePWM4中断
EPWM5_ISR,// 3.5 - ePWM5中断
EPWM6_ISR,// 3.6 - ePWM6中断
EPWM7_ISR,// 3.7 - ePWM7中断
EPWM8_ISR,// 3.8 - ePWM8中断
eCAP1_ISR,// 4.1 - eCAP1中断
ECAP2_ISR,// 4.2 - eCAP2中断
ECAP3_ISR,// 4.3 - eCAP3中断
ECAP4_ISR,// 4.4 - eCAP4中断
ECAP5_ISR,// 4.5 - eCAP5中断
ECAP6_ISR,// 4.6 - eCAP6中断
PIE_RESORT_ISR,// 4.7 -保留
PIE_RESORT_ISR,// 4.8 -保留
EQEp1_ISR,// 5.1 - eQEP1中断
EQEP2_ISR,// 5.2 - eQEP2中断
EQEP3_ISR,// 5.3 - eQEP3中断
PIE_RESORT_ISR,// 5.4 -保留
PIE_RESORT_ISR,// 5.5 -保留
PIE_RESORT_ISR,// 5.6 -保留
PIE_RESORT_ISR,// 5.7 -保留
PIE_RESORT_ISR,// 5.8 -保留
SPIA_RX_ISR,// 6.1 - SPIA接收中断
SPIA_TX_ISR,// 6.2 - SPIA发射中断
SPIB_RX_ISR,// 6.3 - SPIB接收中断
SPIB_TX_ISR,// 6.4 - SPIB发射中断
MCBSPA_RX_ISR,// 6.5 - McBSPA接收中断
MCBSPA_TX_ISR,// 6.6 - McBSPA发射中断
MCBSPB_RX_ISR,// 6.7 - McBSPB接收中断
MCBSPB_TX_ISR,// 6.8 - McBSPB传输中断
DMA_CH1_ISR,// 7.1 - DMA通道1中断
DMA_CH2_ISR,// 7.2 - DMA通道2中断
DMA_CH3_ISR,// 7.3 - DMA通道3中断
DMA_CH4_ISR,// 7.4 - DMA通道4中断
DMA_CH5_ISR,// 7.5 - DMA通道5中断
DMA_CH6_ISR,// 7.6 - DMA通道6中断
PIE_RESORT_ISR,// 7.7 -保留
PIE_RESORT_ISR,// 7.8 -保留
I2CA_ISR,// 8.1 - I2CA中断1
I2CA_FIFO,ISR,// 8.2 - I2CA中断2
I2CB_ISR,// 8.3 - I2CB中断1
I2CB_FIFO,Isr,// 8.4 - I2CB中断2
SCIC_RX_ISR,// 8.5 - SCIC接收中断
SCIC_TX_ISR,// 8.6 - SCIC发射中断
SCID_RX_ISR,// 8.7 - SCID接收中断
SCID_TX_ISR,// 8.8 - SCID发射中断
SCIA_RX_ISR,// 9.1 - SCIA接收中断
SCIA_TX_ISR,// 9.2 - SCIA发射中断
SCIB_RX_ISR,// 9.3 - SCIB接收中断
SCIB_TX_ISR,// 9.4 - SCIB传输中断
CANA0_ISR,// 9.5 - CANA中断0
CANA1_ISR,// 9.6 - CANA中断1
CANB0_ISR,// 9.7 - CANB中断0
CANB1_ISR,// 9.8 - CANB中断1
ADCA_EVT_ISR,// 10.1 - ADCA事件中断
ADCA2_ISR,// 10.2 - ADCA中断2
ADCA3_ISR,// 10.3 - ADCA中断3
ADCA4_ISR,// 10.4 - ADCA中断4.
ADCB_EVT_ISR,// 10.5 - ADCB事件中断
ADCB2_ISR,// 10.6 - ADCB中断2
ADCB3_ISR,// 10.7 - ADCB中断3
ADCB4_ISR,// 10.8 - ADCB中断4.
CLA1_ISR,// 11.1 - CLA1中断1
CLA1_2_ISR,// 11.2 - CLA1中断2
CLA1_3_ISR,// 11.3 - CLA1中断3
CLA1_4_ISR,// 11.4 - CLA1中断4.
CLA1_5_ISR,// 11.5 - CLA1中断5
CLA1_6_ISR,// 11.6 - CLA1中断6.
CLA1_7_ISR,// 11.7 - CLA1中断7
CLA1_8_ISR,// 11.8 - CLA1中断8
XINT3_ISR,// 12.1 - XINT3中断
XINT4_ISR,// 12.2 - XINT4中断
XINT5_ISR,// 12.3 - XINT5中断
PIE_RESORT_ISR,// 12.4 -保留
PIE_RESORT_ISR,// 12.5 -保留
VCU_ISR,// 12.6 - VCU中断
FPU_OVERFY_ISR,// 12.7 - FPU溢出中断
FPU_underflow_isr,// 12.8 - FPU下溢中断
PIE_RESORT_ISR,// 1.9 -保留
PIE_RESORT_ISR,// 1.10 -保留
PIE_RESORT_ISR,// 1.11 -保留
PIE_RESORT_ISR,// 1.12 -保留
IPC0_ISR,// 1.13 - IPC中断0
IPC1_ISR,// 1.14 - IPC中断1
IPC2_ISR,// 1.15 - IPC中断2
IPC3_ISR,// 1.16 - IPC中断3
EPWM9_TZ_ISR,// 2.9 - ePWM9跳闸区域中断
EPWM10 _TZ_ISR,// 2.10 - ePWM10跳闸区域中断
EPWM11_TZ_ISR,// 2.11 - ePWM11跳闸区域中断
EPWM12_TZ_ISR,// 2.12 - ePWM12跳闸区域中断
PIE_RESORT_ISR,// 2.13 -保留
PIE_RESORT_ISR,// 2.14 -保留
PIE_RESORT_ISR,// 2.15 -保留
PIE_RESORT_ISR,// 2.16 -保留
EPWM9_ISR,// 3.9 - ePWM9中断
EPWM10 _ISR,// 3.10 - ePWM10中断
EPWM11_ISR,// 3.11 - ePWM11中断
EPWM12_ISR,// 3.12 - ePWM12中断
PIE_RESORT_ISR,// 3.13 -保留
PIE_RESORT_ISR,// 3.14 -保留
PIE_RESORT_ISR,// 3.15 -保留
PIE_RESORT_ISR,// 3.16 -保留
PIE_RESORT_ISR,// 4.9 -保留
PIE_RESORT_ISR,// 4.10 -保留
PIE_RESORT_ISR,// 4.11 -保留
PIE_RESORT_ISR,// 4.12 -保留
PIE_RESORT_ISR,// 4.13 -保留
PIE_RESORT_ISR,// 4.14 -保留
PIE_RESORT_ISR,// 4.15 -保留
PIE_RESORT_ISR,// 4.16 -保留
SD1_ISR,// 5.9 - SD1中断
SD2_ISR,// 5.10 - SD2中断
PIE_RESORT_ISR,// 5.11 -保留
PIE_RESORT_ISR,// 5.12 -保留
PIE_RESORT_ISR,// 5.13 -保留
PIE_RESORT_ISR,// 5.14 -保留
PIE_RESORT_ISR,// 5.15 -保留
PIE_RESORT_ISR,// 5.16 -保留
SPIC_RX_ISR,// 6.9 -***接收中断
SPIC_TX_ISR,// 6.10 -***发射中断
PIE_RESORT_ISR,// 6.11 -保留
PIE_RESORT_ISR,// 6.12 -保留
PIE_RESORT_ISR,// 6.13 -保留
PIE_RESORT_ISR,// 6.14 -保留
PIE_RESORT_ISR,// 6.15 -保留
PIE_RESORT_ISR,// 6.16 -保留
PIE_RESORT_ISR,// 7.9 -保留
PIE_RESORT_ISR,// 7.10 -保留
PIE_RESORT_ISR,// 7.11 -保留
PIE_RESORT_ISR,// 7.12 -保留
PIE_RESORT_ISR,// 7.13 -保留
PIE_RESORT_ISR,// 7.14 -保留
PIE_RESORT_ISR,// 7.15 -保留
PIE_RESORT_ISR,// 7.16 -保留
PIE_RESORT_ISR,// 8.9 -保留
PIE_RESORT_ISR,// 8.10 -保留
PIE_RESORT_ISR,// 8.11 -保留
PIE_RESORT_ISR,// 8.12 -保留
PIE_RESORT_ISR,// 8.13 -保留
PIE_RESORT_ISR,// 8.14 -保留
#ifdef CPU1
UPPA_ISR,// 8.15 - UPPA中断
PIE_RESORT_ISR,// 8.16 -保留
#Elif定义(CPU2)
PIE_RESORT_ISR,// 8.15 -保留
PIE_RESORT_ISR,// 8.16 -保留
#endif
PIE_RESORT_ISR,// 9.9 -保留
PIE_RESORT_ISR,// 9.10 -保留
PIE_RESORT_ISR,// 9.11 -保留
PIE_RESORT_ISR,// 9.12 -保留
PIE_RESORT_ISR,// 9.13 -保留
PIE_RESORT_ISR,// 9.14 -保留
#ifdef CPU1
USBA_ISR,// 9.15 - USBA中断
#Elif定义(CPU2)
PIE_RESORT_ISR,// 9.15 -保留
#endif
PIE_RESORT_ISR,// 9.16 -保留
ADCC_EVT_ISR,// 10.9 - ADCC事件中断
ADCC2_ISR,// 10.10 - ADCC中断2
ADCC3_ISR,// 10.11 - ADCC中断3
ADCC4_ISR,// 10.12 - ADCC中断4.
ADCD_EVT_ISR,// 10.13 - ADCD事件中断
ADCD2_ISR,// 10.14 - ADCD中断2
ADCD3_ISR,// 10.15 - ADCD中断3
ADCD4_ISR,// 10.16 - ADCD中断4.
PIE_RESORT_ISR,// 11.9 -保留
PIE_RESORT_ISR,// 11.10 -保留
PIE_RESORT_ISR,// 11.11 -保留
PIE_RESORT_ISR,// 11.12 -保留
PIE_RESORT_ISR,// 11.13 -保留
PIE_RESORT_ISR,// 11.14 -保留
PIE_RESORT_ISR,// 11.15 -保留
PIE_RESORT_ISR,// 11.16 -保留
EMIF_ERROR_ISR,// 12.9 - EMIF错误中断
RAM_Correctable_error_isr,// 12.10 - RAM可纠正错误中断
Flash_Correctable_error_isr,// 12.11 -闪存可纠正错误中断
RAM_ACCESS_Violation_ISR,// 12.12 - RAM访问冲突中断
SYS_PLL_SLip_ISR,// 12.13 -系统PLL滑动中断
AUX_PLL_SLIN_ISR,// 12.14 -辅助PLL滑动中断
CLA_OVERFLOW _ISR,// 12.15 - CLA溢出中断
CLA_underflow_ISR // 12.16 - CLA下溢中断
};
//
// InitPieVectorTable -此函数将PIE向量表初始化为
//已知状态,并且必须在启动后执行。
//
Void InitPieVectorTable (void)
{
UINT16 I;
UINT32 *Source =(void *)&PieVectorTableInit;
UINT32 *Dest =(void *)&PieVectorTable;
//
//不要覆盖前3个32位位置(这些位置是
//由引导ROM使用引导变量初始化)
//
来源=来源+ 3;
目标=目标+ 3;
EALLOW;
(i = 0;i < 221;I++)
{
*Dest++=*Source++;
}
EDIS;
//
//启用PIE矢量表
//
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;
}
//
//函数原型
//
void ConfigureADC (void);
void ConfigureEPWM (void);
void SetupADCEpwm (UINT16通道);
中断无效adca1_isr(void);
//
//定义
//
#define results_buffer_size 256
//
//全局
//
UINT16 AdcaResults[results_buffer_size];
UINT16结果索引;
易失性UINT16缓冲器全;
结构你好
{
UINT16 Ji:12.
双;
Void主(void)
{int counter=0;
//
//步骤1. 初始化系统控制:
// PLL,看门狗,启用外设时钟
//此示例函数可在F2837xS_sysctrl.c文件中找到。
//
InitSysCtrl();
//
//步骤2. 初始化GPIO:
//此示例函数可在F2837xS_GPIO.c文件和中找到
//说明了如何将GPIO设置为其默认状态。
//
此示例跳过InitGpio();//
//
//步骤3. 清除所有中断并初始化PIE矢量表:
//禁用CPU中断
//
色调;
伊尼特·格皮奥();
//
//将PIE控件寄存器初始化为其默认状态。
//默认状态是禁用所有PIE中断和标志
//被清除。
//此函数位于F2837xS_PIECTRL.c文件中。
//
InitPieCtrl();
//
//禁用CPU中断并清除所有CPU中断标志:
//
IER = 0x0000;
IFR = 0x0000;
//
//使用指向外壳中断的指针初始化PIE矢量表
//服务例程(ISR)。
//这将填充整个表,即使中断也是如此
//在本例中不使用。 这对于调试非常有用。
// shell ISR例程位于F2837xS_DefaultIsr.C.中
//此函数位于F2837xS_PieVect.C.中
//
InitPieVectorTable();
//
//映射ISR功能
//
EALLOW;
PieVectorTable.ADCA1_INT =&adca1_ISR;// ADCA中断1的函数
EDIS;
//
//配置ADC并将其打开
//
配置ADC();
//
//配置ePWM
//
配置EPWM();
//
//在通道0上设置ePWM触发转换的ADC
//
SetupADCEpwm(0);
//
//启用全局中断和更高优先级的实时调试事件:
//
IER || M_INT1;//启用组1中断
EINT;//启用全局中断INTM
ERTM;//启用全局实时中断DBGM
//
//初始化结果缓冲区
//
for (resultsIndex = 0;resultsIndex < results_buffer_size;resultsIndex++)
{
AdcaResults[resultsIndex]=0;
}
结果索引=0;
缓冲器全轮= 0;
//
//启用PIE中断
//
PieCtrlRegs.PIEIER1.bit.INTx1 = 1;
//
//同步ePWM
//
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;
PieCtrlRegs.PIECTRL.bit.ENPIE=1;
//
//无限循环转换
//
做
{
//
//启动ePWM
//
EPwm1Regs.ETSEL.bit.SOCAEN = 1;//启用SOCA
EPwm1Regs.TBCTL.bit.CTRMODE = 0;//unfreeze,并进入UP计数模式
//
//等待ePWM导致ADC转换,然后导致中断,
//填充结果缓冲区,最终设置bufferFull
//标志
//
while (!bufferFull);
bufferFull = 0;//清除缓冲区已满标志
//
//停止ePWM
//
EPwm1Regs.ETSEL.bit.SOCAEN = 0;//禁用SOCA
EPwm1Regs.TBCTL.bit.CTRMODE = 3;//冻结计数器
//
//此时,AdcaResults[]包含一个转换序列
//从所选频道
//
//
//软件断点,再次点击"运行"以获取更新的转换
//
ASM (" ESTOP0");
//counter++;//no of samples
}同时(1);
}
//
// ConfigureADC -写入ADC配置并为两者加电
// ADC A和ADC B
//
void配置ADC(void)
{
EALLOW;
//
//写入配置
//
AdcaRegs.ADCCTL2.bit.prescale =6;//将ADCCLK除法器设置为/4
AdcSetMode (ADC_ADCA,ADC_Resolution _12位,ADC_SIGNALMODE_SINGLE);
//
//将脉冲位置设置为延迟
//
AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;
//
//打开ADC的电源
//
AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;
//
//延迟1毫秒,以使ADC有时间开机
//
DELAY _US (1000);
EDIS;
}
//
// ConfigureEPWM -配置ePWM SOC并比较值
//
void配置EPWM (void)
{
EALLOW;
//假定ePWM时钟已启用
EPwm1Regs.ETSEL.bit.SOCAEN = 0;//禁用组上的SOC
EPwm1Regs.ETSEL.bit.SOCASEL = 4;//在加电计数时选择SOC
EPwm1Regs.ETPS.bit.SOCAPRD = 1;//在第一个事件上生成脉冲
EPwm1Regs.CMPA.bit.CMPA = 0x0800;// set将值与2048个计数进行比较
EPwm1Regs.TBPRD = 0x1000;//将周期设置为4096个计数
EPwm1Regs.TBCTL.bit.CTRMODE = 3;//冻结计数器
EDIS;
}
//
// SetupADCEpwm -设置ADC ePWM采集窗口
//
void SetupADCEpwm (UINT16通道)
{EALLOW;
gpioCtrlRegs.GPAMUX1.bit.GPIO13=0;
gpioCtrlRegs.GPADIR.bit.GPIO13=1;
EDIS;
GpioDataRegs.GPASET.bit.GPIO13=1;
UINT16 acqps;
//
//根据分辨率确定最小采集窗口(在SYSCLKS中)
//
IF (ADC_Resolution _12位== AdcaRegs.ADCCTL2.bit.Resolution)
{
acqps = 14;//75ns
}
ELSE //分辨率为16位
{
acqps = 63;//320ns
}
//
//选择要转换的通道和转换结束标志
//
EALLOW;
AdcaRegs.ADCSOC0CTL.bit.CHSEL =通道;//SOC0将转换针A0
AdcaRegs.ADCSOC0CTL.bit.ACQPS = acqps;//样例窗口为100 SYSCLK周期
AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 5;// ePWM1 SOCA/C上的触发器
AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 0;//SOC0的结尾将设置INT1标志
AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1;//启用INT1标志
AdcaRegs.ADCINTFLGCLL.bit.ADCINT1 =1;//确保INT1标志已清除
EDIS;
}
//
// adca1_ISR -读取ISR中的ADC缓冲器
//
中断无效适配器1_ISR(void)
{
AdcaResults[resultsIndex+]= AdcaResultRegs.ADCRESULT0;
IF (results_buffer_size <= resultsIndex)
{
结果索引=0;
缓冲器全轮= 1;
//}
printf ("%d\n",AdcaResultRegs.ADCRESULT0);
//结果索引=0;
//缓冲器全轮= 1;
IF (AdcaResultRegs.ADCRESULT0=4095)
{
GpioDataRegs.GPACLEAR.bit.GPIO13=1;
}
}
ADcaRegs.ADCINTFLGCLL.bit.ADCINT1 = 1;//清除INT1标志
EALLOW;
PieCtrlRegs.PIEACG.ALL = PIEACK_GROUP1;
EDIS;
}
//
//文件结束
//
