主题中讨论的其他器件:C2000WARE
我正在使用 GPIO6检查我的 ADCinit1是否由以下代码触发、
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#include "DSP28x_Project.h"
#include "F2802x_common/include/adc.h"
#include "F2802x_common/include/clk.h"
#include "F2802x_common/include/flash.h"
#include "F2802x_common/include/gpio.h"
#include "F2802x_common/include/PIE.h"
#include "F2802x_common/include/PLL.h"
#include "F2802x_common/include/wdog.h"
中断空 ADC_ISR (空);
int a=0;
adc_handle myAdc;
clk_handle myClk;
Flash_handle myFlash;
GPIO_Handle myGpio;
PIE_Handle myPie;
PWM_Handle myPwm;
void main (void)
{
cpu_handle myCpu;
pll_handle myPll;
WDOG_Handle myWDog;
myAdc = ADC_init ((void *) ADC_base_ADDR、sizeof (ADC_Obj));
myClk = CLK_init ((void *) CLK_base_ADDR、sizeof (CLK_Obj));
myCpu = cpu_init ((void *) NULL、sizeof (cpu_Obj));
myFlash = flash_init ((void *) flash_base_ADDR、sizeof (flash_Obj));
myGpio = GPIO_init ((void *) GPIO_base_ADDR、sizeof (GPIO_Obj));
myPie = PI_init ((void *) PIE_BASE_ADDR、sizeof (PIE_Obj));
myPll = PLL_init ((void *) PLL_base_ADDR、sizeof (PLL_Obj));
myPwm = PWM_init ((void *) PWM_ePWM1_base_ADDR、sizeof (PWM_Obj));
myWdDog = WDOG_INIT ((void *) WDOG_BASE_ADDR、sizeof (WDOG_Obj));
//执行基本系统初始化
WDOG_DISABLE (myWDog);
CLK_enableAdcClock (myClk);
(*Device_cal)();
//选择内部振荡器1作为时钟源
CLK_setOscSrc (myClk、CLK_OscSrc_Internal);
//将 PLL 设置为 x10 /2、这将产生50MHz = 10MHz * 10/2
PLL_setup (myPll、PLL_Multiplier_10、PLL_DivideSelect_CLKIN_BY_2);
//禁用 PIE 和所有中断
PIE_DISABLE (myPie);
PI_DisableAllInts (myPie);
CPU_disableGlobalInts (myCpu);
CPU_clearIntFlags (myCpu);
//如果从闪存运行,则只将 RAM 复制到 RAM
#ifdef _flash
memcpy (&RamfuncsRunStart、&RamfuncsLoadStart、(size_t)&RamfuncsLoadSize);
#endif
//设置调试矢量表并启用 PIE
PI_setDebugIntVectorTable (myPie);
PIE_ENABLE (myPie);
//在 PIE 矢量表中注册中断处理程序
PI_registerPieIntHandler (myPie、PI_GroupNumber_10、PI_SubGroupNumber_1、(intVec_t)&ADC_ISR);
//初始化 ADC
adc_enableBandGap (myAdc);
ADC_enableRefBuffers (myAdc);
ADC_POWERUP (myAdc);
ADC_ENABLE (myAdc);
ADC_setVoltRefSrc (myAdc、ADC_VoltageRefSrc_Int);
//在 PIE 中启用 ADCINT1
PIE_enableAdcInt (myPie、ADC_IntNumber_1);
//启用 CPU 中断1
CPU_enableInt (myCpu、CPU_IntNumber_10);
//启用全局中断 INTM
cpu_enableGlobalInts (myCpu);
//启用全局实时中断 DBGM
CPU_enableDebugInt (myCpu);
GPIO_setPullUp (myGpio、GPIO_Number_6、GPIO_PULLUP_Enable);
GPIO_setHigh (myGpio、GPIO_Number_6);
GPIO_setMode (myGpio、GPIO_Number_6、GPIO_6_Mode_generalpurpose);
GPIO_setDirection (myGpio、GPIO_Number_6、GPIO_Direction_Output);
ADC_setIntPulseGenMode (myAdc、ADC_IntPulseGenMode_During);
ADC_enableInt (myAdc、ADC_IntNumber_1);
ADC_setIntMode (myAdc、ADC_IntNumber_1、ADC_IntMode_ClearFlag);
ADC_setIntSrc (myAdc、ADC_IntNumber_1、ADC_IntSrc_EOC0);
ADC_setSockChanNumber (myAdc、ADC_SockNumber_0、ADC_SockChanNumber_A4);
ADC_setSockTrigSrc (myAdc、ADC_SockNumber_0、ADC_SockTrigSrc_SW);
ADC_setSockSampleWindow (myAdc、ADC_SockNumber_0、ADC_SockSampleWindow_7_cycles);
//启用 PWM 时钟
CLK_enablePwmClock (myClk、PWM_NUMBER_1);
//设置 PWM
PWM_enableSockpulse (myPwm);
PWM_setSockAPulseSrc (myPwm、PWM_SockPulseSrc_CounterEqualZero);
PWM_setSockAPeriod (myPwm、PWM_SockPeriod_FirstEvent);
PWM_setCmpA (myPwm、0x0080);
PWM_setPeriod (myPwm、0xFFFF);
PWM_setCounterMode (myPwm、PWM_CounterMode_Up);
//等待 ADC 中断
for (;;)
{
AdcRegs.ADCSOCFRC1.bit.SOC0=1;
}
}
中断空 ADC_ISR (空)
{
a = ADC_readResult (myAdc、ADC_ResultNumber_1);
如果(a<100)
{
GPIO_setLow (myGpio、GPIO_Number_6);
}
其他
{
GPIO_setHigh (myGpio、GPIO_Number_6);
}
//清除 ADCINT1标志为下一个 SOC 重新初始化
ADC_clearIntFlag (myAdc、ADC_IntNumber_1);
//确认 PIE 中断
PI_clearInt (myPie、PI_GroupNumber_10);
返回;
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
未触发 ADC 中断。 我找不到原因。 有人可以帮帮我吗?