TI中文支持网
TI专业的中文技术问题搜集分享网站

关于输入输出引脚检测的一个奇怪的问题

HI RENTON:

          最近在用TMS470MF06607板子的时候遇到一个奇怪的问题,比如这样一段代码if(gioGetBit(gioPortA,5) == 1){…..}对一个IO口进行检测,此段代码在DEBUG下运行完全没有问题,但是在非DEBUG状态下,就是给板子重新上电之后,得到的检测结果为0,就不是1了,非常奇怪。请老师赐教。谢谢。

wei wei:

回复 Renton:

  谢谢,经过检查发现是IO口上拉配置的问题,但是还是奇怪为什么在DEBUG的时候就行,在重新上电的情况下就不行呢。

Renton:

回复 wei wei:

IO口上是浮动电平吗?

wei wei:

回复 Renton:

是一个霍尔传感器用的那个脚。

Renton:

回复 wei wei:

那霍尔传感器的输出是否是开漏的?

ml0943:

回复 Renton:

你好,我在测试GIO的时候,也遇到了这样的问题。程序实现的是在GIOB[1]  或GIOB[0]检测到高电平(3.3v)输入的时候,执行闪灯。

在DEBUG下正常,能够闪灯,但是在实际中 却没有闪灯。

Renton:

回复 ml0943:

Hi ml0943,

    你的意思是:

    这段代码在调试时全速运行,可以闪灯,但是拔掉调试器,重新上电运行,板子不会闪灯。

    是这个意思吗?

    如果是的话,可以尝试做以下实验:

    1. 在main函数的while(1)中做一个无条件的闪灯操作,然后下载到芯片中,非调试环境,看一下是否闪灯,

        如果正常,那么说明main函数运行正常,问题应该出在你的判断条件上。

        如果不正常,说明main函数没有正常运行,可能的问题是HALCoGen配置时,打开了安全相关功能,导致一些异常。(HALCoGen代码中默认的异常处理是死循环,也就是说main根本进不来…)

        这样的话,请使用我另一个帖子中提供的sys_startup.c来代替工程原有的sys_startup.c。

        http://www.deyisupport.com/question_answer/microcontrollers/hercules/f/70/p/21465/72655.aspx#72655

    2. hetPORT1->DSET |= (1<<PIN_HET_28);的写法不推荐。

        主要是因为这个"|="操作,这个操作被认为是有风险的操作(Read–> Modify–> Write)。

        对于DSET寄存器和DCLR寄存器,只需要写hetPORT1->DSET = (1<<PIN_HET_28);即可。

        详情请参考技术手册上的关于这个寄存器的说明。

ml0943:

回复 Renton:

你好,在while(1)中执行闪灯程序,在非调试模式下,闪灯正常。那就是判断条件的问题?

还有一个奇怪的现象是:单步调试中,GIOA[6]接收到高电平,开始闪灯。观察寄存器GIODINA的GIODIN6=1;但是在给GIOA[6]输入低电平后,在单步调试中按F10观察,程序一直在while(1)循环中,但是此时的寄存器GIODINA的GIODIN6=1,这就不明白是怎么回事了?

while(1)

{

uint32_t i=0; for(i=0;i<10;i++) { LED8_ON(); wait(200000); LED8_OFF(); } uint32_t j=0; for(j=0;j<20;j++) { LED28_ON(); wait(200000); LED28_OFF(); } }

Renton:

回复 ml0943:

Hi ml0943,

     确认引脚输入电平为低了吗?

    另,我看你用的是uVision吧,你是如何观察的寄存器值呢?这个环境是否可以自动刷新寄存器显示状态?

    

ml0943:

回复 Renton:

我用的是IAR,在view —>register里 观察的

赞(0)
未经允许不得转载:TI中文支持网 » 关于输入输出引脚检测的一个奇怪的问题
分享到: 更多 (0)