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.

TMS320F28335 GPIO 输出问题

请教专家.:

3个GPIO 设置如下:

GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0;

GpioCtrlRegs.GPAMUX1.bit.GPIO8 = 0;

GpioCtrlRegs.GPAMUX1.bit.GPIO10 = 0;

GpioCtrlRegs.GPADIR.bit.GPIO7 = 1;

GpioCtrlRegs.GPADIR.bit.GPIO8 = 1;

GpioCtrlRegs.GPADIR.bit.GPIO10 = 1;

原来都是低电平. 如果这样:

GpioDataRegs.GPADAT.bit.GPIO10 = 1; 
GpioDataRegs.GPADAT.bit.GPIO7 = 1; 
GpioDataRegs.GPADAT.bit.GPIO8 = 1; 

GPIO10为高电平.另外两个还是低电平.
改成这样

GpioDataRegs.GPADAT.bit.GPIO10 = 1; 
GpioDataRegs.GPADAT.bit.GPIO7 = 1; 
DELAY_US(1);
GpioDataRegs.GPADAT.bit.GPIO8 = 1; 
DELAY_US(1);

都是高电平.电平反过来也一样.这是怎么回事呀.是芯片问题吗?

  • QIUPING,

    不要用GPADAT寄存器去输出高低电平,使用GPASET, GPACLEAR寄存器。

    具体原因是对GPADAT的操作时读-修改-写。下面的链接有详细解释。

    Q: Back-to-back DAT register writes do not work as expected

    http://processors.wiki.ti.com/index.php/General_Purpose_IO_(GPIO)_FAQ_for_C2000#Q:_Can_I_read_the_state_of_the_pin_.28DAT_register.29_even_if_the_MUX_is_configured_for_peripheral_usage.3F

    Eric

  • Eric

    按你说的修改了.我具体是TMS32F2812和F28335连接如下:.

    GPIO8 <->GPIOA1; GPIO10<->GPIOA2

    代码如下:

    F28335端

    GpioDataRegs.GPACLEAR.bit.GPIO8  = 1;

    GpioDataRegs.GPACLEAR.bit.GPIO10  = 1;

    ............................

    GpioDataRegs.GPASET.bit.GPIO8  = 1;

    GpioDataRegs.GPACLEAR.bit.GPIO10  = 1;

    F2812端:

    interrupt void MY_XINT2_ISR(void)


    {

        if  (GpioDataRegs.GPADAT.bit.GPIOA1 == 1)

       {

           GpioDataRegs.GPBSET.bit.GPIOB6 = 1; // TO F335_XINT3

          / / READ XINTF 0x0E1000

         GpioDataRegs.GPBCLEAR.bit.GPIOB6 = 1; // TO U1_XINT1
      }


      if  (GpioDataRegs.GPADAT.bit.GPIOA2 == 1)

     {

        XINTF_BUFF = 0;

     }

    }

    问题是有时可以,有时不行.开始仿真时可以,再次仿真就不行.不行时观察.GPADAT.bit.GPIOA1 和 .GPADAT.bit.GPIOA2 一直不会改变.F2812程序运行判断结果与观察相符.F28335的 GPIO8,和 GPIO10 输出电平的改变是由F2812端引发. 中断请求信号是由F28335发出.从F2812端程序运行情况看.F28335断程序运行正常.(采用写DAT寄存器的方法结果也一样).为什么会这样.是做法不对还是别的原因.请给予指教.谢谢


  • QIUPING,

    我觉得你先分开调试,先用F28335设置GPIO8,10的电平,然后观察GPIOB6的变化,再做下一步的测试。

    我认为主要是要小心GPIODAT的读修改写指令就可以了。

    Eric

  • 分开调试也是一样的.看来只能改变控制方式了.