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.

[参考译文] RTOS:tirtos 中的 C6657 GPIO 中断

Guru**** 2595805 points
Other Parts Discussed in Thread: SYSBIOS, TMS320C6657

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/586287/rtos-c6657-gpio-interrupt-in-tirtos

Thread 中讨论的其他器件:SYSBIOSTMS320C6657

工具/软件:TI-RTOS

您好!

 我已经为定制板开发了一个大型测试应用。 在这种环境中、我们将使用

未定义的 GPIO (0-15)作为中断外部源。 此时、我使用评估板和

我开发了一个 TI RTOS 任务、在 TEST_PH1连接器(GPIO15)上放置了一个小开关。

当 ISR 运行时、系统的所有其他部分在 Task_sleep 函数上被阻止(但我想

所有 TI RTOS 均处于已阻止状态)。 我使用了以下 TI RTSC 库:

EDMA3 2.12.2.
IPC 3.44.0.00
NDK 2.25.0..9.
SYSBIOS 6.46.1.38
PDK 2.0.4
XCDTools 3.32.0.06
CCS TI v8.1.0 (CCS 6.1.3.00034)


ISR 代码如下:

******** C 文件:********

#include

#include
#include
#include
#include
#include

//#define IRQ_SIMUL

typedef 结构体事件2gpio_s

  uint32_t GPIO;
  uint32_t eventID;
} event2gpio_t;


volatile int a = 0;

CSL_GpioHandle             hGpio =空;
const event2gpio_t myGpio2Event[]=

 { 0、CSL_GEM_PCIExpress_MSI_INTn_PLUS_2}、//请勿使用
 { 1、CSL_GEM_PCIExpress_MSI_INTn_plus_6}、//请勿使用
 { 2、CSL_GEM_GPINT2 }、
 { 3、CSL_GEM_GPINT3 }、
 { 4、CSL_GEM_GPINT4 }、
 { 5、CSL_GEM_GPINT5 }、
 { 6、CSL_GEM_GPINT6 }、
 { 7、CSL_GEM_GPINT7 }、
 { 8、CSL_GEM_GPINT8 }、
 { 9、CSL_GEM_GPINT9 }、
 {10、CSL_GEM_GPINT10}、
 {11、CSL_GEM_GPINT11}、
 {12、CSL_GEM_GPINT12}、
 {13、CSL_GEM_GPINT13}、
 {14、CSL_GEM_GPINT14}、
 {15、CSL_GEM_GPINT15}
};

