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.

[参考译文] CCS/LAUNCHXL-F28379D:Example_trip_zone

Guru**** 2563960 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/640240/ccs-launchxl-f28379d-example_trip_zone

器件型号:LAUNCHXL-F28379D

工具/软件:Code Composer Studio

你好

在这里、我找到 TRIP_ZONE 程序、但无法从本站点提供的 Launch Pad 引脚分配中找到 GPIO12

这是   Overview Users Guide (概述用户指南)中的 doc:page No:9

计划:

//######################################################################################################################
//
//文件:epwm_trip_zone.c
//
//标题:使用跳闸区域子模块的 ePWM 模块。
//
//! addtogroup cpu01_example_list
//!

ePWM 跳闸区域模块(ePWM_TRIP_ZONE)


//!
//! 此示例按如下方式配置 ePWM1和 ePWM2
//! - ePWM1将 TZ1作为单触发源
//! - ePWM2将 TZ1作为逐周期触发源
//!
//! 最初将 TZ1连接至高电平。 在测试期间、监控 ePWM1或 ePWM2
//! 示波器上的输出。 将 TZ1拉至低电平以查看效果。
//!
//! b 外部连接\n
//! - EPTWM1A 位于 GPIO0上
//! - EPTWM2A 位于 GPIO2上
//! - TZ1位于 GPIO12上
//!
//! 此示例还使用输入 X-BAR。 GPIO12 (外部
//! 触发器)被路由到输入 X_bar、然后将其路由到 TZ1。
//!
//! 定义 TZ 事件时、EPWM1A 将经历一次性跳闸
//! EPWM2A 将经历逐周期跳闸。
//!
//____________ _________________________________
//||||
// GPIO12 -- | I/P X-BAR |--- TZ1---- | ePWM TZ 模块|--- TZ 事件
//|_________________ |_________________________ |
//
//
//
//######################################################################################################################
//$TI 版本:F2837xD 支持库 V210 $
//$Release Date:Tue Nov1 14:46:15 CDT 2016 $
//版权所有:版权所有(C) 2013-2016 Texas Instruments Incorporated -
// http://www.ti.com/ 保留所有权利$
//######################################################################################################################

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

//
//定义
//
#define EXTrig//在使用外部触发器进行测试时保留未注释。
//使用 ePWM 触发器进行测试的注释。

//
//全局
//
uint32 EPwm1TZIntCount;
uint32 EPwm2TZIntCount;

//
//函数原型
//
void InitEPwm1Examples(void);
void InitEPwm2Examples(void);
void InitTzGpio (void);
_interrupt void epwm1_tzint_ISR (void);
_interrupt void epwm2_tzint_ISR (void);
void InitEPwmGpio_TZ (void);

//
//主函
//
void main (void)

//
//步骤1. 初始化系统控制:
// PLL、安全装置、启用外设时钟
//此示例函数位于 F2837xD_SYSCTRL.c 文件中。
//
InitSysCtrl();

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

//
//启用 PWM1和 PWM2
//
CpuSysRegs.PCLKCR2.bit.EPWM1=1;
CpuSysRegs.PCLKCR2.bit.EPWM2=1;

//
//在这种情况下、只需初始化 ePWM1、ePWM2、ePWM3的 GPIO 引脚
//
InitEPwmGpio_TZ ();
InitTzGpio();

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

//
//将 PIE 控制寄存器初始化为默认状态。
//默认状态为禁用所有 PIE 中断和标志
//被清除。
//此函数位于 F2837xD_PIECTRL.c 文件中。
//
InitPieCtrl();

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

//
//使用指向 shell 中断的指针初始化 PIE 矢量表
//服务例程(ISR)。
//这将填充整个表,即使是中断也是如此
//在本例中未使用。 这对于调试很有用。
//可以在 F2837xD_DefaultIsr.c 中找到 shell ISR 例程
//此函数可在 F2837xD_PieVect.c 中找到
//
InitPieVectTable();

//
//此示例中使用的中断被重新映射到
//此文件中的 ISR 函数。
//
EALLOW;//这是写入 EALLOW 受保护寄存器所必需的
PieVectTable.EPWM1_TZ_INT =&epwm1_tzint_ISR;
PieVectTable.EPWM2_TZ_INT =&epwm2_tzint_ISR;
EDIS;//这是禁止写入 EALLOW 受保护寄存器所必需的

//
//步骤4. 初始化器件外设:
//
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC =0;
EDIS;

InitEPwm1Examples();
InitEPwm2Examples();

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

//
//步骤5. 特定于用户的代码、启用中断:
//
EPwm1TZIntCount = 0;
EPwm2TZIntCount = 0;

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

//
//在 PIE 中启用 ePWM INTn:组3中断1-3
//
PieCtrlRegs.PIEIER2.bit.INTx1 = 1;
PieCtrlRegs.PIEIER2.bit.INTx2 = 1;

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

//
//步骤6. 空闲循环。 只需坐下来循环(可选):
//
for (;;)

ASM (" NOP");

//
// epwm1_tzint_ISR - EPWM1 TZ ISR
//
_interrupt void epwm1_tzint_ISR (void)

