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

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

        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。

Joey Mao:

你的程序如下语句: 

#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是输出引脚?

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

 

 

        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。

Zhengwu Xia:

回复 Joey Mao:

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

        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。

Joey Mao:

回复 Zhengwu Xia:

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

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

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

        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。

Zhengwu Xia:

回复 Joey Mao:

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

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

        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。

Joey Mao:

回复 Zhengwu Xia:

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

        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。

囧:

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

赞(0)
未经允许不得转载:TI中文支持网 » 28335不靠谱?! 28335的GPIO的怪问题!
分享到: 更多 (0)