静态空 GPIO02InterruptHandler (空*arg)

  /*清除事件 ID。 *
  CSL_intcEventClear ((CSL_IntcEventId)参数);
  A++;


CSL_IntcContext            intcContext;
CSL_IntcEventHandlerRecord 倍行器[30];
CSL_IntcObj                intcObj;
CSL_IntcHandle             hTest;
CSL_IntcGlobalEnableState  ;
CSL_IntcEventHandlerRecord EventRecord;
CSL_IntcParam              vectId;

// GPIO IRQ 设计库: e2e.ti.com/.../374048
/*********
**                     全球职能                                      **
秘书长的报告 /
void mainFPGA (UARg arg0、UARg arg1)

  int                        bankNum = 0;
#ifdef IRQ_Simul
  int                        cnt = 1000;
  int                        pinNum = FPGA_GPIOIRQ;
其他
  int                        pinNum = 15;
#endif
  Int                        alocal = 0;

  DBG_printf ("开始%s TASKNAME \"%s"、
             __func__,FPGATASKNAME/C*Task_handle_name (Task_sele())*/;

  A = 0;
  BankNum = 0;//在 Core0中触发 pinNum

  IF (pinNum > SIZEOF (myGpio2Event))
  {
     DBG_printf ("错误:pinNum=%d 过大"、pinNum);

     返回;
  }
  否则、如果(pinNum < 2)
  {
     DBG_printf ("错误:pinNum=%d 太小"、pinNum);

     返回;
  }

  /********
   ******* INTC 配置*******
   秘书长的报告 /

  // INTC 模块初始化
  intcContext.eventhandlerRecord = eventhandler;
  intcContext.numEvtEntry     = 10;
  if (CSL_intcInit (&intcContext)!= CSL_Sok)
  {
     DBG_printf ("错误:gem-intc 初始化失败");

     返回;
  }

  //启用 NMI
  if (CSL_intcGlobalNmiEnable()!= CSL_SOK)
  {
     DBG_printf ("错误:gem - INTC 全局 NMI 启用失败");

     返回;
  }

  /*启用全局中断*/
  if (CSL_intcGlobalEnable (&state)!= CSL_SOK)
  {
     DBG_printf ("错误:gem - intc 全局启用失败");

     返回;
  }

  vectId = CSL_INTC_VECTID_4;
  hTest = CSL_intcOpen (&intcObj、myGpio2Event[pinNum].eventID、&vectId、NULL);
  if (hTest == NULL)
  {
     DBG_printf ("错误:Gem - INTC 打开失败");

     返回;
  }

  DBG_printf ("调试:gem-intc INT%d EventID%d"、hTest->vectId、hTest->EventID);

  /*注册在事件发生时调用的回调处理程序。 *
  EventRecord.handler =&GPIO02InterruptHandler;
  EventRecord.arg    = hTest;
  if (CSL_intcPlugEventHandler (hTest、&EventRecord)!= CSL_Sok)
  {
     DBG_printf ("错误:Gem-INTC 插头事件处理程序失败");

     返回;
  }

  /*启用事件。 *
  if (CSL_intcHwControl (hTest、CSL_INTC_CMD_EVTENABLE、NULL)!= CSL_SOK)
  {
     DBG_printf ("错误:gem - INTC CSL_INTC_CMD_EVTENABLE 命令失败");

     返回;
  }

  DBG_printf ("调试:Gem - INTC 配置已完成");

  //打开 CSL GPIO 模块0
  hGpio = CSL_GPIO_open (0);
#ifdef IRQ_Simul
  //将 GPIO 引脚编号 pinNum 设置为输出引脚
  CSL_GPIO_setPinDirOutput (hGpio、pinNum);
#endif
#ifdef 上升
#ifdef IRQ_Simul
  CSL_GPIO_clearOutputData (hGpio、pinNum);  //FPGA_GPIOIRQ=0
#endif
  //将 GPIO 引脚引脚数上的中断检测设置为上升沿
  CSL_GPIO_setRisingEdgeDetect (hGpio、pinNum);
其他
#ifdef IRQ_Simul
  CSL_GPIO_setOutputData (hGpio、pinNum);    //FPGA_GPIOIRQ=1
#endif
  //将 GPIO 引脚引脚数上的中断检测设置为上升沿
  CSL_GPIO_setFallingEdgeDetect (hGpio、pinNum);
#endif
  //将 GPIO 引脚编号 pinNum 设置为输入引脚
  CSL_GPIO_setPinDirInput (hGpio、pinNum);//将 FPGA_GPIOIRQ 设置为输入

  //为组0启用每组 GPIO 中断
  CSL_GPIO_bankInterruptEnable (hGpio、bankNum);

  DBG_printf ("调试:Gem - INTC IRQ 等待");
  操作
  {
#ifdef IRQ_Simul
     Clock0ISR (//*(UARg)*/FPGATASKNAME);
     如果((cnt---)==0)
     {
        CNT = 100;
        CSL_GPIO_setPinDirOutput (hGpio、pinNum);
#ifdef 上升
        //切换 FPGA_GPIOIRQ 引脚以触发 GPIO 中断
        CSL_GPIO_clearOutputData (hGpio、pinNum);  //FPGA_GPIOIRQ=0
        CSL_GPIO_setOutputData (hGpio、pinNum);    //FPGA_GPIOIRQ=1
其他
        //切换 FPGA_GPIOIRQ 引脚以触发 GPIO 中断
        CSL_GPIO_setOutputData (hGpio、pinNum);    //FPGA_GPIOIRQ=1
        CSL_GPIO_clearOutputData (hGpio、pinNum);  //FPGA_GPIOIRQ=0
#endif
     }
     其他
     {
        CSL_GPIO_setPinDirInput (hGpio、pinNum);//将 FPGA_GPIOIRQ 设置为输入
        //为组0启用每组 GPIO 中断

    //   Task_sleep (10);//如果取消注释此行,此任务也将保持被阻止状态

     }
其他

   // Task_sleep (10);//如果取消注释此行,此任务也将保持被阻止状态

#endif

     如果(a!=手动变焦)//等待进入 ISR
     {
#ifdef IRQ_Simul
        CSL_GPIO_setPinDirOutput (hGpio、pinNum);
#ifdef 上升
        CSL_GPIO_clearOutputData (hGpio、pinNum);  //FPGA_GPIOIRQ=0
其他
        CSL_GPIO_setOutputData (hGpio、pinNum);    //FPGA_GPIOIRQ=1
#endif
#endif
        DBG_printf ("GPIO 中断发生 a =%d"、a);
        手动变焦= A;
     }
  } while (global_var->exit_flag == false );


  CSL_intcClose (&intcObj);
  DBG_printf ("退出%s"、__func__);

  Task_exit();

  返回;

******** CFG 文件:********



VAR 内存             = xdc.useModule('xdc.runtime.Memory');
VAR BIOS               = xdc.useModule('ti.sysbios.BIOS');
VAR 任务               = xdc.useModule('ti.sysbios.knl.Task');
var ti_ndk_config_emac = xdc.useModule('ti.ndk.config.Emac');
VAR ICMP               = xdc.useModule('ti.ndk.config.Icmp');
VAR Swi                = xdc.useModule('ti.sysbios.knl.Swi');
VAR 计时器                = xdc.useModule('ti.sysbios.hal.Timer');