EPwm1TZIntCount++;

//
//要重新启用 OST 中断,请执行以下操作:
// EALLOW;
// EPwm1Regs.TZCLR.bit.OST = 1;
// EPwm1Regs.TZCLR.bit.INT = 1;
// EDIS;
//

//
//确认此中断以接收来自组2的更多中断
//
PieCtrlRegs.PIEACX.ALL = PIEACK_group2;

//
// epwm2_tzint_ISR - EPWM2 TZ ISR
//
_interrupt void epwm2_tzint_ISR (void)

GpioDataRegs.GPATOGGLE.bit.GPIO11=1;

EPwm2TZIntCount++;

//
//清除标记-我们将继续执行
//此中断直到 TZ 引脚变为高电平
//
EALLOW;
EPwm2Regs.TZCLR.bit.CBC = 1;
EPwm2Regs.TZCLR.bit.INT = 1;
EDIS;

//
//确认此中断以接收来自组2的更多中断
//
PieCtrlRegs.PIEACX.ALL = PIEACK_group2;

//
// InitEPwm1Example-Initialize EPWM1配置
//
空 InitEPwm1Examples()

//
//启用 TZ1作为一次性跳闸源
//
EALLOW;
EPwm1Regs.TZSEL.bit.OSHT1 = 1;

//
//设置 TZA
//
EPwm1Regs.TZCTL.bit.TZA = TZ_FORCE_HI;

//
//启用 TZ 中断
//
EPwm1Regs.TZEINT.bit.OST = 1;
EDIS;

EPwm1Regs.TBPRD = 12000;//设置定时器周期
EPwm1Regs.TBPHS.bit.TBPHS = 0x0000;//相位为0
EPwm1Regs.TBCTR = 0x0000;//清除计数器

//
//设置 TBCLK
//
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;//向上计数
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;//禁用相位加载
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV4;//时钟与 SYSCLKOUT 的比率
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV4;

EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADODE;//每0加载一次寄存器
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;

//
//设置比较
//
EPwm1Regs.CMPA.bit.CMPA = 6000;

//
//设置操作
//
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;//在 CAU 上设置 PWM1A
EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;//清除 CAD 上的 PWM1A

//
// InitEPwm2Example-Initialize EPWM2配置
//
空 InitEPwm2Examples()

//
//启用 TZ1作为一个逐周期触发源
//
EALLOW;
EPwm2Regs.TZSEL.bit.CBC1 = 1;

//
//设置 TZA
//
EPwm2Regs.TZCTL.bit.TZA = TZ_FORCE_HI;

//
//启用 TZ 中断
//
EPwm2Regs.TZEINT.BIT.CBC = 1;
EDIS;

EPwm2Regs.TBPRD = 6000;//设置定时器周期
EPwm2Regs.TBPHS.bit.TBPHS = 0x0000;//相位为0
EPwm2Regs.TBCTR = 0x0000;//清除计数器

//
//设置 TBCLK
//
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;//向上计数
EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE;//禁用相位加载
EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV4;//时钟与 SYSCLKOUT 的比率
EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV4;//慢、只观察
//范围。

//
//设置比较
//
EPwm2Regs.CMPA.bit.CMPA = 3000;

//
//设置操作
//
EPwm2Regs.AQCTLA.bit.CAU = AQ_SET;//在 CAU 上设置 PWM2A
EPwm2Regs.AQCTLA.bit.CAD = AQ_CLEAR;//清除 CAD 上的 PWM2A

//
// InitTzGpio -初始化 TZ GPIO
//
空 InitTzGpio (空)

//
//对于外部触发器,GPIO12作为 TripZone 的触发器
//
GpioCtrlRegs.GPAPUD.bit.GPIO12 = 0;//启用 GPIO12上的上拉电阻(TZ1)

GpioCtrlRegs.GPAQSEL1.bit.GPIO12 = 3;//异步输入 GPIO12 (TZ1)

EALLOW;
InputXbarRegs.INPUT1SELECT = 12;
EDIS;

//
//用于监视何时进入 TZ 中断
//
EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO11 = 1;//禁用 GPIO0上的上拉电阻(EPWM1A)
GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 0;//将 GPIO0配置为 EPWM1A
GpioCtrlRegs.GPADIR.bit.GPIO11=1;
EDIS;

//
// InitEPwmGpio_TZ -初始化 EPWM1A 和 EPWM2A GPIO
//
空 InitEPwmGpio_TZ (空)

EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO0 = 1;//禁用 GPIO0上的上拉电阻(EPWM1A)
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;//将 GPIO0配置为 EPWM1A
GpioCtrlRegs.GPAPUD.bit.GPIO2 = 1;//禁用 GPIO2上的上拉电阻(EPWM2A)
GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 1;//将 GPIO2配置为 EPWM2A
EDIS;

//
//文件结束
//

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

    您好、Nageswara、

    我认为 GPIO12在 Launchpad 上不可用。 您可以使用 Launchpad 上可用的任何其他未使用的 GPIO 引脚作为 TZ 源。

    谢谢
    Vasudha