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.

EVMK2H GPIO8(Set dir as input) interrupt 不按预期触发的问题(调试两天了)

Other Parts Discussed in Thread: 66AK2H14, 66AK2E05

您好:

      在使用TI 官方的EVMK2H的开发板(VER4,66AK2H14),把GPIO8配置成输入,上升沿和下降沿都触发, 中断的周期不按预期触发。

      但是如果把GPIO8 配置成输出,然后在定时器周期中断服务函数中切换GPIO8的输出寄存器,这时GPIO8的中断周期按预期触发、

     实验步骤:

       1.关闭所有中断使能

     2.配置好GPIO8的输入输出,中断沿的设置,使能GPIO Z中断

      3.直接把82 GPIO_INT8 Local GPIO interrupt 映射到CPU INT4,

      4.配置TIMER 寄存器及相关中断,直接映射到CPU INT12. 

      5.使能所有的相关中断寄存器期.     

       6.1:如果把GPIO8 配置成输出,在Timer ISR 中切换GPIO8 的状态,GPIO ISR 触发周期正常。

         用示波器观察120Pin 接口的Pin78(SOC_GPIO_08),波形符合预期。

      6.2:如果把GPIO8 配置成输入,失效掉Timer ISR 中切换GPIO8的程序,原则上不应该有中断发生,

           GPIO8 没有外部输入源,下拉到地,用示波器观察120Pin 接口的Pin78(SOC_GPIO_08),没有波形,

           奇怪的是GPIO8 ISR 不停的在触发,也没有什么周期可言。

            也试过其他GPIO9/10,当配置成输入时,同样的情况发生。

     6.3:通过120 PIN Expending Header 外接GPIO8输入源(FPGA 产生中期信号),也是同样的情况发生。

              确定过GPIO8 的PIN没有搞错,在main函数中while(1){  readGPIO8 IN_DATA,set it to GPIO12(DBG RED LED),示波器显示波形和输入同步。

   7.实在是没办法了,就使用官方提供的K2_STK_DSP_v1.1/GPIO 的例子,使用的Combine Interrupt,我自己的直接把GPIO8映射到DSP INT4,把MCSDK 改成ProcesserSDK,只combine GPIO8 interrupt,去掉GPIO9/10/11/12 防止干扰分析问题,把x#define GPIO_LOOP_BACK_TEST 1 改成 #define GPIO_LOOP_BACK_TEST 0 把GPIO设为输入,情况也是一样。

    已经调试2 天了,实在想不到哪里出错,请大家帮帮忙,感谢!

    等会去公司上传代码。

硬件及软件版本如下:

DSP Core0 的裸机程序

EVMK2E VER 4 开发板

CCS7.3 + 8.1 Compiler

PROCESSER-SDK-RTOS-K2HK v4.01

  • 7.实在是没办法了,就使用官方提供的K2_STK_DSP_v1.1/GPIO 的例子,使用的Combine Interrupt,我自己的直接把GPIO8映射到DSP INT4,把MCSDK 改成ProcesserSDK,只combine GPIO8 interrupt,去掉GPIO9/10/11/12 防止干扰分析问题,把x#define GPIO_LOOP_BACK_TEST 1 改成 #define GPIO_LOOP_BACK_TEST 0 把GPIO设为输入,情况也是一样

    我自己的直接把GPIO8映射到DSP INT4 的意思是说我自己的程序,我并没有修改 官方 GPIO 例程的中断映射。请不要误会。

  • 什么都没改,换成EVMK2E 的开发板中断都没有问题,难道是EVMK2H板的硬件有问题?

    EVMK2E GPIO_8/9/10/11没有复用,EVMK2H的GPIO 8/9/10/11 复用其他接口.如果是这个原因吗?如果是,怎么使用GPIO_0--GPIO7的中断?

       

  • 使用CIC2即可解决问题。

  • 您好:

    由于使用EVMK2H的开发套件遇到GPIO_08--GPIO_15的中断有些问题不知道如何解决。

    EVMK2H的GPIO_08--GPIO_11 有第三功能,GPIO_12_GPIO_15 用在LED 上, 所有想试下GPIO_00-GPIO_07 之间的中断,

    但是在DSP CorePac 文档中没有找到相应的GPIO_00-GPIO_07 的中断向量,只找到GPIO_08 至GPIO_15的中断向量,

    如何在DSP Core 中使用GPIO_00-GPIO07 的中断呢?

    谢谢!

    Tiger

  • 使用CIC2 中的GPIO0即可解决此问题,还好项目中还留有预留GPIO,改下板就可以了。

    同样的代码,EVMK2E(66AK2E05) GPIO_08 中断就可以正常,

    而EVMK2H(66AK2H14,REV 4) GPIO_08  至GPIO_15的输入中断不正常,输出中断都正常,TI 的同事能帮忙确认一下吗

  • 使用CIC2 产生GPIO_INT8 映射到INTC 和直接映射GPIO_INT8 到INTC ,GPIO_INT8 中断出现相同的问题。

    附上波形:

  • 你在while循环里加点延时,上下降沿切换间隔时间长点,试试看是什么状态呢?

  • 前面的波形的周期是700us,现在的是50ms。

    ,

  • 系统里有没有在跑其他进程,是多任务还是只有这个GPIO程序?中断也是只有1个?按道理CIC延时不会这么明显的

  •  就是裸机程序,源程序见回复3.

    单任务,就几个中断(GPIO/Timer)+main函数 。

    上图蓝色波形是GPIO8的真实波形,把中配置成上升和下降都触发,在中断中不停的切换另外一个GPIO口(LED),见红色波形。

    其实在仔细观察波形,发现不知什么原因GPIO8的中断多执行了一次,没有看到gpio8的波形有变化,不知道为什么?

    更为奇怪的的是同样的CODE,在EVMK2E(66AK2E05)中完全没有问题,偏偏在EVMK2H(66AK2H14)中出现此问题。

    公司已经购买好几块EVMK2H作为控制板卡,测试板卡中FPGA 产生周期信号给DSP的GPIO,此后DSP 在处理中断事务。

    在EVMK2H中,使用另外的一个GPIO口,如GPIO0,使用CIC2的GPIO_INT0 产生中断源给DSP INTC, 波形正常

    使用GPIO8 (配置成输入)的中断,不管是把GPIO_INT8 直接映射到INTC 还是通过CIC2间接映射到INTC,波形不正常

    如果把GPIO8配置成输出,在TIMER 中断中不停地切换GPIO8的状态,波形也正常

    难道是ARM (Linux)那边出了触发的?没见到GPIO的电平的任何变化。

    Linux那边使用的是出厂的FileSystem。再说ARM也改变不了DSP的INTC控制器吧。

  • 你好, 

    EVMK2H开发板的上的GPIO的信号上有噪声,加了个27p电容在上面就好。

    谢谢。