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.
工具/软件:TI C/C++编译器
我看到了一种奇怪的行为、我很不理解:
我曾使用 Delfino 控制器、非常喜欢访问外设中寄存器和位的结构机制、我想我会尝试对6748 DSP 进行相同的访问。
因此、我创建了一个头文件、其中包含根据2000系列的完成方式定义 GPIO 寄存器和位的结构。 请参阅文件。
此外、我还制作了一个小测试文件、以了解其工作原理。 请参阅文件。
现在我们来看看奇怪的东西:
当我单步 执行"GPIOPinWrite (SOC_GPIO_0_regs、GPIO_PIN_NUMBER (6、6)、1)"和"GpioBanks.B6_7.set.bit.SETA6 = 1;"行时、我在计时器2中计算时钟脉冲时获得了两个非常不同的结果。
对于 TI 调用(GPIOPinWrite)、时钟脉冲数约为25至30、当我测试结构时、脉冲数为3至5。 看起来是一个巨大的改进:当使用结构方法时、速度提高了5倍。
好的、让我们在没有调试器的情况下实时尝试它:现在、事实证明 TI 调用速度更快(~40%?) 更好的方法。 不好。 我在 示波器上查看了实际的引脚 GPIO 6。
但是、与自由运行相比、使用调试器时、它的速度有多快?
有没有好的解释?
谢谢、
克劳斯·克努森
//代码
/* * main.c */ #include "psc.h" #include "SoC_C6748.h" #include "gpio.h" #include "pll_regs.h" #include "c6000 gpioStruct.h" #define GPIO_PIN_NUMBER (BANK、PINNR)(BANK * 16 + void 1)(piostruct)+ void 1 (p2+ pinstruct)(void 1)(void 1);gpioStart2 PSCModuleControl (SOC_PSC_1_regs、HW_PSC_GPIO、PSC_POWERDOMAIN_AYST_ON、 PSC_MDCTL_NEW_ENABLE); PINMUX14=0x00000080; //将引脚设置为 GPIO (6、6) GPIODirModeSet (SOC_GPIO_0_regs、GPIO_PIN_NUMBER (6、6)、GPIO_DIR_Output); ConfigandStartTimer_2 (); while (1) { TestGPIO_struct (); } #pragma DATA_SECTION (GpioBanks、"GPIO_REG"); 易失性结构 GPIO_Banks_0_8 GpioBanks; void TestGPIO_struct (void) { GPIOPinWrite (SOC_GPIO_0_regs、GPIO_PIN_NUMBER (6、6)、1);//步长 GPIOPinWrite (SOC_GPIO_0_regs、GPIO_PIN_NUMBER (6、6)、0);//步长 //使用结构两次以区分 TI 调用和结构 GpioBanks.B6_7.set.bit.SET6 = 1; GpioBanks.B6_7.CLR.bit.CLRA6 = 1; GpioBanks.B6_7.set.bit.SET6 = 1; GpioBanks.B6_7.CLR.bit.CLRA6 = 1; } void ConfigandStartTimer_2 (void) { TimerConfigure (SOC_TMR_2_regs、TMR_CFG_64BIG_CLK_INT); TimerPeriodSet (SOC_TMR_2_regs、TMR_TIMER12、0xFFFFFFFF); TimerPeriodSet (SOC_TMR_2_regs、TMR_TIMER34、0xFFFFFFFF); TimerEnable (SOC_TMR_2_regs、TMR_TIMER12、TMR_ENABLE_CONT); }
//结构
/*
* main.c
*
#include "psc.h"
#include "SoC_C6748.h"
#include "gpio.h"
#include "pll_regs.h"
#include "timer.h"
#include "C6000GPIOStruct.h"
#define GPIO_PIN_NUMBER (组、PINNR)(组* 16 + PINNR + 1)
void TestGPIO_struct (void);
void ConfigandStartTimer_2 (void);
int main (void){
PSCModuleControl (SOC_PSC_1_regs、HW_PSC_GPIO、PSC_POWERDOMAIN_AYST_ON、
PSC_MDCTL_NEW_ENABLE);
PINMUX14 = 0x00000080; //将引脚设置为 GPIO (6、6)
GPIODirModeSet (SOC_GPIO_0_regs、GPIO_PIN_NUMBER (6、6)、GPIO_DIR_Output);
ConfigandStartTimer_2 ();
while (1)
{
TestGPIO_struct ();
}
}
#pragma DATA_SECTION (GpioBanks、"GPIO_REG");
volatile struct GPIO_banks_0_8 GpioBanks;
void TestGPIO_struct (void)
{
GPIOPinWrite (SOC_GPIO_0_regs、GPIO_PIN_NUMBER (6、6)、1);//步长
GPIOPinWrite (SOC_GPIO_0_regs、GPIO_PIN_NUMBER (6、6)、0);//步长
//使用结构两次以区分 TI 调用和结构
GpioBanks.B6_7.set.bit.SET6 = 1;
GpioBanks.B6_7.CLR.bit.CLRA6 = 1;
GpioBanks.B6_7.set.bit.SET6 = 1;
GpioBanks.B6_7.CLR.bit.CLRA6 = 1;
}
void ConfigandStartTimer_2 (void)
{
TimerConfigure (SOC_TMR_2_regs、TMR_CFG_64BIG_CLK_INT);
TimerPeriodSet (SOC_TMR_2_regs、TMR_TIMER12、0xFFFFFFFF);
TimerPeriodSet (SOC_TMR_2_regs、TMR_TIMER34、0xFFFFFFFF);
TimerEnable (SOC_TMR_2_regs、TMR_TIMER12、TMR_ENABLE_CONT);
}
//链接器 CMD 文件
//===========================================================================================================================================
//链接 c674 DSP 程序的链接器命令文件
//
//这些链接器选项仅用于命令行链接。 对于 IDE 链接、
//应在 Project Properties 中设置链接器选项。
// 使用 C 惯例的-c 链接
// -stack 0x1000 软件堆栈大小
// -heap 0x1000 堆区域大小
//====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
-stack 0x3000
//-heap 0x2000
//===========================================================================================================================================
// 指定系统内存映射
//===========================================================================================================================================
存储器
{
L1P: O = 0x11E00000 l = 0x00008000
L1D: O = 0x11F00000 l = 0x00008000
L2: O = 0x11800000 l = 0x00040000
SHARGE_RAM:O = 0xC0000000 l = 0x00100000
DDR2: O = 0xC0100000 l = 0x07F00000
EMIFAB = 0x60000000 l = 0x02000000
GPIOMEM o = 0x01E26010 l = 0xC8
}
//===========================================================================================================================================
// 指定段分配到内存中
//===========================================================================================================================================
部分
{
.cinit > L2 //初始化表
.pinit > shared_RAM//DDR2
.init_array > L2 //
binit > L2 //引导表
.const > shared_RAM //DDR2//L2 //常量数据。 是 L2、现在是具有 FPGA 代码的 DDR2
.switch > L2 //跳转表
.text > L2// DDR2 //可执行代码
.text:_c_int00:align=1024 > L2 // Entrypoint
组(NEARDP_DATA) //组近数据
{
.neardata
rodata
.bss //注意:已删除填充= 0
} > L2
.far:fill = 0x0、load > L2 // far 全局和静态变量
.fardata > L2 //之前为 L2。 Far RW 数据
.stack > L2 //软件系统堆栈
.sysmem > L2 //动态内存分配区域
堆 > DDR2
{
。 += 0x01000000;
}
.cio > L2 // C I/O 缓冲器
vecs > L2 //中断矢量
FPGASection > EMIFAB2
DDR2Funcs > DDR2
SharedRAMFuncs > Shared_RAM
LEVEL2 > L2
FASTMEM:Fill = 0x0 > L1D
FASTPROG > L1P
GPIO_REG > GPIOMEM
}
器件型号:TMS320C6748
工具/软件:TI C/C++编译器
我看到了一种奇怪的行为、我很不理解:
我曾使用 Delfino 控制器、非常喜欢访问外设中寄存器和位的结构机制、我想我会尝试对6748 DSP 进行相同的访问。
因此、我创建了一个头文件、其中包含根据2000系列的完成方式定义 GPIO 寄存器和位的结构。 请参阅文件。
此外、我还制作了一个小测试文件、以了解其工作原理。 请参阅文件。
现在我们来看看奇怪的东西:
当我单步 执行"GPIOPinWrite (SOC_GPIO_0_regs、GPIO_PIN_NUMBER (6、6)、1)"和"GpioBanks.B6_7.set.bit.SETA6 = 1;"行时、我在计时器2中计算时钟脉冲时获得了两个非常不同的结果。
对于 TI 调用(GPIOPinWrite)、时钟脉冲数约为25至30、当我测试结构时、脉冲数为3至5。 看起来是一个巨大的改进:当使用结构方法时、速度提高了5倍。
好的、让我们在没有调试器的情况下实时尝试它:现在、事实证明 TI 调用速度更快(~40%?) 更好的方法。 不好。 我在 示波器上查看了实际的引脚 GPIO 6。
但是、与自由运行相比、使用调试器时、它的速度有多快?
有没有好的解释?
谢谢、
克劳斯·克努森
//代码 /* main.c */ #include "psc.h" #include "SoC_C6748.h" #include "gpio.h" #include "pll_regs.h" #include "timer.h" #include "C6000gpioStruct.h" #define GPIO_PIN_NUMBER (BANK、PINnR)(BANK 、INUTH)(INNR + INSTUDIO 1)(空1)+ INNR 空1)(空1)(空1);空1 (空1 PSCModuleControl (SOC_PSC_1_regs、HW_PSC_GPIO、PSC_POWERDOMAIN_AYST_ON、 PSC_MDCTL_NEW_ENABLE); PINMUX14=0x00000080; //将引脚设置为 GPIO (6、6) GPIODirModeSet (SOC_GPIO_0_regs、GPIO_PIN_NUMBER (6、6)、GPIO_DIR_Output); ConfigandStartTimer_2 (); while (1) { TestGPIO_struct (); } #pragma DATA_SECTION (GpioBanks、"GPIO_REG"); 易失性结构 GPIO_Banks_0_8 GpioBanks; void TestGPIO_struct (void) { GPIOPinWrite (SOC_GPIO_0_regs、GPIO_PIN_NUMBER (6、6)、1);//步长 GPIOPinWrite (SOC_GPIO_0_regs、GPIO_PIN_NUMBER (6、6)、0);//步长 //使用结构两次以区分 TI 调用和结构 GpioBanks.B6_7.set.bit.SET6 = 1; GpioBanks.B6_7.CLR.bit.CLRA6 = 1; GpioBanks.B6_7.set.bit.SET6 = 1; GpioBanks.B6_7.CLR.bit.CLRA6 = 1; } void ConfigandStartTimer_2 (void) { TimerConfigure (SOC_TMR_2_regs、TMR_CFG_64BIG_CLK_INT); TimerPeriodSet (SOC_TMR_2_regs、TMR_TIMER12、0xFFFFFFFF); TimerPeriodSet (SOC_TMR_2_regs、TMR_TIMER34、0xFFFFFFFF); TimerEnable (SOC_TMR_2_regs、TMR_TIMER12、TMR_ENABLE_CONT); } //链接器 CMD 文件 //======================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== //链接 c674 DSP 程序的链接器命令文件 // //这些链接器选项仅用于命令行链接。 对于 IDE 链接、 //应在 Project Properties 中设置链接器选项。 // -c 使用 C 惯例进行链接 // -stack 0x1000 软件栈大小 // 堆0x1000 堆区域大小 //=========================================================================================================================================================================== -stack 0x3000 //-heap 0x2000 //========================================================================================================================================================================================================================1. // 指定系统内存映射 //================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================ 内存 { L1P: O = 0x11E00000 L = 0x00008000 L1D: O = 0x11F00000 L = 0x00008000 L2: O = 0x11800000 L = 0x00040000 SHARGE_RAM:O = 0xC0000000 L = 0x00100000 DDR2: O = 0xC0100000 L = 0x07F00000 EMIFA2. O = 0x60000000 L = 0x02000000 GPIOMEM O = 0x01E26010 L = 0xC8 } //================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================ // 指定存储器中的段分配 值//=========================================================================================================================================================================================================================================================================================================================================================================== 部分 { .cinit > L2 //初始化表 .pinit > shared_RAM//DDR2 .init_array > L2 // 二进制文件 > L2 //引导表 .const > shared_RAM //DDR2//L2 //常量数据。 是 L2、现在是具有 FPGA 代码的 DDR2 切换 > L2 //跳转表 .text > L2// DDR2 //可执行代码 .text:_c_int00:align=1024 > L2 // Entrypoint 组(NEARDP_DATA) //分组近数据 { .neardata rodata .bss //注:已删除填充= 0 } > L2 far:fill = 0x0、load > L2 // far 全局和静态变量 fardata > L2 //以前是 L2。 Far RW 数据 堆栈 > L2 //软件系统堆栈 sysmem > L2 //动态内存分配区域 堆 > DDR2 { 。 += 0x01000000; } .cio > L2 // C I/O 缓冲器 向量 > L2 //中断矢量 FPGASection > EMIFA2. DDR2Funcs > DDR2 SharedRAMFuncs > shared_RAM 级别2. > L2 FASTMEM:fill = 0x0 > L1D FASTPROG > L1P GPIO_REG > GPIOMEM } //结构 //* C6000GPIOStruct.h * *创建日期:2017年1月10日 * 作者:Claus */ #ifndef C6000GPIOSTRUCT_H_ #define C6000GPIOSTRUCT_H_ #include "cwk_types.h" struct GPIO_DIR_BITS{ uint32 DIRA0:1; uint32 DIRA1:1; uint32 DIRA2:1; uint32 DIRA3:1; uint32 DIRA4:1; uint32 DIRA5:1; uint32 DIRA6:1; uint32 DIRA7:1; uint32 DIRA8:1; uint32 DIRA9:1; uint32 DIRA10:1; uint32 DIRA11:1; uint32 DIRA12:1; uint32 DIRA13:1; uint32 DIRA14:1; uint32 DIRA15:1; uint32 DIRB0:1; uint32 DIRB1:1; uint32 DIRB2:1; uint32 DIRB3:1; uint32 DIRB4:1; uint32 DIRB5:1; uint32 DIRB6:1; uint32 DIRB7:1; uint32 DIRB8:1; uint32 DIRB9:1; uint32 DIRB10:1; uint32 DIRB11:1; uint32 DIRB12:1; uint32 DIRB13:1; uint32 DIRB14:1; uint32 DIRB15:1; }; struct GPIO_OUT_BITS{ uint32 OUTA0:1; uint32 outTA1:1; uint32 OUTA2:1; uint32 OUTA3:1; uint32 OUTA4:1; uint32 OUTA5:1; uint32 OUTA6:1; uint32 OUTA7:1; uint32 OUTA8:1; uint32 OUTA9:1; uint32 OUTA10:1; uint32 OUTA11:1; uint32 OUTA12:1; uint32 OUTA13:1; uint32 OUTA14:1; uint32 OUTA15:1; UINT32 OUTB0:1; uint32 OUTB1:1; uint32 OUTB2:1; uint32 OUTB3:1; uint32 OUTB4:1; UINT32 OUTB5:1; UINT32 OUTB6:1; UINT32 OUTB7:1; uint32 OUTB8:1; uint32 OUTB9:1; UINT32 OUTB10:1; UINT32 OUTB11:1; UINT32 OUTB12:1; UINT32 OUTB13:1; uint32 OUTB14:1; UINT32 OUTB15:1; }; struct GPIO_Set_Bits{ uint32 SETA0:1; uint32 SETA1:1; uint32 SETA2:1; uint32 SETA3:1; uint32 SETA4:1; uint32 SETA5:1; uint32 SETA6:1; uint32 SETA7:1; uint32 SETA8:1; uint32 SETA9:1; uint32 SETA10:1; uint32 SETA11:1; uint32 SETA12:1; uint32 SETA13:1; uint32 SETA14:1; uint32 SETA15:1; uint32 SETB0:1; uint32 SETB1:1; uint32 SETB2:1; uint32 SETB3:1; uint32 SETB4:1; uint32 SETB5:1; uint32 SETB6:1; uint32 SETB7:1; uint32 SETB8:1; uint32 SETB9:1; uint32 SETB10:1; uint32 SETB11:1; uint32 SETB12:1; uint32 SETB13:1; uint32 SETB14:1; UINT32 SETB15:1; }; struct GPIO_CLR_BIits{ uint32 CLRA0:1; uint32 CLRA1:1; uint32 CLRA2:1; uint32 CLRA3:1; uint32 CLRA4:1; uint32 CLRA5:1; uint32 CLRA6:1; uint32 CLRA7:1; uint32 CLRA8:1; uint32 CLRA9:1; uint32 CLRA10:1; uint32 CLRA11:1; uint32 CLRA12:1; uint32 CLRA13:1; uint32 CLRA14:1; uint32 CLRA15:1; uint32 CLRB0:1; uint32 CLRB1:1; uint32 CLRB2:1; uint32 CLRB3:1; uint32 CLRB4:1; uint32 CLRB5:1; uint32 CLRB6:1; uint32 CLRB7:1; uint32 CLRB8:1; uint32 CLRB9:1; uint32 CLRB10:1; uint32 CLRB11:1; uint32 CLRB12:1; uint32 CLRB13:1; uint32 CLRB14:1; uint32 CLRB15:1; }; struct GPIO_in_bits{ uint32 inA0:1; UINT32 INA1:1; uint32 ina2:1; uint32 ina3:1; uint32 ina4:1; uint32 ina5:1; uint32 INA6:1; UINT32 INA7:1; uint32 inA8:1; UINT32 INA9:1; uint32 inA10:1; UINT32 INA11:1; UINT32 INA12:1; UINT32 INA13:1; uint32 INA14:1; UINT32 INA15:1; uint32 INB0:1; UINT32 INB1:1; uint32 inb2:1; UINT32 INB3:1; uint32 INB4:1; uint32 INB5:1; uint32 INB6:1; uint32 INB7:1; uint32 INB8:1; uint32 INB9:1; uint32 INB10:1; uint32 INB11:1; uint32 INB12:1; uint32 INB13:1; uint32 INB14:1; UINT32 INB15:1; }; struct GPIO_SET_RIS_TRIG_Bits{ uint32 Set_RIS_TRIGA0:1; uint32 Set_RIS_TRIGA1:1; uint32 Set_RIS_TRIGA2:1; uint32 Set_RIS_TRIGA3:1; uint32 Set_RIS_TRIGA4:1; uint32 Set_RIS_TRIGA5:1; uint32 Set_RIS_TRIGA6:1; uint32 Set_RIS_TRIGA7:1; uint32 Set_RIS_TRIGA8:1; uint32 Set_RIS_TRIGA9:1; uint32 Set_RIS_TRIGA10:1; uint32 Set_RIS_TRIGA11:1; uint32 Set_RIS_TRIGA12:1; uint32 Set_RIS_TRIGA13:1; uint32 Set_RIS_TRIGA14:1; uint32 Set_RIS_TRIGA15:1; UINT32 SET_RIS_TRIGB0:1; UINT32 SET_RIS_TRIGB1:1; uint32 Set_RIS_TRIGB2:1; uint32 Set_RIS_TRIGB3:1; UINT32 SET_RIS_TRIGB4:1; UINT32 SET_RIS_TRIGB5:1; uint32 Set_RIS_TRIGB6:1; uint32 Set_RIS_TRIGB7:1; uint32 Set_RIS_TRIGB8:1; uint32 Set_RIS_TRIGB9:1; uint32 Set_RIS_TRIGB10:1; uint32 Set_RIS_TRIGB11:1; uint32 Set_RIS_TRIGB12:1; uint32 Set_RIS_TRIGB13:1; uint32 Set_RIS_TRIGB14:1; UINT32 SET_RIS_TRIGB15:1; }; struct GPIO_CLR_RIS_TRIG_Bits{ UINT32 CLR_RIS_TRIGA0:1; UINT32 CLR_RIS_TRIGA1:1; UINT32 CLR_RIS_TRIGA2:1; UINT32 CLR_RIS_TRIGA3:1; uint32 CLR_RIS_TRIGA4:1; uint32 CLR_RIS_TRIGA5:1; UINT32 CLR_RIS_TRIGA6:1; uint32 CLR_RIS_TRIGA7:1; uint32 CLR_RIS_TRIGA8:1; UINT32 CLR_RIS_TRIGA9:1; UINT32 CLR_RIS_TRIGA10:1; uint32 CLR_RIS_TRIGA11:1; uint32 CLR_RIS_TRIGA12:1; uint32 CLR_RIS_TRIGA13:1; uint32 CLR_RIS_TRIGA14:1; uint32 CLR_RIS_TRIGA15:1; UINT32 CLR_RIS_TRIGB0:1; UINT32 CLR_RIS_TRIGB1:1; UINT32 CLR_RIS_TRIGB2:1; UINT32 CLR_RIS_TRIGB3:1; UINT32 CLR_RIS_TRIGB4:1; UINT32 CLR_RIS_TRIGB5:1; UINT32 CLR_RIS_TRIGB6:1; UINT32 CLR_RIS_TRIGB7:1; UINT32 CLR_RIS_TRIGB8:1; UINT32 CLR_RIS_TRIGB9:1; uint32 CLR_RIS_TRIGB10:1; UINT32 CLR_RIS_TRIGB11:1; uint32 CLR_RIS_TRIGB12:1; uint32 CLR_RIS_TRIGB13:1; uint32 CLR_RIS_TRIGB14:1; uint32 CLR_RIS_TRIGB15:1; }; struct GPIO_SET_FAL_TRIG_Bits{ uint32 set_FAL_TRIGA0:1; uint32 set_FAL_TRIGA1:1; uint32 Set_FAL_TRIGA2:1; uint32 Set_FAL_TRIGA3:1; uint32 set_FAL_TRIGA4:1; uint32 Set_FAL_TRIGA5:1; uint32 Set_FAL_TRIGA6:1; uint32 SET_FAL_TRIGA7:1; uint32 Set_FAL_TRIGA8:1; uint32 Set_FAL_TRIGA9:1; uint32 Set_FAL_TRIGA10:1; uint32 Set_FAL_TRIGA11:1; uint32 Set_FAL_TRIGA12:1; uint32 Set_FAL_TRIGA13:1; uint32 Set_FAL_TRIGA14:1; uint32 Set_FAL_TRIGA15:1; UINT32 SET_FAL_TRIGB0:1; UINT32 SET_FAL_TRIGB1:1; uint32 set_FAL_TRIGB2:1; uint32 Set_FAL_TRIGB3:1; UINT32 SET_FAL_TRIGB4:1; UINT32 SET_FAL_TRIGB5:1; uint32 Set_FAL_TRIGB6:1; uint32 Set_FAL_TRIGB7:1; UINT32 SET_FAL_TRIGB8:1; uint32 Set_FAL_TRIGB9:1; uint32 Set_FAL_TRIGB10:1; uint32 Set_FAL_TRIGB11:1; uint32 Set_FAL_TRIGB12:1; uint32 Set_FAL_TRIGB13:1; uint32 Set_FAL_TRIGB14:1; uint32 set_FAL_TRIGB15:1; }; struct GPIO_CLR_FAL_TRIG_Bits{ uint32 CLR_FAL_TRIGA0:1; uint32 CLR_FAL_TRIGA1:1; uint32 CLR_FAL_TRIGA2:1; uint32 CLR_FAL_TRIGA3:1; uint32 CLR_FAL_TRIGA4:1; uint32 CLR_FAL_TRIGA5:1; uint32 CLR_FAL_TRIGA6:1; uint32 CLR_FAL_TRIGA7:1; uint32 CLR_FAL_TRIGA8:1; UINT32 CLR_FAL_TRIGA9:1; UINT32 CLR_FAL_TRIGA10:1; uint32 CLR_FAL_TRIGA11:1; uint32 CLR_FAL_TRIGA12:1; uint32 CLR_FAL_TRIGA13:1; uint32 CLR_FAL_TRIGA14:1; uint32 CLR_FAL_TRIGA15:1; UINT32 CLR_FAL_TRIGB0:1; UINT32 CLR_FAL_TRIGB1:1; uint32 CLR_FAL_TRIGB2:1; UINT32 CLR_FAL_TRIGB3:1; UINT32 CLR_FAL_TRIGB4:1; uint32 CLR_FAL_TRIGB5:1; uint32 CLR_FAL_TRIGB6:1; uint32 CLR_FAL_TRIGB7:1; uint32 CLR_FAL_TRIGB8:1; uint32 CLR_FAL_TRIGB9:1; uint32 CLR_FAL_TRIGB10:1; uint32 CLR_FAL_TRIGB11:1; uint32 CLR_FAL_TRIGB12:1; uint32 CLR_FAL_TRIGB13:1; uint32 CLR_FAL_TRIGB14:1; UINT32 CLR_FAL_TRIGB15:1; }; struct GPIO_INTSTAT_BITS{ uint32 INTSTATA0:1; uint32 INTSTATA1:1; uint32 INTSTATA2:1; uint32 INTSTATA3:1; uint32 INTSTATA4:1; uint32 INTSTATA5:1; uint32 INTSTATA6:1; uint32 INTSTATA7:1; uint32 INTSTATA8:1; uint32 INTSTATA9:1; uint32 INTSTATA10:1; uint32 INTSTATA11:1; uint32 INTSTATA12:1; uint32 INTSTATA13:1; uint32 INTSTATA14:1; uint32 INTSTATA15:1; uint32 INTSTATB0:1; uint32 INTSTATB1:1; uint32 INTSTATB2:1; uint32 INTSTATB3:1; uint32 INTSTATB4:1; uint32 INTSTATB5:1; uint32 INTSTATB6:1; uint32 INTSTATB7:1; uint32 INTSTATB8:1; uint32 INTSTATB9:1; uint32 INTSTATB10:1; uint32 INTSTATB11:1; uint32 INTSTATB12:1; uint32 INTSTATB13:1; uint32 INTSTATB14:1; UINT32 INTSTATB15:1; }; UNION GPIO_DIR_REG{ uint32. 全部; 结构 GPIO_DIR_BITS 位; }; UNION GPIO_OUT_REG{ uint32. 全部; 结构 GPIO_OUT_BITS 位; }; UNION GPIO_SET_REG{ uint32. 全部; 结构 GPIO_SET_BITS 位; }; UNION GPIO_CLR_REG{ uint32. 全部; 结构 GPIO_CLR_BITS 位; }; UNION GPIO_IN_REG{ uint32. 全部; 结构 GPIO_IN_BITS 位; }; UNION GPIO_SET_RIS_TRIG_REG{ uint32. 全部; 结构 GPIO_SET_RIS_TRIG_Bits 位; }; UNION GPIO_CLR_RIS_TRIG_REG{ uint32. 全部; 结构 GPIO_CLR_RIS_TRIG_Bits 位; }; UNION GPIO_SET_FAL_TRIG_REG{ uint32. 全部; 结构 GPIO_SET_FAL_TRIG_Bits 位; }; UNION GPIO_CLR_FAL_TRIG_REG{ uint32. 全部; 结构 GPIO_CLR_FAL_TRIG_Bits 位; }; UNION GPIO_INTSTAT_REG{ uint32. 全部; 结构 GPIO_INTSTAT_BITS 位; }; 结构 GPIO_BANK{ UNION GPIO_DIR_REG DIR; UNION GPIO_OUT_REG 输出; UNION GPIO_SET_REG 设置; UNION GPIO_CLR_REG CLR; 在中将 GPIO_IN_REG 连接到; UNION GPIO_SET_RIS_TRIG_REG SET_RIS; UNION GPIO_CLR_RIS_TRIG_REG CLR_RIS; UNION GPIO_SET_FAUL_TRIG_REG SET_FAL; UNION GPIO_CLR_FAL_TRIG_REG CLR_FAL; UNION GPIO_INTSTAT_REG INTSTAT; }; struct GPIO_Banks_0_8{ 结构 GPIO_BANK B0_1; 结构 GPIO_Bank B2_3; 结构 GPIO_Bank B4_5; 结构 GPIO_Bank B6_7; struct GPIO_Bank B8; }; #endif // C6000GPIOSTRUCT_H_*