VAR SwTimerPrms          =新的 Timer.Params();
SwTimerPrms.startMode    = Timer.StartMode_Auto;
SwTimerPrms.period       = 100000;       // 1000000 uSecs = 100ms
SwTimerPrms.instance.name ="SWTimer";
VAR SwTimer              = Timer.create (空、'&swthTimerHandler'、SwTimerPrms);
Task.common$.namedInstance    = true;

VAR 时钟       = xdc.useModule('ti.sysbios.knl.Clock');
clock.tickPeriod = 750;
VAR Sem         = xdc.useModule('ti.sysbios.knl.Semaphore');
VAR 诊断          = xdc.useModule('xdc.runtime.Diags');

var devType        ="c6657";

VAR_l = XDC.loadPackage ('ti.CSL');
Csl.Settings.deviceType     = devType;
Csl.Settings.useCSLIntcLib  = true;

/*加载 OSAL 封装*/
var osType         ="tirtos"
VAR OSAL           = xdc.useModule('ti.osal.Settings');
OSAL.osType        = osType;
OSAL.socType       = devType;

VAR Qmss              = xdc.loadPackage ('ti.drv.qms');
VAR EMAC              = XDC.loadPackage ('ti.drv.emac');
emac.Settings.socType = devType;
VAR Nimu              = XDC.loadPackage ('ti.transport.NDK.Nimu');
Nimu.Settings.socType = devType;

VAR LoggerBuf      = xdc.useModule('xdc.runtime.LoggerBuf');
VAR EXC            = xdc.useModule('ti.sysbios.family.c64p.Exception');
Exc.common$.logger = LoggerBuf.create();
EXC.enablePrint    = true;

VAR Global   = xdc.useModule('ti.ndk.config.Global');
global.enableCodeGeneration = false;
VAR Cache      =  xdc.useModule('ti.sysbios.family.c66.Cache');

VAR 启动      = xdc.useModule('xdc.runtime.Startup');
VAR 系统       = xdc.useModule('xdc.runtime.System');
VAR 设置     = xdc.useModule('ti.sysbios.posix.Settings');
settings.supportsMutexPriority = true;

VAR HeapMem              = xdc.useModule('ti.sysbios.heaps.HeapMem');
var heapMemParams        = new HeapMem.Params();
heapMemParams.size       = 0x3D000;
heapMemParams.sectionName ="systemHeap (系统堆)";
program.global.heap0     = HeapMem.create (heapMemParams);

Memory.defaultHeapInstance    = Program.global.heap0;
Program.sectMap["sharedL2"]   ="MSMCSRAM";
Program.sectMap["systemHeap"] ="MSMCSRAM";
Program.sectMap[".sysmem"]    ="MSMCSRAM";
Program.sectMap[".args"]      ="MSMCSRAM";
Program.sectMap[".cio"]       ="MSMCSRAM";
Program.sectMap[".rodata"]    ="MSMCSRAM";
Program.sectMap[".neardata"]  ="MSMCSRAM";
Program.sectMap[".cppi"]      ="MSMCSRAM";
Program.sectMap[".init_array"]="MSMCSRAM";
Program.sectMap[".qmss"]      ="MSMCSRAM";
Program.sectMap[".cinit"]     ="MSMCSRAM";
Program.sectMap[".bss"]       ="MSMCSRAM";
Program.sectMap[".const"]     ="MSMCSRAM";
Program.sectMap[".text"]      ="MSMCSRAM";
Program.sectMap[".code"]      ="MSMCSRAM";
Program.sectMap[".switch"]    ="MSMCSRAM";
Program.sectMap[".data"]      ="MSMCSRAM";
Program.sectMap[".vecs"]      ="MSMCSRAM";
Program.sectMap["emacComm"]   ="L2SRAM";
Program.sectMap[".far:taskStackSection"]="L2SRAM";
Program.sectMap[".stack"]     = "L2SRAM";
Program.sectMap["platform_lib"]        ="L2SRAM";
Program.sectMap[".fardata:benchmarking"]="DDR3";
Program.sectMap[".dstBufSec"]="L2SRAM";
Program.sectMap[".testData"]="L2SRAM";
Program.sectMap[".srioSharedMem"]="MSMCSRAM";

SysStd             = xdc.useModule('xdc.runtime.SysStd');
System.SupportProxy = SysStd;

startup.lastFxns.$add ('&EVM_init');

BIOS.taskEnabled        =  true;

