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:使用 TI 调用设置/复位引脚而不是使用结构

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/567779/compiler-tms320c6748-using-ti-calls-to-set-reset-a-pin-versus-use-a-struct

器件型号: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 "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




  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已将此内容转发给软件专家。 他们的反馈应发布在此处。

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

    器件型号: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_*
    
    
    
    

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

    让我们将该线程与以下内容相结合:
    e2e.ti.com/.../567779
    因为看起来相似。

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

    我不是 Tsvetolin 所说的 SW 专家之一、但无论如何我想进入线程。

    请查看这两种方法生成的汇编代码、以了解出现时序差异的原因。 我对您的情况有两个猜测

    1. TI 代码减少了对外设总线的读/修改/写操作和总存取。 这样就减少了等待外设总线缓慢访问完成的时间。

    2.当单步执行时、某些外设访问可能不会在捕获周期计数的情况下完成。 但是、当运行时、这些外设访问必须在下一个函数调用或宏中开始访问之前完成。

    C28x 内核使用比 C674x 内核更短的流水线。 C28x 流水线受到高度保护、这使得在汇编语言中进行编程变得更容易、并且更具确定性;C674x 流水线完全不受保护、因此更容易达到非常高的时钟速率、但使在汇编语言中进行编程变得非常困难(除非您是编译器)。

    此致、
    RandyP