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; 对应的引脚连续运行却为高电平,但单步调试是对的! 如果程序最后一句写两遍 即 a_2Y = ads1255_OFF; 将程序修改为如下后,a_2Y(GPIO2)有反应了! a_2Y = 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; 对应的引脚连续运行却为高电平,但单步调试是对的! 如果程序最后一句写两遍 即 a_2Y = ads1255_OFF; 将程序修改为如下后,a_2Y(GPIO2)有反应了! a_2Y = 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; 对应的引脚连续运行却为高电平,但单步调试是对的! 如果程序最后一句写两遍 即 a_2Y = ads1255_OFF; 将程序修改为如下后,a_2Y(GPIO2)有反应了! a_2Y = 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; 对应的引脚连续运行却为高电平,但单步调试是对的! 如果程序最后一句写两遍 即 a_2Y = ads1255_OFF; 将程序修改为如下后,a_2Y(GPIO2)有反应了! a_2Y = 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; 对应的引脚连续运行却为高电平,但单步调试是对的! 如果程序最后一句写两遍 即 a_2Y = ads1255_OFF; 将程序修改为如下后,a_2Y(GPIO2)有反应了! a_2Y = 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; 对应的引脚连续运行却为高电平,但单步调试是对的! 如果程序最后一句写两遍 即 a_2Y = ads1255_OFF; 将程序修改为如下后,a_2Y(GPIO2)有反应了! a_2Y = ads1255_OFF; 28335跑在60MHz,5月的时候开发环境是ccs5,当时发现ccs5的其他问题,改ccs6,10月份是ccs6。 |
囧:
不建议直接写DAT寄存器来讲GPIO置高,置低,一般使用SET和Clear寄存器进行置位和复位。