This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我需要一些帮助以获取 LauchPad F28027F 示例 F2802xAdx.
我复制了侧面的代码、并成功编译了它。
我运行它并注意到它永远不会进入 ADC_ISR(),这应该是这样做的。
现在、我对 TMS320F28027的 ADC 有一些疑问、以及它在未来产品中有多大的可用性。
请告诉我该怎么做、如何使中断踢动。 代码如下所示、与 TI 示例中的代码大体相同。
提前感谢、
Vlad
//######################################################################################################################## // 文件:F2802xExamples_ccsv4/ADC_SoC/example_F2802xAdc3.c // //标题:F2802x ADC 转换开始(SOC)示例程序。 // //组:C2000 //目标器件:TMS320F2802x // ! \addtogroup example_list //!ADC 转换开始(SOC)
//! //! 中断被启用并且 ePWM1被设置为生成一个周期 //! ADC SOC - ADCINT1。 两个通道被转换、ADCINA4和 ADCINA2。 //! //! 观察变量: //! //! - Voltage1[10]-最后10个 ADCRESULT0值 //! - Voltage2[10]-最后10个 ADCRESULT1值 //! - ConversionCount -当前结果编号0-9adc_isr () //! - LoopCount - Idle loop counter // (C) Copyright 2012、Texas Instruments、Inc. //######################################################################################################################## //$TI 发行版:Launchpad F2802x 支持库 V100 $ //$发行 日期:WED Jul 25 10:45:39 CDT 2012 $ //############################################################################################################## #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/nogl.h"#include 文件中#include "#include "#include "#include "#include 语句。 中断空 ADC_ISR (空); 空 ADC_Config (空); //本示例中使用的全局变量: uint16_t LoopCount; uint16_t ConversionCount; uint16_t Voltage1[10]; uint16_t Voltage2[10]; 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 myWdake; //初始化此应用所需的所有句柄 myAdc = adc_init ((void *) adc_base_aDDR、sizeof (adc_bj );yclb_asit_aid (*) = nid _obj);yclpie (void (npie)、ecpu_asit_asit_aj);yclpie (nat_aid (nat_aj)(nid (nid)、yclpie (nid)、yclpie (nat_aj)、yclpie (nat_ej_aid)、yclpie (nat_eedpie (a)=)、yclpie (nid (nat_ecpi)、yclpie ()、yclpie (nid (nat_aj)、yclpie) myPll = PLL_init (((void *) PLL_base_ADDR、sizeof (PLL_Obj)); myPwm = PWM_init ((void *) PWM_ePWM1_base_ADDR、oscof (PWM_sizeof)); myWdock = WDOG_init (((*) nid *);enableWdMC_cl_clock_clock_enable_clock_clock_clock_enable/enable_clock_clock_clock_enock_enable_enable_enock_clock_enic (enable_enock_enable_enock_enable_clock_clock_enic) ;(enable_clock_enock_enable_enable_enock_enock_enock_enable_enable_enock_enable_ench //将 PLL 设置为 x10 /2、这将产生50MHz = 10MHz * 10 / 2 PLL_setup (myPll、PLL_Multiplier_10、PLL_DivideSelect_CLKIN_BY_2); //禁用 PIE 和所有中断 PIE_DISABLE_DISABLE (myPie); PI_disableAllIntts (myLoadPu); 如果从 CPU 运行 时仅运行) RAM 函 数; #endif //设置调试矢量表并启用 PIE_setDebugIntVectorTable (myPie); PIE_ENABLE (myPie); //在 PIE 矢量表中注册中断处理程序 PIE_registerPieIntHandler (myPie、PIE_Debug_10、PIE_SubBuffNumber_1、(intvec_t&d);enableAdc (myAdc) ;/enableAdc (myAdc);enableAdc (myADC_Adv_adc);enableAdrum_adc (myAdv_adc (myadc); ADC_VoltageRefSrc_Int); //在 PIE PI_enableAdcInt (myPie、ADC_IntNumber_1)中启用 ADCINT1; //启用 CPU 中断1 CPU_enableInt (myCpu、CPU_IntNumber_10); //启用全局中断 INTM CPU_enableGlobalInts (myCpu ) ; //配置 InsteIntCount = 0;//启用全局中断 通道 ADCINA4将被双采样以解决修订版0器件勘误表的 ADC 第1个采样问题 ADC_setIntPulseGenMode (myAdc、ADC_IntPulseGenMode_Prior);//ADCINT1在 AdcResults 后跳闸 ADC_enableInint (myAdc、ADC_IntNumber_1);//Enabled ADCINT1_InIntMode 、ADC_InIntNumber、ADC_IntInMode、ADC_InInt1; //禁用 ADCINT1连续模式 ADC_setSockIntSrc (myAdc、ADC_IntNumber_1、ADC_IntSrc_EoC2);//设置 ADCINT1以触发 ADC_setSockSICNumber (myAdc、ADC_SockChanM1_0、ADC_SockSockSrc_A4);//设置 SOC0、ADC_SockSockSock3、 ADC_Set ADC_ADC_ADC_ADC_Sock1、ADC_Sock3 (设置 ADC_ADC_ADC_ADC_ADC_ADC_ADC3_ADC_ADC_ADC0、ADC_ADC3_ADC_ADC0); 选择 ADC_Sock3;ADC_ADC_ADC_ADC_ADC_ADCK_ADCK_ADCK_ADC3_ADC3_ADC3_ADC0;ADC3_ADCK_ADC3_ADCK_ADCK_ADCK_ADCK_ADC3_ADCK_ADCK_ADCK_ADCK_ADCK_ADCK_AD //设置 EPWM1A 上的 SOC0启动触发器、由于循环 SOC0首先转换、然后 SOC1 ADC_setSockSrc (myAdc、ADC_SockNumber_1、ADC_SockSockSrc_EPWM1_ADCSOCA);//设置 EPWM1A 上的 SOC1启动触发器、由于 round_ADC_SockSockSrc_ADC_First 、ADCK_ADCK_ADCK_sockC (sock3、ADC_ADC_ADCK_ADCK_sock3、ADC_ADCK_ADCK_ADCK_sock3、ADCK_sock3、ADC_ADCK_ADCK_ADCK_ADCK_s //set SOC2 start trigger on EPWM1A、due to roundin SOC0 trigges first then SOC1、then SOC2 ADC_setSsockpleWindow (myAdc、ADC_SockNumber_0、ADC_Socksample_7_cycles);//将 SOC0 S/H 窗口设置为7个 ADC 时钟周期(6个 ADC_SockWindwl、ADC_Sock1、ADC_Socksample_7个); (6个 ADC_Socksample_7个 ADC_SockWindow) //将 SOC1 S/H 窗口设置为7个 ADC 时钟周期、(6个 ACQPS + 1个) ADC_setSockpleWindow (myAdc、ADC_SockNumber_2、ADC_SockSampleWindow_7_cycles);//将 SOC2 S/H 窗口设置为7个 ADC 时钟周期、(6个 ACQPS + 1) //启用 Sockpwm_sensePWM (enablePwm) ;//使能 PwmPwmc_sensePWM (1);设置为1个 PwmPwmPwmPwmPwmPwmPwmPwmc_enablePwm (enablePwm);设置为1个 AD_PwmPwmPwmPwmPwmPwmPw //从 CPMA 中选择 SOC (向上计数 ) PWM_setSockAPeriod (myPwm、PWM_SockPeriod_FirstEvent);//在第一个事件 PWM_setCmpA (myPwm、0x0080)上生成脉冲;//设置比较值 PWM_setPeriod (myPwm、0xFFFF);//设置 PWM+ 、针对 myPwm+进行计数;//设置 PWM+(等待);//设置 PWM+计数;//设置 PWM+(针对 myPwm+) 中断 void ADC_ISR (void) { //将 ADCRESULT0作为第1个样本勘误表的权变措施的一部分,该勘误表针对 rev0 Voltage1[ConversionCount]= ADC_readResult (myAdc、ADC_ResultNumber_1); Voltage2[ConversionCount]= ADC_readResult (myAdc、ADC_ResultNumber_1);如果 已记录转换 数则为10+;如果转换数 = 10+(如果已记录转换);如果转换数= 10+(如果转换数= 10+);如果转换数=转换数= 10+) //清除 ADCINT1标志为下一个 SOC 重新初始化 ADC_clearIntFlag (myAdc、ADC_IntNumber_1); //确认 PIE PIE_clearInt (myPie、PIE_GroupNumber_10)的中断; 返回; }
Vlad、
将您发布的代码与 C2000Ware 中的示例文件进行比较、会发现缺少时钟启用功能。 在.main 末尾的"for "循环之前、请添加以下内容
CLK_enableTbClockSync (myClk);
这应激活所有 PWM 时钟并将其同步、然后启动 ADC 触发。
Matt