var drv     = xdc.loadPackage ("ti.sdo.EDMA3.drv");
var rm      = XDC.loadPackage ("ti.sdo.EDMA3.rm");
VAR 事件   = xdc.useModule('ti.sysbios.knl.Event');
VAR 空闲    = xdc.useModule('ti.sysbios.knl.Idle');
VAR CpIntc  = xdc.useModule('ti.sysbios.family.c66.tci66xx.CpIntc');
VAR ECM     = xdc.useModule ("ti.sysbios.family.c64p.EventCombiner");
VAR HWI     = xdc.useModule('ti.sysbios.family.c64p.Hwi');
var halCache = xdc.useModule('ti.sysbios.hal.Cache');

ECM.eventGroupHwiNum[0]= 7;
ECM.eventGroupHwiNum[1]= 8;

VAR Utils = XDC.loadPackage ('ti.utils.profiling');
VAR PCIe   = XDC.loadPackage ('ti.drv.PCIe');
PCIe.Settings.enableProfiling = true;

BIOS.smpEnabled = true;

clock.timerId =-1;
Clock.swiPriority = 15;
global.ipv6 = false;

环境['xdc.cfg.check.fatal']='fals';
VAR HeapBuf = xdc.useModule('ti.sysbios.heaps.HeapBuf');
VAR 日志    = xdc.useModule('xdc.runtime.Log');
VAR Cppi = XDC.loadPackage ('ti.drv.cppi');
VAR IPC         = xdc.useModule('ti.sdo.ipc.Ipc');
VAR SharedRegion = xdc.useModule('ti.sdo.ipc.SharedRegion');
SharedRegion.translate = false;
var memmap = Program.cpu.memyMap;

Program.sectMap[".my_sect_iram"]  ="L2SRAM";
Program.sectMap[".my_sect_ddr"]   ="L2SRAM";




