6389|5

16

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

请问有用TMS570的MIBSPI的端口用作GIO的吗? [复制链接]

我做设计是IO不够用,所以用了MIBSOI当作普通的IO,有这么干的吗??出来分享一下

最新回复

噢,原来这样啊,解决了就好!  详情 回复 发表于 2013-1-7 10:40
 
点赞 关注

回复
举报

40

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
可以啊,用HALCoGen配。

把DIR勾选表示输出。
程序中这样写即可。
mibspiREG1->PCDSET  =  (1 << 2U);    /* 把第二个引脚输出设置为高 */
mibspiREG1->PCDCLR  =  (1 << 2U);    /* 把第二个引脚输出设置为低*/

读取的时候也可以直接读取SET和CLR寄存器。

Capture.PNG (6.42 KB, 下载次数: 1)

Capture.PNG

点评

请问你用的那个芯片啊? 我是用的是TMS570LS20216 假如我想操作SPI5SOMI【0】 应该如何配置? 方便的话留个QQ,请加我282042513  详情 回复 发表于 2012-12-29 13:57
 
 

回复

16

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发 renton 的帖子

请问你用的那个芯片啊?
我是用的是TMS570LS20216
假如我想操作SPI5SOMI【0】
应该如何配置?
方便的话留个QQ,请加我282042513
 
 
 

回复

40

帖子

0

TA的资源

一粒金砂(高级)

4
 
               的确把SPI用作GIO时候稍微有点复杂。
               这个我觉得是因为SPI的引脚类型比较多,比如SIMO[x],SOMI[x], ENA, SCS, CLK等等。
               不如NHET的引脚名称容易识别,NHET[00],NHET[01]…

               但是实现起来大同小异。
               我们需要清楚的是每个GIO引脚一般都需要如下寄存器位来实现对应的功能:
                    1. DIR 控制引脚输入输出方向(SPIPC1)
                    2. DIN 用来读取引脚输入值(SPIPC2)
                    3. DOUT用来设置引脚输出电平(SPIPC3)
                    4. DSET 用来实现单操作输出高”(SPIPC4)
                    5. DCLR用来实现单操作输出低”(SPIPC5)
                    6. PDR 用来控制引脚是否开漏输出(SPIPC6)
                    7. DIS 用来控制引脚是否有内部上拉或下拉电阻(SPIPC7)
                    8. PSEL 用来选择具体是上拉还是下拉(SPIPC8)

               这不仅针对SPI,NHET,所有能够做GIO的引脚,都需要这么多寄存器位来做控制。
               但是SPIGIO功能还需要一个特别的寄存器,那就是FUN寄存器(SPIPC0)
                    0. FUN 控制引脚是作为GIO使用还是作为SPI引脚使用的。

               这样,您就可以清楚知道为什么会有这么多寄存器来控制SPIGIO了。
               每个SPIPCx寄存器内部的结构也够类似。
               因为的芯片会有最多8SOMISIMOSCS引脚,所以这些引脚在寄存器中占有8bit,手册也提到,如果芯片没有那么多这种引脚,那么就从低位开始算起,高位无效。

               举个例子,如果把一个芯片的MibSPI1SOMI[3]这个引脚作为开漏输出,内部上拉,并输出高, 那么:
                    0. FUN (SPIPC0)寄存器的SOMIFUN.3应该为0
                    1. DIR (SPIPC1)SOMIFUN.3应该为1
                    2. DIN (SPIPC2)不用配置
                    3. DOUT(SPIPC3)SOMIFUN.3应该为1. (或者不配置这个寄存器而配置 DSET寄存器)
                    4. DSET  (SPIPC4)SOMIFUN.3应该为1. (建议用DSET来实现输出1的操作)
                    5. DCLR (SPIPC5)不用配置
                    6. PDR  (SPIPC6)SOMIFUN.3应该为1.
                    7. DIS  (SPIPC7)SOMIFUN.3应该为0.
                    8. PSEL  (SPIPC8)SOMIFUN.3应该为1.

               这些寄存器都是针对一组MibSPI的,每个SPI都会有这么多的寄存器来控制。
               
               最后还有需要注意的,就是PINMUX功能了,因为有些功能和其他功能复用了同一个引脚,这时,究竟这个引脚是哪个功能,就要通过PINMUX寄存器来决定。
               用户手册中有关于PINMUX的具体说明,请参考。


