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.

[参考译文] TMS320C6748:GPIO5[8]上的上升沿中断不起作用。

Guru**** 2606725 points
Other Parts Discussed in Thread: TMS320C6748

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/652511/tms320c6748-rising-edge-interrupt-on-gpio5-8-not-working

器件型号:TMS320C6748

您好!

我使用的是 TMS320C6748 lcdk 套件。 我想将 J14引脚27上的 GPIO5[8]配置为上升沿上的外部中断。 如 C6748技术参考手册第899页所示、我想执行以下操作:

要将 GPIO 中断配置为仅在 GPIO 信号的上升沿发生:

•向 SET_RIS_TRIG 中的相关位写入逻辑1。

•向 CLR_FAUL_TRIG 中的相关位写入逻辑1。

但是在我的程序中,当我尝试对这些寄存器进行编程时,它们不会被编程。 下面给出了我的程序。 请帮助我找到错误。

#include "gpio.h"
#include "psc.h"
#include "interrupt.h"
#include "SoC_C6748.h"
#include "lcdkC6748.h"

#include"硬件类型.h"

#include"HW_SYSCFg0_C6748.h"


/ /
/*本地函数原型*/
/ /
静态空延迟(volatile unsigned int delay);

/ /
/*全局变量*/
/ /

/ /
/*本地函数定义*/
/ /

#define GPIO_base_add 0x01e26000

int flag=0;
void GPIOBank5Pin6PinMuxSetup();

static void gpioIsr();
static void SetupInt (void);
静态空 ConfigureIntgpio (void);
int main (空)


/* GPIO 的本地 PSC 编号为3。 GPIO 属于 PSC1模块。*/
PSCModuleControl (SOC_PSC_1_regs、HW_PSC_GPIO、PSC_POWERDOMAIN_AYST_ON、
PSC_MDCTL_NEW_ENABLE);

/* GPIO 组5的引脚8的引脚复用。*/
GPIOBank5Pin6PinMuxSetup();

/*将引脚89 (GP6[13])设置为输出。*/
GPIODirModeSet (SOC_GPIO_0_regs、87、GPIO_DIR_INPUT);

SetupInt();

/*配置 AINTC 以接收和处理 UART 中断。 *
ConfigureIntgpio();

// HWREG (GPIO_base_add+0x74)= 0x00400000;//设置 SET_RIS_TRIG45
// HWREG (GPIO_base_add+0x80)=0x00400000;//设置 CLR_FAUL_TRIG45

HWREG (0x01e26074)= 0x00400000;//设置 SET_RIS_TRIG45
HWREG (0x01e26080)= 0x00400000;//设置 CLR_FAUL_TRIG45

while (1);

/*
**\brief 此功能检查 MMC/SD 卡的插入状态
**在设备中,并在串行上打印相关的语句
**外部设备的通信控制台。
**
*

/*
**\brief 可以调用此函数以生成延迟。
*

静态空延迟(volatile unsigned int delay)

while (delay--);

空 GPIOBank5Pin6PinMuxSetup()

HWREG (0x01c14150)|=0x00000080;//在 pinmux12中设置相应的位
HWREG (0x01c14150)&=0xFFFFFF80;


静态空 gpioIsr()

flag=1;
HWREG (GPIO_BASE_ADDE+0x74)= 0x00000000;//设置 SET_RIS_TRIG45
HWREG (GPIO_BASE_ADDE+0x80)= 0x00000000;//设置 CLR_FAUL_TRIG45

静态空 SetupInt (空)

#ifdef _TMS320C6x
//初始化 DSP INTC
IntDSPINTCMINIT();

//全局启用 DSP 中断
IntGlobalEnable();
其他
/*初始化 ARM 中断控制器(AINTC)。 *
IntAINTCInit();

/*在 CPSR 中启用 IRQ。*/
IntMasterIRQEnable();

/*在 AINTC 的 GER 中启用中断。*/
IntGlobalEnable();

/*在 AINTC 的 HIER 中启用中断。*/
IntIRQEnable();
#endif

静态空配置 Intgpio (空)

