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.

28335不靠谱?! 28335的GPIO的怪问题!

Other Parts Discussed in Thread: ADS1255
        5月份发现如下程序
        ---------------------------------------
        #define ad9_rest            GpioDataRegs.GPCDAT.bit.GPIO78
        ad9_rest=0;
        asm(" RPT #5 ||NOP");
        ad9_rest=1;
        asm(" RPT #5 ||NOP");
        ad9_rest=0;
        --------------------------------------

        ad9_rest=0; 对应的引脚连续运行却为高电平,但单步调试是对的!

        如果程序最后一句写两遍 即
        #define ad9_rest            GpioDataRegs.GPCDAT.bit.GPIO78
        ad9_rest=0;
        asm(" RPT #5 ||NOP");
        ad9_rest=1;
        asm(" RPT #5 ||NOP");
        ad9_rest=0;
        ad9_rest=0;
        也可以,ad9_rest对应的引脚被置低了,可以了。当时就这么做了。

        
        10月份又发现如下问题
        多处对a_2Y(GPIO2)置高的语句没反应!换成其他引脚也没反应! 单步调试有时是对的!
        其中一段程序如下:
        -----------------------------------------------
        #define a_1X          GpioDataRegs.GPADAT.bit.GPIO5
        #define a_2Y          GpioDataRegs.GPADAT.bit.GPIO2

        a_2Y = ads1255_OFF;
        a_1X = ads1255_OFF;
        -----------------------------------------------
        但这段程序5月份的时候没发现问题!

        将程序修改为如下后,a_2Y(GPIO2)有反应了!
        #define a_1X          GpioDataRegs.GPADAT.bit.GPIO5
        #define a_2Y          GpioDataRegs.GPADAT.bit.GPIO2

        a_2Y = ads1255_OFF;
        asm(" RPT #251 ||NOP");
        a_1X = ads1255_OFF;

        28335跑在60MHz,5月的时候开发环境是ccs5,当时发现ccs5的其他问题,改ccs6,10月份是ccs6。
  • 你的程序如下语句: 

    #define ad9_rest            GpioDataRegs.GPCDAT.bit.GPIO78
            ad9_rest=0;
            asm(" RPT #5 ||NOP");
            ad9_rest=1;
            asm(" RPT #5 ||NOP");
            ad9_rest=0;

    你这里的目的是通过改变ad9_rest的值来改变GPIO78的状态?GPIO78是输出引脚?

    如果是这样,这么做是实现不了上述目的,通常也不是这样实现的

     

     

  • 为什么实现不了呢? 虽然TI文档建议用GPxSET, GPxCLEAR, and GPxTOGGLE来实现IO输出设置,但按道理上面的程序中使用GPxDAT 也不应该会有这样的问题啊!

  • 问题不在于GPxDAT寄存器,而是宏定义语句,首先#define 通常是用来进行常量的定义,如#define  Pi  3.14

    其次宏定义#define  a   b,等同于a=b,是将b的值赋给a,b值得变化才引起a值得跟随变化。

    所以如果按你的方式定义也应该是#define  GPIO   变量

  • 好像这个宏定义没什么问题吧  

    问题是为什么那条GPIO语句重复一遍就没问题了呢?

  • 你通过单步应该可以看出赋值语句是否执行成功,你增加语句之间的NOP延时试试

  • 不建议直接写DAT寄存器来讲GPIO置高,置低,一般使用SET和Clear寄存器进行置位和复位。