工具/软件: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