[ 本帖最后由 renton 于 2012-12-31 10:32 编辑 ]
 
 
 

回复

16

帖子

0

TA的资源

一粒金砂(中级)

5
 
感谢您的大力相助,我的问题已经解决了!
具体方法是:
在hacogen 要使能spi的驱动 并且对于TMS570LS20216
有一个缺陷,就是这个图形界面配置软件对于MIBSPI5缺少了SOMI【1-3】和SIMO【1-3】,要自己手动添加此部分代码 如下:
/* USER CODE BEGIN (2) */
void spiInit_add(void)
{
  /** - SPI5 Port output values */
     spiREG5->PCDOUT  |= (0 << 17) /* SIMO[1] */
                            | (0 << 18) /* SIMO[2] */
                            | (0 << 19) /* SIMO[3] */
                            | (0 << 25) /* SOMI[1] */
                            | (0 << 26) /* SOMI[2] */
                            | (0 << 27);/* SOMI[3] */
     /** - SPI5 Port direction */
     spiREG5->PCDIR   |= (1 << 17) /* SIMO[1] */
       | (1 << 18) /* SIMO[2] */
       | (1 << 19) /* SIMO[3] */
       | (1 << 25) /* SOMI[1] */
       | (1 << 26) /* SOMI[2] */
       | (1 << 27);/* SOMI[3] */

     /** - SPI5 Port open drain enable */
     spiREG5->PCPDR  |= (0 << 17) /* SIMO[1] */
       | (0 << 18) /* SIMO[2] */
       | (0 << 19) /* SIMO[3] */
       | (0 << 25) /* SOMI[1] */
       | (0 << 26) /* SOMI[2] */
       | (0 << 27);/* SOMI[3] */
     /** - SPI5 Port pullup / pulldown selection */
     spiREG5->PCPSL   |= (1 << 17) /* SIMO[1] */
       | (1 << 18) /* SIMO[2] */
       | (1 << 19) /* SIMO[3] */
       | (1 << 25) /* SOMI[1] */
       | (1 << 26) /* SOMI[2] */
       | (1 << 27);/* SOMI[3] */
     /** - SPI5 Port pullup / pulldown enable*/
     spiREG5->PCDIS  |= (0 << 17) /* SIMO[1] */
       | (0 << 18) /* SIMO[2] */
       | (0 << 19) /* SIMO[3] */
       | (0 << 25) /* SOMI[1] */
       | (0 << 26) /* SOMI[2] */
       | (0 << 27);/* SOMI[3] */
     /* SPI5 set all pins to functional */
     spiREG5->PCFUN  |=  (0 << 17) /* SIMO[1] */
                            | (0 << 18) /* SIMO[2] */
                            | (0 << 19) /* SIMO[3] */
                            | (0 << 25) /* SOMI[1] */
                            | (0 << 26) /* SOMI[2] */
                            | (0 << 27);/* SOMI[3] */
}
而且在主程序要初始化spi
spiInit_add();
其中spiREG5->GCR0 = 1U;非常重要,我自己尝试写寄存器的时候,少了这一句,一直无法运行,使用hacogen就不用担心了,初始化函数里面有了这一句代码

给某一个端口写1或写0
gioSetBit(spiPORT5, 11, 1);//SOMI[0]置1
gioSetBit(spiPORT5, 11, 0);//SOMI[0]清0
 
 
 

回复

40

帖子

0

TA的资源

一粒金砂(高级)

6
 
噢,原来这样啊,解决了就好!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表