想请教下,TMS570的引脚使用问题,我使用别的芯片的时候,CAN引脚呀,串口TX RX引脚呀,都是和IO口可以复用的,不用这些功能的时候,是可以做普通IO口使用的,了解TMS570一段时间了,不知道这款芯片是不是这样的,我发现IO口只有GPIOA和GPIOB。
Ken Wang:
dongyuan,
这个功能是支持的,你可以在我们的datasheet上面找到关于管脚的定义,那上面很清晰的描述了哪些管脚是专门做GPIO,哪些是只能做功能管脚,哪些是可以管脚复用,在功能管脚和GPIO上面切换。
谢谢
zhang dongyuan:
回复 Ken Wang:
可能是我的表述不明白,我重新确定下,我发现TMS570只有GIOA和GIOB两个通用输入/输出模块,是不是TMS570就这些IO口呢,比如TMS570BGA封装的B10、A10是CAN模块的CANRX 、CANTX引脚,这连个PIN脚是不是就做不了普通IO口来使用啊,是不是这个引脚功能就是固定的了!
Ken Wang:
回复 zhang dongyuan:
dongyuan,
答案是我们的芯片不止GIOA和GIOB两个只能做GPIO的模块。就拿你举的CAN模块来说,我们的CAN模块的发送和接收两个管脚就可以作为GPIO来使用,当然前提是你不把他们设置成CAN模块的工作模式。引脚的功能是软件可配的。
谢谢
Jason ZHANG (MCU FAE):
回复 Ken Wang:
Dongyuan,
TMS570中的GIOA和GIOB是两组特殊的GPIO引脚组,除了可以作为普通的GPIO使用外,还可以作为外部中断信号的输入引脚,来触发CPU中断;对于其它外设引脚,如CAN,是否可以作为GPIO需要去看对应datasheet上的定义,如下图,只要后面标示出可以作为GIO使用,即可被配置为GPIO引脚;一般来说只有很少的引脚无法被配置为GPIO,如ADC部分引脚。当需要将引脚配置为GPIO时,需要去配置对应外设的相关寄存器(具体请参考技术手册),也可以通过HALCoGen去配置。
谢谢!
zhang dongyuan:
回复 Jason ZHANG (MCU FAE):
谢谢您的耐心解答,我到现在就是在这里迷惑,因为新接触这款芯片,比如我项目当中不可能所有模块都是用到,比如CAN,我可能就不用,我想把CAN的引脚IO来模拟1WIRE总线或者是SPI总线,您这个2.3.2.5表,我使用CAN1RX来模拟1wire总线,我都不怎么设置IO口的置高、置低,虽然在HALCOGEN里可以配置为IO口模式,但是不知道他的数据寄存器命是啥,请问在哪里可以知道。gioSetPort(hetPORT1, gioGetPort(hetPORT1) ^ 0x00000001);比如这句是设置HET1的PIN1为高电平,那么我如何设置CAN1RX引脚,也就是B10为高电平呢!
zhang dongyuan:
回复 Ken Wang:
您好,实在是辛苦您了,我还是没搞懂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,是不是我的想法有问题,根本就不这么使用,请指点指点!
Ken Wang:
回复 zhang dongyuan:
Dongyuan,
这里有可能是我没有讲清楚,针对于我们芯片具有的类似于CAN SPI,I2C等具有功能复用的模块,他们可以通过设置相应的函数,让他工作在GPIO模式下面。但是这并不是说他们只能通过设置本身具有的函数来让他们工作在GPIO模式下。我们可以通过GPIO模块的相应函数:
void gioSetDirection(gioPort_t *port, uint32_dir) // Set the direction of GIO pins at run timevoid 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.
其他的模块也是类似的操作。
不知道这样解释你能不能接受,如果还有问题的话,我们可以继续商量讨论。
谢谢
user6260572:
回复 Jason ZHANG (MCU FAE):
您好,请问您这个参考技术手册在哪里?
Susan Yang:
回复 user6260572:
这个是比较老的帖子了。您可以将您的详细问题重新发新帖询问