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.

关于TMS570的IO口问题,请教!

Other Parts Discussed in Thread: HALCOGEN

想请教下,TMS570的引脚使用问题,我使用别的芯片的时候,CAN引脚呀,串口TX RX引脚呀,都是和IO口可以复用的,不用这些功能的时候,是可以做普通IO口使用的,了解TMS570一段时间了,不知道这款芯片是不是这样的,我发现IO口只有GPIOA和GPIOB。

  • dongyuan,

       这个功能是支持的,你可以在我们的datasheet上面找到关于管脚的定义,那上面很清晰的描述了哪些管脚是专门做GPIO,哪些是只能做功能管脚,哪些是可以管脚复用,在功能管脚和GPIO上面切换。

    谢谢

  • 可能是我的表述不明白,我重新确定下,我发现TMS570只有GIOA和GIOB两个通用输入/输出模块,是不是TMS570就这些IO口呢,比如TMS570BGA封装的B10、A10是CAN模块的CANRX 、CANTX引脚,这连个PIN脚是不是就做不了普通IO口来使用啊,是不是这个引脚功能就是固定的了!

  • dongyuan,

       答案是我们的芯片不止GIOA和GIOB两个只能做GPIO的模块。就拿你举的CAN模块来说,我们的CAN模块的发送和接收两个管脚就可以作为GPIO来使用,当然前提是你不把他们设置成CAN模块的工作模式。引脚的功能是软件可配的。

    谢谢

  • Dongyuan,

    TMS570中的GIOA和GIOB是两组特殊的GPIO引脚组,除了可以作为普通的GPIO使用外,还可以作为外部中断信号的输入引脚,来触发CPU中断;对于其它外设引脚,如CAN,是否可以作为GPIO需要去看对应datasheet上的定义,如下图,只要后面标示出可以作为GIO使用,即可被配置为GPIO引脚;一般来说只有很少的引脚无法被配置为GPIO,如ADC部分引脚。当需要将引脚配置为GPIO时,需要去配置对应外设的相关寄存器(具体请参考技术手册),也可以通过HALCoGen去配置。

    谢谢!

     

  • 谢谢您的耐心解答,我到现在就是在这里迷惑,因为新接触这款芯片,比如我项目当中不可能所有模块都是用到,比如CAN,我可能就不用,我想把CAN的引脚IO来模拟1WIRE总线或者是SPI总线,您这个2.3.2.5表,我使用CAN1RX来模拟1wire总线,我都不怎么设置IO口的置高、置低,虽然在HALCOGEN里可以配置为IO口模式,但是不知道他的数据寄存器命是啥,请问在哪里可以知道。gioSetPort(hetPORT1, gioGetPort(hetPORT1) ^ 0x00000001);比如这句是设置HET1的PIN1为高电平,那么我如何设置CAN1RX引脚,也就是B10为高电平呢!

  • dongyuan,

     对于怎么将CANRX和TX两个管脚用作GPIO,首先你需要在HALCOGEN里面设置他们工作在GPIO模式下面,然后在我们的CAN.c文件里面有关于操作这两个端口的函数。他们分别是canIoSetDirection()和canIoSetPort(),用来设置这两个端口工作在GPIO模式下的输入或输出方向,以及相应的端口值设置。

      你可以尝试使用这两个函数,来简单测试一下。

    谢谢

  • 您好,实在是辛苦您了,我还是没搞懂TMS570的GPIO的使用,也按照您提供的信息canIoSetDirection()和canIoSetPort()查询了,CAN这个引脚可以这么设置,那SPI引脚呢,4个引脚要怎么使用它的GPIO功能呢,不明白TMS570的CAN SPI I2C UART等都是默认功能吗?要使用GPIO功能必须单独模块内函数使用吗,比如canIoSetDirection()和canIoSetPort()。和其他的ARM很不一样,STM LPC的都是PA PB PC等GPIO口,像CAN I2C SPI都是功能复用口,如果我不用这些功能复用口的话,直接操作GPIO寄存器就可以操作32个IO等,比如GPIOA【0..31】。TMS570要操作31个IO,那不是要用很多很多函数,CAN才2个IO,SPI才4个IO,是不是我的想法有问题,根本就不这么使用,请指点指点!

  • Dongyuan,

       这里有可能是我没有讲清楚,针对于我们芯片具有的类似于CAN SPI,I2C等具有功能复用的模块,他们可以通过设置相应的函数,让他工作在GPIO模式下面。但是这并不是说他们只能通过设置本身具有的函数来让他们工作在GPIO模式下。我们可以通过GPIO模块的相应函数:

    void gioSetDirection(gioPort_t *port, uint32_dir)             // Set the direction of GIO pins at run time
    void gioSetBit(gioPort_t *port, uint32_t bit, uint32_t value) // Writes a value to the specified pin of given GIO port

    来设置所有的具有GPIO功能复用的模块。

    举个例子来说,如果你要设置MIBSPI工作在GPIO模式下,你可以这样设置:

    gioSetDirection(mibspiPORT1,0x01);                 // This will set the MIBSPI1_CS(0) as output

    gioSetBit(mibspiPORT1,0x01,1);// set the CS output 1.

    其他的模块也是类似的操作。

    不知道这样解释你能不能接受,如果还有问题的话,我们可以继续商量讨论。

    谢谢

  • 您好,请问您这个参考技术手册在哪里?

  • 这个是比较老的帖子了。您可以将您的详细问题重新发新帖询问