#ifdef _TMS320C6x
IntRegister (C674x_MASK_INT4、gpioIsr);
IntEventMap (C674x_MASK_INT4、SYS_INT_GPIO_B5INT);
IntEnable (C674x_MASK_INT4);
其他
/*在 AINTC 的中断矢量表中注册 UARTIsr。 *
内部寄存器(SYS_INT_GPIO_B5INT、gpioIsr);

/*将 AINTC 的通道编号2映射到 UART2系统中断。 *
IntChannelSet (SYS_INT_GPIO_B5INT、2);

IntSystemEnable (SYS_INT_GPIO_B5INT);
#endif


/********* 文件结束******** /

提前感谢。

相关信息

Shalini

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您的代码适用于 GPIO5[6]或 J14引脚27。 读取 SET_RIS_TRIG 和 CLR_FAUL_TRIG 寄存器将返回当前中断使能。 不是最后一组或 CLR 值。 这些线
    HWREG (GPIO_BASE_ADDE+0x74)= 0x00000000;//设置 SET_RIS_TRIG45
    HWREG (GPIO_BASE_ADDE+0x80)= 0x00000000;//设置 CLR_FAUL_TRIG45
    完全不执行任何操作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    感谢您的回复。 但这些线在 ISR 中。 我能够看到 HWREG (0x01e26074)= 0x00400000;//设置 SET_RIS_TRIG45
    设置 SET_RIS_TRIG45和 CLR_RIS_TRIG45中的位22。 此外、HWREG (0x01e26080)= 0x00400000;//设置 CLR_FAUL_TRIG45不设置 CLR_FAUL_TRIG45中的任何值。 为什么会发生这种情况? 如果没有设置、如何设置中断?

    请帮助。 提前感谢。

    相关信息
    Shalini
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    进行了比较
    表19-13. GPIO 清除下降沿中断寄存器(CLR_FAL_TRIGn)字段描述

    禁用 GPK[j]上的下降沿中断检测。 读取 SET_FAL_TRIGn 或中的 GPkPj 位
    CLR_FAL_TRIGn 始终返回下降沿中断生成函数的指示
    已启用 GPK[j]。 因此、如果功能被启用、这个位将在两个寄存器中都为1、并且为零
    如果功能被禁用、则会在两个寄存器中进行写入。

    这意味着在 CLR_FAUL_TRIG45中设置一个位22将导致中断被禁用。 从 CLR_FAUL_TRIG45读回将显示当前中断使能(清除)、而不是您刚才写入的值。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    感谢您的回复。 对拖延作出反应表示遗憾。 我没上班几天。

    我想禁用下降沿的中断。 因此、我想在引脚22上设置 CLR_FAUL_TRIG45。 我正在设置 HWREG (0x01e26080)= 0x00400000;//将 CLR_FAUL_TRIG45 (即寄存器中的位22设置为高电平)。 但是、当我回读时、我只会看到一个0。 当我没有给出任何语句时,如何自动禁用我启用的中断。

    提前感谢

    相关信息
    Shalini
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不太确定误解发生在哪里。 您所描述的正是手册所说的将会发生的情况。 这一行

    HWREG (0x01e26080)= 0x00400000;//将寄存器中的 CLR_FAUL_TRIG45 (即位22)设置为高电平

    将清除每个值1的下降沿中断功能。 值0不会改变任何值。 对于0x00400000、这意味着下降沿中断功能中的位22被清除。 有效地向清除寄存器写入1将导致向其后面的中断函数寄存器写入0。

    假设您从设置寄存器读回并将其清除为两个温度变量:

    X = HWREG (0x01e2607c);//读取 SET_FAUL_TRIG45以访问下降沿中断功能寄存器
    Y = HWREG (0x01e26080);//读取 CLR_FAUL_TRIG45以访问下降沿中断功能寄存器

    x 和 y 都将显示要清除或0的位22的值、或者下降沿中断功能被禁用。 它不显示您上次写入清零或置位寄存器的值。

    类似地、向 SET 寄存器写入0不会清除中断使能寄存器。 您必须向 CLR 寄存器写入1。 写入0来置位或清零寄存器无效。 您不能直接写入中断函数寄存器、而是通过 CLR 和 SET 寄存器间接操作。