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/TMS320C6748:多个 GPIO 引脚读取问题

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

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/613769/ccs-tms320c6748-problems-with-multiple-gpio-pin-read

器件型号:TMS320C6748

工具/软件:Code Composer Studio

你好。 我正在尝试使用 TMS320C6748 DSP 开发板对 多个 GPIO 输入进行读取和写入。 TI Starterware 中提供的 C 文件之一包含对多个 GPIO 引脚进行读取和写入的方法。 我的代码如下所示:

 

 

/**

* main.c

*

 

//#include "hw_emifa2.h"

//#include "hw_types.h"

//#include "SoC_C6748.h"

//#include "uartStdio.h"

//#include "interrupt.h"

//#include "EMIFA.h"

//#include "evmC6748.h"

#include "hw_gpio.h"

#include "gpio.h"

#include

#include "SoC_C6748.h"

#include "lcdkC6748.h"

#include "hw_syscfg0_C6748.h"

//#include "gpio.c"

#include "psc.h"

#include "hw_types.h"

#define _SOC_C6748_H_

//#include "gpio_v2.c"

 

 

//#define EMIFA_READ_SETUP_RESETVAL              (0x00)

//#define EMIFA_READ_STROBE_RESETVAL             (0x00)

//#define EMIFA_READ_HOLD_RESETVAL               (0x00)

//#define EMIFA_TA_RESETVAL                      (0x00)

 

 

int main (空)

   PSCModuleControl (SOC_PSC_1_regs、HW_PSC_GPIO

   PSC_POWERDOMAIN_AUSE_ON、

   PSC_MDCTL_NEW_ENABLE);

 

   unsigned int savePinmux = HWREG (SOC_SYSCFG_0_regs + SYSCFG0_PINMUX (1));

 

 

   savePinmux &=~(SYSCFG_PINMUX1_PINMUX1_27_24);

 

   savePinmux || (SYSCFG_PINMUX1_PINMUX1_27_24_GPIO0_1 << SYSCFG_PINMUX1_PINMUX1_27_24_SHIFT);

 

 

   savePinmux &=~(SYSCFG_PINMUX1_PINMUX1_23_20);

 

   savePinmux || (SYSCFG_PINMUX1_PINMUX1_23_20_GPIO0_2 << SYSCFG_PINMUX1_PINMUX1_23_20_SHIFT);

 

 

   savePinmux &=~(SYSCFG_PINMUX1_PINMUX1_19_16);

 

   savePinmux || (SYSCFG_PINMUX1_PINMUX1_19_16_GPIO0_3 << SYSCFG_PINMUX1_PINMUX1_19_16_SHIFT);

 

 

   savePinmux &=~(SYSCFG_PINMUX1_PINMUX1_15_12);

 

   savePinmux || (SYSCFG_PINMUX1_PINMUX1_15_12_GPIO0_4 << SYSCFG_PINMUX1_PINMUX1_15_12_SHIFT);

 

 

   HWREG (SOC_SYSCFG_0_regs + SYSCFG0_PINMUX (1))= savePinmux;

 

 

   savePinmux = HWREG (SOC_SYSCFG_0_regs + SYSCFG0_PINMUX (9));

 

 

   savePinmux &=~(SYSCFG_PINMUX9_PINMUX9_31_28);

 

   savePinmux || (SYSCFG_PINMUX9_PINMUX9_31_28_GPIO4_8 << SYSCFG_PINMUX9_PINMUX9_31_28_SHIFT);

 

 

   HWREG (SOC_SYSCFG_0_regs + SYSCFG0_PINMUX (9))= savePinmux;

 

   GPIODirModeSet (SOC_GPIO_0_regs、2、GPIO_DIR_OUTPUT);

   GPIODirModeSet (SOC_GPIO_0_regs、3、GPIO_DIR_OUTPUT);

 

   GPIODirModeSet (SOC_GPIO_0_regs、4、GPIO_DIR_OUTPUT);

   GPIODirModeSet (SOC_GPIO_0_regs、5、GPIO_DIR_INPUT);

 

   GPIODirModeSet (SOC_GPIO_0_regs、73、GPIO_DIR_OUTPUT);

   //GPIOBank4Pin0PinMuxSetup();

   unsigned int baseAdd = SOC_GPIO_0_regs;

//   unsigned int pinNumber = 73;

//   unsigned int regNumber = 0;

//   unsigned int pinOffset = 0;

//

//   regNumber =(pinNumber - 1)/32;

//

//   pinOffset =(pinNumber - 1)% 32;

//   pinOffset = 1 << pinOffset;

   while (1){

       GPIOMultiplePinsWrite (baseADD、0x00000000、0x00000000);

       printf ("%08x\n"GPIOMultiplePinsRead (baseAdd、0x00000000));

       GPIOMultiplePinsWrite (baseADD、0x00000000、0x00000000);

       printf ("%08x\n"、GPIOMultiplePinsRead (baseAdd、0x00000000));

 

       //HWREG (0x01E26000 + GPIO_CLR_DATA (2))= 256;

       //HWREG (0x01E26000 + GPIO_IN_DATA (2))= 256;

       //HWREG (0x01E26000 + GPIO_SET_DATA (2))= 256;

       //HWREG (0x01E26000 + GPIO_IN_DATA (2))= 256;

   }

 

//   while (1){

//       GPIOPinWrite (SOC_GPIO_0_regs、73、1);

//       ///printf ("%d\n"、GPIOPinRead (SOC_GPIO_0_regs、73));// GP4[8]

//       GPIOPinWrite (SOC_GPIO_0_regs、73、0);

//      // printf ("%d\n"、GPIOPinRead (SOC_GPIO_0_regs、73));// GP4[8]

//   }

代码似乎无法按预期工作。 代码将编译并运行、但是、我们读取的值与我们写入引脚的值不匹配。 我的问题如下:

这些方法对参数使用不同的掩码。 这些掩码的具体工作原理是什么、它们与我们读取和写入的引脚有何关系?

掩码看起来必须是32位、因为这是基地址的大小。 这是正确的吗、如果是、它们使用什么 GPIO 组?

这些方法的 C 文件提到它用于具有 AM33xx SoC 的开发板。 如果我们将开发板与此 SoC 配合使用、我们是否只能使用这些方法?

感谢所有的帮助!!

约瑟夫·P

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

    我已将此内容转发给软件专家。 他们的反馈应发布在此处。

    BR
    Tsvetolin Shulev
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请注意、如果您将 Starterware 用于 AM335x、则除非您对代码进行 SOC 级更改、否则代码将无法在 C6748开发平台上正常工作。 请下载 C6748 Starterware 并运行适用于您的评估平台的代码。

    processors.wiki.ti.com/.../StarterWare

    从此处的 GPIO 示例开始:
    processors.wiki.ti.com/.../StarterWare_01.20.01.01_User_Guide



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

    我们实际上已经下载了用于 C6748的 Starterware、并在 CCS 中查看了它的文件、但驱动程序文件夹包含一个名为"GPIO_v2.c"的文件。 代码中的注释之一是"此文件包含 AM33XX SoC 中存在的 GPIO 外设的器件抽象层 API。" 该文件包含一个用于从多个 GPIO 引脚读取的函数、不过、我真的想使用该函数。 更改 SOC 以便将此函数用于开发板是否是一个相当大的挑战? 我确实看到 C6748的 GPIO 驱动程序文件具有写入整个组的函数。 我能否对该函数进行一些调整以读取整个组、或者开发板不支持该功能?

    谢谢!