/* ===== gpio_test.cfg =========== /
Task.deleteTerminatedTasks = false;
BIOS.swiEnabled = true;
Program.sectMap[".csl_vect"]="L2SRAM";
VAR HeapBuf                    =  xdc.useModule('ti.sysbios.heaps.HeapBuf');
VAR 内核                       =  xdc.useModule('ti.sysbios.hal.Core');
VAR 板= XDC.loadPackage ('ti.board');
board.Settings.boardName ="evmC6657";
VAR GPIO = XDC.loadPackage ('ti.drv.GPIO');
GPIO.Settings.socType = devType;
VAR UART = xdc.useModule('ti.drv.uart.Settings');
UART.socType = devType;
Task.checkStackFlag            = false;
var memmap                     = Program.cpu.memyMap;







*********** 控制台:*******

DigitalProc testBench 软件 ver 0.0.1 Build 46 CPU 频率1000 MHz DSP 的核心2个
DSP 硬件版本0 DSP 名称"TMS320C6657"板名称"TMDXEVM6657L"
MAC0:00:18:30:0A:22:88
00:00:00:00:07 PciExMain.c@2223:   启动 PciExMain TASKNAME "PciExTask"
00:00:00:00:00:00 PciExMain.c@2258:   版本号:0x02020007;字符串 PCIe LLD 修订版本:02.02.00.07:2016年12月13日:16:29:29
00:00:00:00:00 FPGAInterrupt.c@209:   启动 mainFPGA TASKNAME "FpgaTask"
00:00:00:00:00:00 FPGAInterrupt.c@280:   调试:Gem - INTC INT4 EventID89
00:00:00:00:00:00 FPGAInterrupt.c@300:   调试:完成 GBIM-INTC 配置
00:00:00:00:00:00 FPGAInterrupt.c@327:   调试:Gem - INTC IRQ 等待
00:00:00:00:00:00 FPGAInterrupt.c@370:   发生 GPIO 中断 A = 3
00:00:00:00:00:00 FPGAInterrupt.c@370:   发生 GPIO 中断 A = 5
00:00:00:00:00:00 FPGAInterrupt.c@370:   发生 GPIO 中断 A = 6
00:00:00:00:00:00 FPGAInterrupt.c@370:   发生 GPIO 中断 A = 12
00:00:00:00:00:00 FPGAInterrupt.c@370:   发生 GPIO 中断 A = 14
00:00:00:00:00:00 FPGAInterrupt.c@370:   发生 GPIO 中断 A = 18
00:00:00:00:00:00 FPGAInterrupt.c@370:   发生 GPIO 中断 A = 21
00:00:00:00:00:00 FPGAInterrupt.c@370:   发生 GPIO 中断 A = 22
00:00:00:00:00:00 FPGAInterrupt.c@370:   发生 GPIO 中断 A = 23

我假设 HWI CSL_INTC_VECTID_4已在 TI RTOS 中用作计时器计划

(或其他一些使用),当我使用此 vectID 时,RTOS 将保持被阻止。

如果我无法使用此 vectID、我可以使用哪一个?

我的错在哪里? 或者我错过了什么?

此致

Dario

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

    我已将此任务配置为优先级为7且堆栈大小为0x1000。


    今天上午、我尝试使用 CSL_INTC_VECTID_4在 cfg 文件中配置 HWI 中断
    vectID 和配置失败(显然、我认为这个 vectID 保留在 ti-RTOS 中)。


    此致
    Dario

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

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

    RTOS 团队已收到通知。 反馈将发布在此处。

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

    您好!

      今天我已经解决了这个问题。

    ********* C 代码"

    /* CSL RL 包括*/
    #include

    #include
    #include
    #include
    #include
    #include

    /* XDCtools 头文件*/
    #include

    /* BIOS 头文件*/
    #include
    #include

    /* TI-RTOS 头文件*/
    #include
    #include
    #include


    //#define IRQ_SIMUL

    volatile int a = 0;


    CSL_GpioHandle             hGpio =空;

    静态空 GPIO02InterruptHandler (UARg 参数)

      Hwi_Params * hwiParams =(Hwi_Params *) arg;

      CSL_intcEventClear ((CSL_IntcEventId)(hwiParams->arg);
      A++;



    int gpioISRConfig (int pinNum)

      CSL_IntcGlobalEnableState ;
      int                       bankNum = 0、ret = 0;
    #ifdef IRQ_Simul
      int                       cnt = 1000;
    #endif
      GPIO_V0_HwAttrs           GPIO_cfg;
      uint32_t                  EventID;
      Hwi_Params                HwiParams;
      Hwi_handle                myHwi;
      ERROR_Block               EB;
      uint32_t                  numPins、numPorts;

      A = 0;
      BankNum = 0;//在 Core0中触发 pinNum

      GPIO_socGetNumPinsPorts (&numPins、&numPorts);
      如果(pinNum > numpins)
      {
         DBG_printf ("错误:pinNum=%d 过大"、pinNum);

         return -11;
      }
      否则、如果(pinNum < 2)
      {
         DBG_printf ("错误:pinNum=%d 太小"、pinNum);

         返回-12;
      }

      if (GPIO_socGetInitCfg (0/*GPIO_LED0_PORT_NUM*/、&GPIO_cfg)==1)
      {
         DBG_printf ("错误:gem - intc 获取 GPIO cfg 失败");

         返回-13;
      }

      EventID = gpio_cfg.intCfg[pinNum].eventId;

      //将错误块和 hwiParams 初始化为默认值
      ERROR_INIT (&EB);
      Hwi_Params_init (hwiParams);
      hwiParams.arg       =(UArg)(&hwiParams);
      hwiParams.enableInt = true;
      hwiParams.EventID   = EventID;// 89;
    // hwiParams.priority  =???
    // hwiParams.maskSetting = Hwi_MaskingOption_self;

      myHwi = Hwi_create (5、GPIO02InterruptHandler、&hwiParams、&EB);
      if (myHwi ==空)
      {
         DBG_printf ("错误:Hwi 创建失败");

         返回-15;
      }

      DBG_printf ("调试:Gem - INTC 配置已完成");

      //打开 CSL GPIO 模块0
      hGpio = CSL_GPIO_open (0);
    #ifdef IRQ_Simul
      //将 GPIO 引脚编号 pinNum 设置为输出引脚
      CSL_GPIO_setPinDirOutput (hGpio、pinNum);
    #endif
    #ifdef 上升
    #ifdef IRQ_Simul
      CSL_GPIO_clearOutputData (hGpio、pinNum);  //FPGA_GPIOIRQ=0
    #endif
      //将 GPIO 引脚引脚数上的中断检测设置为上升沿
      CSL_GPIO_setRisingEdgeDetect (hGpio、pinNum);
    其他
    #ifdef IRQ_Simul
      CSL_GPIO_setOutputData (hGpio、pinNum);    //FPGA_GPIOIRQ=1
    #endif
      //将 GPIO 引脚引脚数上的中断检测设置为上升沿
      CSL_GPIO_setFallingEdgeDetect (hGpio、pinNum);
    #endif
      //将 GPIO 引脚编号 pinNum 设置为输入引脚
      CSL_GPIO_setPinDirInput (hGpio、pinNum);//将 FPGA_GPIOIRQ 设置为输入

      //为组0启用每组 GPIO 中断
      CSL_GPIO_bankInterruptEnable (hGpio、bankNum);

      DBG_printf ("调试:Gem - INTC IRQ 等待");

      回程;




    void mainFPGA (UARg arg0、UARg arg1)

      Int   alocal = 0;
    #ifdef IRQ_Simul
      int   pinNum = FPGA_GPIOIRQ;
    其他
      int   pinNum = 15;
    #endif

      DBG_printf ("开始%s TASKNAME \"%s"、
                  __func__,FPGATASKNAME/C*Task_handle_name (Task_sele())*/;

      if (gpioISRConfig (pinNum)>= 0)
      {
         操作
         {
    #ifdef IRQ_Simul
            如果((cnt---)==0)
            {
               CNT = 100;
               CSL_GPIO_setPinDirOutput (hGpio、pinNum);
    #ifdef 上升
               //切换 FPGA_GPIOIRQ 引脚以触发 GPIO 中断
               CSL_GPIO_clearOutputData (hGpio、pinNum);  //FPGA_GPIOIRQ=0
               CSL_GPIO_setOutputData (hGpio、pinNum);    //FPGA_GPIOIRQ=1
    其他
               //切换 FPGA_GPIOIRQ 引脚以触发 GPIO 中断
               CSL_GPIO_setOutputData (hGpio、pinNum);    //FPGA_GPIOIRQ=1
               CSL_GPIO_clearOutputData (hGpio、pinNum);  //FPGA_GPIOIRQ=0
    #endif
            }
            其他
            {
               CSL_GPIO_setPinDirInput (hGpio、pinNum);//将 FPGA_GPIOIRQ 设置为输入
               //为组0启用每组 GPIO 中断
           //   Task_sleep (10);
            }
    其他
            Task_sleep (1000);
    #endif
            如果(a!=手动变焦)//等待进入 ISR
            {
    #ifdef IRQ_Simul
               CSL_GPIO_setPinDirOutput (hGpio、pinNum);
    #ifdef 上升
               CSL_GPIO_clearOutputData (hGpio、pinNum);  //FPGA_GPIOIRQ=0
    其他
               CSL_GPIO_setOutputData (hGpio、pinNum);    //FPGA_GPIOIRQ=1
    #endif
    #endif
               DBG_printf ("GPIO 中断发生 a =%d"、a);
               手动变焦= A;
            }

         } while (global_var->exit_flag == false );
      }

      DBG_printf ("退出%s"、__func__);

      Task_exit();

      返回;


    (二 CFG 文件*******

    VAR 内存             = xdc.useModule('xdc.runtime.Memory');
    VAR BIOS               = xdc.useModule('ti.sysbios.BIOS');
    VAR 任务               = xdc.useModule('ti.sysbios.knl.Task');
    var ti_ndk_config_emac = xdc.useModule('ti.ndk.config.Emac');
    VAR ICMP               = xdc.useModule('ti.ndk.config.Icmp');
    VAR Swi                = xdc.useModule('ti.sysbios.knl.Swi');
    VAR 计时器              = xdc.useModule('ti.sysbios.timers.timer64.Timer');
    var ti_SysBIOS_hal_Timer = xdc.useModule('ti.sysbios.hal.Timer');
    VAR dev = xdc.useModule('ti.sysbios.io.DEV');
    VAR SwTimerPrms          =新的 Timer.Params();
    SwTimerPrms.startMode    = Timer.StartMode_Auto;
    SwTimerPrms.period       = 100000;       // 1000000 uSecs = 100ms
    SwTimerPrms.instance.name ="SWTimer";
    VAR SwTimer              = Timer.create (空、'&swthTimerHandler'、SwTimerPrms);
    Task.common$.namedInstance    = true;
    VAR 时钟       = xdc.useModule('ti.sysbios.knl.Clock');
    clock.tickPeriod = 750;
    Clock.swiPriority = 15;
    clock.timerId =-1;          //默认
    VAR Sem         = xdc.useModule('ti.sysbios.knl.Semaphore');

    VAR 诊断          = xdc.useModule('xdc.runtime.Diags');
    var devType        ="c6657";

    VAR_l = XDC.loadPackage ('ti.CSL');
    Csl.Settings.deviceType     = devType;
    Csl.Settings.useCSLIntcLib  = true;

    var osType         ="tirtos"
    VAR OSAL           = xdc.useModule('ti.osal.Settings');
    OSAL.osType        = osType;
    OSAL.socType       = devType;

    VAR Qmss              = xdc.loadPackage ('ti.drv.qms');
    VAR EMAC              = XDC.loadPackage ('ti.drv.emac');
    emac.Settings.socType = devType;
    VAR Nimu              = XDC.loadPackage ('ti.transport.NDK.Nimu');
    Nimu.Settings.socType = devType;

    VAR 默认值= xdc.useModule('xdc.runtime.Defaults');
    VAR LoggerBuf      = xdc.useModule('xdc.runtime.LoggerBuf');
    VAR EXC            = xdc.useModule('ti.sysbios.family.c64p.Exception');
    Exc.common$.logger = LoggerBuf.create();
    EXC.enablePrint    = true;//将异常详细信息打印到 CCS 控制台*/
    VAR Global   = xdc.useModule('ti.ndk.config.Global');
    global.enableCodeGeneration = false;
    VAR Cache      =  xdc.useModule('ti.sysbios.family.c66.Cache');
    VAR 启动      = xdc.useModule('xdc.runtime.Startup');
    VAR 系统       = xdc.useModule('xdc.runtime.System');
    VAR 设置     = xdc.useModule('ti.sysbios.posix.Settings');
    settings.supportsMutexPriority = true;


    VAR HeapMem              = xdc.useModule('ti.sysbios.heaps.HeapMem');
    var heapMemParams        = new HeapMem.Params();
    heapMemParams.size       = 0x3D000;
    heapMemParams.sectionName ="systemHeap (系统堆)";
    program.global.heap0     = HeapMem.create (heapMemParams);

    Memory.defaultHeapInstance    = Program.global.heap0;
    Program.sectMap["sharedL2"]   ="MSMCSRAM";
    Program.sectMap["systemHeap"] ="MSMCSRAM";
    Program.sectMap[".sysmem"]    ="MSMCSRAM";
    Program.sectMap[".args"]      ="MSMCSRAM";
    Program.sectMap[".cio"]       ="MSMCSRAM";
    Program.sectMap[".rodata"]    ="MSMCSRAM";
    Program.sectMap[".neardata"]  ="MSMCSRAM";
    Program.sectMap[".cppi"]      ="MSMCSRAM";
    Program.sectMap[".init_array"]="MSMCSRAM";
    Program.sectMap[".qmss"]      ="MSMCSRAM";
    Program.sectMap[".cinit"]     ="MSMCSRAM";
    Program.sectMap[".bss"]       ="MSMCSRAM";
    Program.sectMap[".const"]     ="MSMCSRAM";
    Program.sectMap[".text"]      ="MSMCSRAM";
    Program.sectMap[".code"]      ="MSMCSRAM";
    Program.sectMap[".switch"]    ="MSMCSRAM";
    Program.sectMap[".data"]      ="MSMCSRAM";
    Program.sectMap[".vecs"]      ="MSMCSRAM";
    Program.sectMap["emacComm"]   ="L2SRAM";
    Program.sectMap[".far:taskStackSection"]="L2SRAM";
    Program.sectMap[".stack"]     = "L2SRAM";
    Program.sectMap["platform_lib"]        ="L2SRAM";
    Program.sectMap[".fardata:benchmarking"]="DDR3";
    Program.sectMap[".dstBufSec"]="L2SRAM";
    Program.sectMap[".testData"]="L2SRAM";
    Program.sectMap[".srioSharedMem"]="MSMCSRAM";


    SysStd             = xdc.useModule('xdc.runtime.SysStd');
    System.SupportProxy = SysStd;
    startup.lastFxns.$add ('&EVM_init');

    BIOS.taskEnabled        =  true;

    var drv     = xdc.loadPackage ("ti.sdo.EDMA3.drv");
    var rm      = XDC.loadPackage ("ti.sdo.EDMA3.rm");
    VAR 事件   = xdc.useModule('ti.sysbios.knl.Event');
    VAR 空闲    = xdc.useModule('ti.sysbios.knl.Idle');
    VAR CpIntc  = xdc.useModule('ti.sysbios.family.c66.tci66xx.CpIntc');
    VAR ECM     = xdc.useModule ("ti.sysbios.family.c64p.EventCombiner");
    VAR HWI     = xdc.useModule('ti.sysbios.family.c64p.Hwi');
    var halCache = xdc.useModule('ti.sysbios.hal.Cache');

    ECM.eventGroupHwiNum[0]= 7;
    ECM.eventGroupHwiNum[1]= 8;

    VAR Utils = XDC.loadPackage ('ti.utils.profiling');
    VAR PCIe   = XDC.loadPackage ('ti.drv.PCIe');
    PCIe.Settings.enableProfiling = true;
    PCIe.Settings.socType = devType;

    BIOS.smpEnabled = true;
    global.ipv6 = false;


    环境['xdc.cfg.check.fatal']='fals';
    VAR HeapBuf = xdc.useModule('ti.sysbios.heaps.HeapBuf');
    VAR 日志    = xdc.useModule('xdc.runtime.Log');
    VAR Cppi = XDC.loadPackage ('ti.drv.cppi');
    VAR IPC         = xdc.useModule('ti.sdo.ipc.Ipc');
    VAR SharedRegion = xdc.useModule('ti.sdo.ipc.SharedRegion');
    SharedRegion.translate = false;
    var memmap = Program.cpu.memyMap;


    Program.sectMap[".my_sect_iram"]  ="L2SRAM";
    Program.sectMap[".my_sect_ddr"]   ="L2SRAM";



    ////////////////////////////////////////////// GPIO IRQ ////////////////////////////////////////////////////////
    Task.deleteTerminatedTasks = true;
    BIOS.swiEnabled = true;
    Program.sectMap[".csl_vect"]="L2SRAM";
    VAR HeapBuf                    =  xdc.useModule('ti.sysbios.heaps.HeapBuf');
    VAR 内核                       =  xdc.useModule('ti.sysbios.hal.Core');
    VAR 板= XDC.loadPackage ('ti.board');
    board.Settings.boardName ="evmC6657";
    VAR GPIO = XDC.loadPackage ('ti.drv.GPIO');   
    GPIO.Settings.socType = devType;
    var memmap                     = Program.cpu.memyMap;

    VAR HeapBuf                    =  xdc.useModule('ti.sysbios.heaps.HeapBuf');
    VAR 日志                        =  xdc.useModule('xdc.runtime.Log');
    VAR 异常= xdc.useModule('ti.sysbios.family.c64p.Exception');
    exception.enablePrint = true;

    /////////////////////////////////////////////////////// GPIO IRQ 结束//////////////////////////////////////////////////////////////////////


    BIOS.libType = BIOS.LibType_NonInstrumented;
    BIOS.sertsEnabled = false;
    BIOS.logsEnabled = false;
    clock.tickSource = Clock.tickSource_timer;

    秘书长的报告 串行控制台  

    DigitalProc testBench 软件 ver 0.0.1 Build 46 CPU 频率1000 MHz DSP 的核心2个
    DSP 硬件版本0 DSP 名称"TMS320C6657"板名称"TMDXEVM6657L"
    MAC0:00:18:30:0A:22:88
    00:00:00:00:07 PciExMain.c@2223:   启动 PciExMain TASKNAME "PciExTask"
    00:00:00:00:00:00 PciExMain.c@2258:   版本号:0x02020007;字符串 PCIe LLD 修订版本:02.02.00.07:2016年12月13日:16:29:29
    00:00:00:00:00 SrioMain.c@1241:   启动 SrioTask TASKNAME "SrioTask"
    00:00:00:00:00:00 SrioMain.c@1249:   在器件上执行 SRIO 单元测试
    00:00:00:00:00:00 SrioMain.c@1261:   调试(内核0):CPPI 和 QMSS 的系统初始化
    00:00:00:00:00:00 SrioMain.c@697:   调试(内核0):队列管理器和 CPPI 被初始化。
    00:00:00:00:00:00 SrioMain.c@698:   调试(内核0):主机区域0x866f80
    00:00:00:00:00:00 SrioMain.c@1289:   调试(内核0):SRIO 驱动程序已初始化
    00:00:00:00:00:00 QueueHandler.c@95:   0条消息当前位于/srioTask 队列中
    00:00:00:00:00:00 EthMain.c@281:   启动 EthTask TASKNAME "EthTask"
    网络已添加:if-1:192.168.0.8
    00:00:00:00:00模板测试 c@1598:   启动模板命令名称"PlatformTask"
    00:00:00:00:00:00 QueueHandler.c@95:   0消息当前位于/PlatformTask 队列中
    00:00:00:00:00 CLI.c@1284:   启动 ColiTask TASKNAME "ColiTask"
    写入"quit"或"exit"退出
    提示:>   
    未知命令("")
    要查看命令写入:"帮助"
    提示:>  
    00:00:00:00:00 CLI.c@1352:   启动 CliRecTask TASKNAME "ColiTask"
    00:00:00:00:00:00 QueueHandler.c@95:   0消息当前位于/ColiRecTask 队列中
    00:00:00:00:00 SwTimer.c@425:   启动 SwTmrTask TASKNAME "SwTmrTask"
    00:00:00:00:00 FPGAInterrupt.c@669:   启动 mainFPGA TASKNAME "FpgaTask"
    00:00:00:00:00:00 FPGAInterrupt.c@271:   调试:完成 GBIM-INTC 配置
    00:00:00:00:00:00 FPGAInterrupt.c@298:   调试:Gem - INTC IRQ 等待  
    未知命令("")
    要查看命令写入:"帮助"
    提示:>  
    00:00:03 00:00:03 FPGAInterrupt.c@710:   发生 GPIO 中断 A = 10
    00:00:04 00:00:01 FPGAInterrupt.c@710:   发生 GPIO 中断 A = 27

    未知命令("")
    要查看命令写入:"帮助"
    提示:>
    .


    *********** 登录 PC *******


    从192.168.0.8开始64字节:icmp_seq=13703 TTL=255 time=0.153ms
    从192.168.0.8开始64字节:icmp_seq=13704 TTL=255 time=0.153ms
    从192.168.0.8开始64字节:icmp_seq=13705 TTL=255 time=0.153ms
    从192.168.0.8开始64字节:icmp_seq=13706 TTL=255 time=0.144ms
    从192.168.0.8开始64字节:icmp_seq=13707 TTL=255 time=0.145ms
    从192.168.0.8开始64字节:icmp_seq=13708 TTL=255 time=0.153ms
    从192.168.0.8开始64字节:icmp_seq=13709 TTL=255 time=0.152ms
    (笑声)


    该解决方案不再使用 CSL_intcInit /CSL_intcGlobalNmiEnable /
    CSL_intcOpen /CSL_intcPlugEventHandler /CSL_intcHwControl 函数(INTC 模块)

    此致、

    Dario