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.

[参考译文] LAUNCHXL-F28379D:我想将 count = 0时的 ADC SOC 添加到此代码中

Guru**** 2463330 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1501371/launchxl-f28379d-i-want-to-add-the-adc-soc-at-count-0-to-this-code

器件型号:LAUNCHXL-F28379D

工具/软件:

我有这个代码在每个计数器= 0时触发 ISR  

对于此代码、我想添加 ADC 在 COUNTER =0时采样的条件。 任何人都可以帮助我添加这个 ADC 条件吗:  

////包含的文件
//
#include "f28x_Project.h"


//// defines

//#define EPWM1_TIMER_TBPRD 1250 // PERIOD 寄存器




////函数原型//

void InitEPwm1Example (void);__interrupt void epwm1_isr (void);


// Main // void main (void)


{////// void)

第1步。 初始化系统控制:
// PLL、看门狗、启用外设时钟
//此示例函数位于 F2837xD/sysctrl.c 文件中。
//
InitSysCtrl();

////
步骤2。 初始化 GPIO:
//此示例函数位于 F2837xD/gpio.c 文件中
、并且//说明如何将 GPIO 设置为默认状态。
//
//// InitGpio ();

////
启用 PWM1、PWM2和 PWM3
//
cpuSysRegs.PCLKCR2.bit.EPWM1=1;


//对于这种情况、只初始化 ePWM1、ePWM2、ePWM3的 GPIO 引脚

//这些函数位于 F2837xD/ePWM.c 文件中//
InitEPwm1Gpio();


////步骤3。 清除所有中断并初始化 PIE 矢量表:
//禁用 CPU 中断
//
DINT;


//将 PIE 控制寄存器初始化为默认状态。
//默认状态是禁用所有 PIE 中断、并且标志
//被清除。
//此函数可在 F2837xD/PIECTRL.c 文件中找到。
//
InitPieCtrl();

//
//禁用 CPU 中断并清除所有 CPU 中断标志:
//
IER = 0x0000;
IFR = 0x0000;


////使用指向 shell 中断//
服务例程(ISR)的指针初始化 PIE 向量表。
//这将填充整个表、即使
此示例中未使用中断//。 这对于调试目的很有用。
// shell ISR 例程位于 F2837xD/DefaultIsr.c 中
。//此函数位于 F2837xD/PieVect.c 中
。//
InitPieVectTable ();

//
//本示例中使用的中断重新映射
到此文件中的// ISR 函数。
//
EALLOW;//需要执行此操作才能写入受 EALLOW 保护的寄存器
PieVectTable.EPWM1_INT =&epwm1_isr;
EDIS;//需要执行此操作才能禁用对受 EALLOW 保护的寄存器


的写入////对于本例、仅初始化 EPWM
//
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 0;
EDIS;

InitEPwm1Example();

EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;

////
步骤4。 用户特定代码、启用中断:
////////////


启用连接到 EPWM1-3的 CPU INT3 INT:
//
IER |= M_INT3;

//
在 PIE 中启用 EPWM INTn:组3中断1-3
//
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;


//启用全局中断和更高优先级的实时调试事件:
//
EINT;//启用全局中断 INTM
ERTM;//启用全局实时中断 DBGM ////


步骤5。 空闲环路。 只需坐下来并一直循环(可选):
//
for (;;)
{
ASM (" NOP");
}
}

////
epwm1_isr - EPWM1 isr
//
__interrupt void epwm1_isr (void)
{

//
//清除该计时器的 INT 标志
//
EPwm1Regs.ETCLR.bit.INT = 1;

//
//确认该中断可接收来自组3的更多中断
//
PieCtrlRegs.PIEACK.ALL = PIEACK_GROUP3;
}


//// InitEPwm1Example -初始化 EPWM1配置
//
void InitEPwm1Example()
{
//
//设置 TBCLK
//
EPwm1Regs.TBPRD = EPWM1_TIMER_TBPRD; //设置计时器周期801 TBCLK
EPwm1Regs.TBPHS.bit.TBPHS = 0x0000; //相位为0
EPwm1Regs.TBCTR = 0x0000; //清除计数器

//
//设置比较值
//
EPwm1Regs.CMPA.bit.CMPA = EPWM1_TIMER_TBPRD/2;//设置比较 A 值
EPwm1Regs.CMPB.bit.CMPB = EPWM1_TIMER_TBPRD/2;//设置比较 B 值

//
//设置计数器模式
//
EPwm1Regs.TBCTL.BIT.CTRMODE = TB_COUNT_UPdown;//向上和向下计数
EPwm1Regs.TBCTL.BIT.PHSEN = TB_DISABLE; //禁用相位加载
EPwm1Regs.TBCTL.BIT.HSPCLKDIV = TB_DIV1; //时钟比与 SYSCLKOUT
EPwm1Regs.TBCTL.BIT.CLKDIV = TB_DIV1;

//
//设置重影
//
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;//零负载
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

//
//设置操作
//
EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; //在事件 A 启动时设置 PWM1A
//计数
EPwm1Regs.AQCTLA.bit.PRD = AQCLEAR; //清除事件 A 上的 PWM1A、
//向下计数

EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET; //在事件 A 启动时设置 PWM1A
//计数
EPwm1Regs.AQCTLB.bit.PRD = AQCLEAR; //清除事件 A 上的 PWM1A、
//向下计数

//
//中断、我们将在其中更改比较值
//
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; //在发生零事件时选择 INT
EPwm1Regs.ETSEL.bit.intEn = 1; //启用 INT
EPwm1Regs.ETPS.bit.INTPRD = ET_1st; //在发生第3个事件时生成 INT

}



////文件结尾// 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    若要加上 ADC 在 COUNTER = 0时采样的条件、您需要将 ADC 配置为在 EPWM 计数器归零事件时触发。

    以下是可以添加到InitEPwm1Example 函数的示例:

    //在发生 ePWM 计数器零事件时启用 ADC 触发

    EPwm1Regs.SOCEN.bit.SOC0 = 1//启用 SOC0 (ePWM 计数器零事件)

    EPwm1Regs.SOCSEL.BIT.SOC0 = SOC_CTR_ZERO//选择 SOC0源作为 EPWM 计数器零事件  

    希望这有所帮助。

    此致。