Thread 中讨论的其他器件:controlSUITE、 C2000WARE
你(们)好 对于折页代码、计时器中断设置为频率。 在 ISR 中、读取 ADC 通道。 GPIO 每秒切换一次。 在50 KHz 时、该程序有效。 在100KHz 时、该程序仅在 ADC 未读的情况下工作。
//工作 sci 计时器和 ADC
//########################################################################################################################
//
//文件:Example_F2802xCpuTimer.c
//
//标题:F2802x CPU 定时器示例
//
//! \addtogroup example_list
//!
CPU 定时器
//!
//! 此示例配置 CPU Timer0、1和2并递增
//! 每次定时器发出中断时计数器。
//!
//! 监视变量:
//! -timer0IntCount
//! -timer1IntCount
//! -timer2IntCount
//
//########################################################################################################################
//$TI 发行版:F2802x 支持库 v230美元
//$Release Date:5月8日星期五07:43:05 CDT 2015 $
//版权所有:版权所有(C) 2008-2015 Texas Instruments Incorporated -
// http://www.ti.com/ 保留所有权利$
//########################################################################################################################
#include
#include
#include
#include "DSP28x_Project.h"//器件头文件和示例 include 文件
#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/timer.h"
#include "F2802x_common/include/wdog.h"
#include "F2802x_common/include/sci.h"
#include "F2802x_common/include/adc.h"
#include "F2802x_common/include/PWM.h"
#include "IQmathLib.h"
//此文件中找到的函数的原型语句。
_interrupt void CPU_timer0_ISR (void);
void ADC_Config (void);
uint16_t Voltage7;
int i = 0;
uint32_t int_0 = 0;
clk_handle myClk;
Flash_handle myFlash;
GPIO_Handle myGpio;
PIE_Handle myPie;
Timer_handle myTimer0;
SCI_Handle mySci;
PWM_Handle myPwm、myPwm2;
adc_handle myAdc;
cpu_handle myCpu;
bool toggle = false;
//时钟使用周期值进行设置,GPIO 根据值进行切换
uint32_t 周期= 100000;
void main (void)
{
uint16_t ReceivedChar;
pll_handle myPll;
WDOG_Handle myWDog;
//初始化此应用程序所需的所有句柄
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));
myTimer0 = timer_init (((void *) TIMER0_base_ADDR、sizeof (timer_Obj));
myWdDog = WDOG_INIT ((void *) WDOG_BASE_ADDR、sizeof (WDOG_Obj));
mySci = SCI_init ((void *) SCIA_BASE_ADDR、sizeof (SCI_Obj));
myAdc = ADC_init ((void *) ADC_base_ADDR、sizeof (ADC_Obj));
myPwm = PWM_init ((void *) PWM_ePWM1_base_ADDR、sizeof (PWM_Obj));
myPwm2 = PWM_init (((void *) PWM_ePWM2_base_ADDR、sizeof (PWM_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_12、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);
// extern uint16_t * RamfuncsLoadStart、* RamfuncsLoadEnd、* RamfuncsRunStart;
#endif
//初始化 GPIO
GPIO_setPullUp (myGpio、GPIO_Number_28、GPIO_PULLUP_Enable);
GPIO_setPullUp (myGpio、GPIO_Number_29、GPIO_PULLUP_Disable);
GPIO_setQualification (myGpio、GPIO_Number_28、GPIO_Qual_异 步);
GPIO_setMode (myGpio、GPIO_Number_28、GPIO_28_Mode_SCIRXDA);
GPIO_setMode (myGpio、GPIO_Number_29、GPIO_29_Mode_SCITXDA);
PI_setDebugIntVectorTable (myPie);
PIE_ENABLE (myPie);
//此示例中使用的中断被重新映射到
//此文件中的 ISR 函数。
EALLOW;//这是写入 EALLOW 受保护寄存器所必需的
PI_registerPieIntHandler (myPie、PI_GroupNumber_1、PI_SubGroupNumber_7、(intVec_t)&CPU_timer0_ISR);
EDIS;//这是禁止写入 EALLOW 受保护寄存器所必需的
Timer_stop (myTimer0);
#IF (CPU_FRQ_60MHz)
//配置 CPU 定时器0\每秒中断一次,60 MHz 时钟:
Timer_setPeriod (myTimer0、60 * 1000000/周期);
#endif
Timer_setPreScaler (myTimer0、0);
Timer_reload (myTimer0);
Timer_setEmulationMode (myTimer0、timer_EmulationMode_StopAfterNextDecrement);
Timer_enableInt (myTimer0);
// CpuTimer0Regs.TCR.All = 0x4001;//使用只写指令将 TSS 位设置为0
Timer_start (myTimer0);
CPU_enableInt (myCpu、CPU_IntNumber_1);
//在 PIE 中启用 TINT0:组1中断7
PIE_enableTimer0Int (myPie);
//启用全局中断和更高优先级的实时调试事件:
CPU_enableGlobalInts (myCpu);//启用全局中断 INTM
CPU_enableDebugInt (myCpu);//启用全局实时中断 DBGM
GPIO_setPullUp (myGpio、GPIO_Number_6、GPIO_PULLUP_Enable);
GPIO_setLow (myGpio、GPIO_Number_6);
GPIO_setMode (myGpio、GPIO_Number_6、GPIO_6_Mode_generalpurpose);
GPIO_setDirection (myGpio、GPIO_Number_6、GPIO_Direction_Output);
GPIO_setPullUp (myGpio、GPIO_Number_7、GPIO_PULLUP_Enable);
GPIO_setHigh (myGpio、GPIO_Number_7);
GPIO_setMode (myGpio、GPIO_Number_7、GPIO_7_Mode_generalpurpose);
GPIO_setDirection (myGpio、GPIO_Number_7、GPIO_Direction_Output);
ADC_Config ();
//步骤6. 空闲循环。 只需坐下来循环(可选):
for (;;){
}
}
_interrupt void CPU_timer0_ISR (void)
{
INT_0++;
if (int_0 >=周期)
{
INT_0 = 0;
如果(切换){
GPIO_setLow (myGpio、GPIO_Number_6);
GPIO_setHigh (myGpio、GPIO_Number_7);
}
否则{
GPIO_setHigh (myGpio、GPIO_Number_6);
GPIO_setLow (myGpio、GPIO_Number_7);
}
TOGGLE =!TOGGLE;
}
//Voltage7 = ADC_readResult (myAdc、ADC_ResultNumber_7);//Running_Total/filter_size;
PI_clearInt (myPie、PI_GroupNumber_1);
}
void ADC_Config (){
//初始化 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);
//配置 ADC
//注意:通道 ADCINA4将被双采样以解决修订版0器件勘误表中的 ADC 第一个采样问题
ADC_setIntPulseGenMode (myAdc、ADC_IntPulseGenMode_Prior);//ADCINT1在 AdcResults 锁存后跳闸
ADC_enableInt (myAdc、ADC_IntNumber_1);//启用 ADCINT1
ADC_setIntMode (myAdc、ADC_IntNumber_1、ADC_IntMode_ClearFlag);//禁用 ADCINT1连续模式
ADC_setIntSrc (myAdc、ADC_IntNumber_1、ADC_IntSrc_EOC2);//设置 EOC2以触发 ADCINT1触发
ADC_setSockChanNumber (myAdc、ADC_SockNumber_7、ADC_SockChanNumber_A7);//将 SOC2通道选择设置为 ADCINA2
ADC_setSockTrigSrc (myAdc、ADC_SockNumber_7、ADC_SockTrigSrc_EPWM1_ADCSOCA);//设置 SOC2在 EPWM1A 上启动触发、因为轮询 SOC0先转换 SOC1、然后转换 SOC2
ADC_setSockSampleWindow (myAdc、ADC_SockNumber_7、ADC_SockSampleWindow_40_cycles);//将 SOC2 S/H 窗口设置为7个 ADC 时钟周期(6个 ACQPS 加1)
//AdcRegs.ADCOFFTRIM。ALL = 0x109c;//-256
//0x00ff 表示255
ENABLE_PROTECTED 寄存器_WRITE_MODE;
//AdcRegs.ADCOFFTRIM.ALL = 0x00ff;
disable_protected_register_write_mode;
//启用 PWM 时钟
CLK_enablePwmClock (myClk、PWM_NUMBER_1);
//设置 PWM
PWM_enableSockpulse (myPwm);//在组上启用 SOC
PWM_setSockAPulseSrc (myPwm、PWM_SockPulseSrc_CounterEqualCmpAcincr);//从 CPMA 向上计数选择 SOC
PWM_setSockAPeriod (myPwm、PWM_SockPeriod_FirstEvent);//在发生第一个事件时生成脉冲
PWM_setCmpA (myPwm、0x0080);//设置比较值
PWM_setPeriod (myPwm、0x0258);//设置 ePWM1的周期
PWM_setCounterMode (myPwm、PWM_CounterMode_Up);//递增计数并启动
CLK_enableTbClockSync (myClk);
返回;
}
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//不再需要。
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================