tarafans 发表于 2012-8-23 15:54:29

求助 困扰很长时间了

本帖最后由 tarafans 于 2012-8-23 15:56 编辑

我用的是28335 想用IO做普通IO 来点亮LED灯 我先配置IO 如下   
GpioCtrlRegs.GPAMUX1.bit.GPIO8 = 0; // GPIO8 = GPIO8
   GpioCtrlRegs.GPADIR.bit.GPIO8 = 1;
   GpioCtrlRegs.GPAMUX1.bit.GPIO9 = 0; // GPIO9 = GPIO9
   GpioCtrlRegs.GPADIR.bit.GPIO9 = 1;
   GpioCtrlRegs.GPAMUX1.bit.GPIO10 = 0; // GPIO10 = GPIO10
   GpioCtrlRegs.GPADIR.bit.GPIO10 = 1;
   GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 0; // GPIO11 = GPIO11
   GpioCtrlRegs.GPADIR.bit.GPIO11 = 1;
接着定义
#define          LED1        GpioDataRegs.GPADAT.bit.GPIO8
#define          LED2        GpioDataRegs.GPADAT.bit.GPIO9
#define          LED3        GpioDataRegs.GPADAT.bit.GPIO10
#define          LED4        GpioDataRegs.GPADAT.bit.GPIO11

我在MAIN里这样写 LED1=1;LED2=1;LED3=1;LED4=1; 结果LED1 和LED3点不亮LED2和LED4亮但是如果我这样写
      LED1=1;
   DELAY_US(10);
      LED2=1;
   DELAY_US(10);
      LED3=1;
   DELAY_US(10);
      LED4=1;
    DELAY_US(10); 就全部亮了 不知为什么希望大家帮忙

steaven2000 发表于 2012-8-27 23:06:18

仔细看看“System Control and Interrupt”这部分datashee。TI C2000 DSP的GPIO操作有个可以视为bug的问题,在使用DAT寄存器进行操作时,相邻的GPIO之间不能连续位操作,否则会导致操作无效。
如果你的代码中确实需要这样的操作,可以使用SET和CLEAR寄存器来做。

dhd_Specter 发表于 2012-9-6 13:25:32

{:smile:} 肯定全亮的 你只是让LED=1了,在下一个LED=1之前请先关掉掉两外三个
如:LED2 = 0; LED3 = 0; LED4 = 0; 然后打开LED1 =1;   每次操作都要弄下其他3个IO口就可以了!
页: [1]
查看完整版本: 求助 困扰很长时间了