8763|9

1万

帖子

25

TA的资源

裸片初长成(高级)

楼主
 

C2000的SPI发送8位数据,点滴经验 [复制链接]

C2000的SPI发送8位数据,手册上没有发现具体怎么做。

在用F28035时驱动串行的12864,用了SPI,经过好长时间的调试,怎么也没办法达到目的。而用模拟串口可以实现,说明程序的其它部分是正常的。问题就出在这“发送8位数据”上面。

 

最后总算摸索出来了,特分享给大家

 

 

第一,肯定要设置8位模式了。

 

第二:

 

SpiaRegs.SPITXBUF = data ;               //           错

 

SpiaRegs.SPITXBUF = data<<8 ;        //          正确!

最新回复

引用资深网友的发言: 高位先出,数够8位,后面就不发了。 为了提高发送效率,我都是将两个8位合并成一个16位,全部16位发送的。只要接收端不需要每8位给一个确认信号就可以这么做。 还有FIFO,最多可以放4个16位,可以不间断64位全部发出,然后才发出一个STE信号,这样,可以很方便的菊花链8块595,一口气扩展64个端口。如果每16位需要一个STE信号,可以设置一个延时,会自动每16位给一个STE信号。这样可以减少中断处理。 还有,发送中断是发送缓存为空时中断,这时移位寄存器中还有数据在发送中。所以发送中断时,不代表对方已经接收到数据。必须在接收中断中处理,接收中断了,才说明对方已经完整的接收到数据了。如果不需要对方回传数据,可以使用“三线模式”,自发自收,从而确认对方是否已经接收完数据。 这些说起来都是泪啊  详情 回复 发表于 2015-1-27 04:28
 
点赞 关注(2)

回复
举报

1万

帖子

25

TA的资源

裸片初长成(高级)

沙发
 
嗨!仅仅这个“左移8位”,把我搞得晕头转向,搞了好欠才想起来这样处理一下试,因为我总觉得SPI的设置是正确的。
 
 

回复

2606

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 
感谢 dontium 的分享,经验都是血的教训1
 
个人签名工程 = 数学+物理+经济
 
 

回复

33

帖子

0

TA的资源

一粒金砂(中级)

4
 
版主,我在调OLED12864,用模拟SPI可以,但用集成SPI怎么也不行,你楼顶说的我设置了,在频率低(低速时钟分频4->15Mhz)时,波特率设到最高才有点反应,但完全是乱码,我把低速时钟改成系统时钟(60Mhz)后,最高波特率也就是15Mhz,能大概看出我要输出的字符,但还中各种花屏,有快20个杂点,显示的东西也不完全对。这是怎么回事,难道频率越高越好?
 
 
 

回复

33

帖子

0

TA的资源

一粒金砂(中级)

5
 
我的芯片是28027
 
 
 

回复

33

帖子

0

TA的资源

一粒金砂(中级)

6
 
楼主,我的问题暂时解决了,是这样
  1. void LCD_WrCmd(unsigned char cmd)
  2. {
  3.         Uint16 get;
  4.         LCD_DC_L;
  5.         while(SpiaRegs.SPISTS.bit.BUFFULL_FLAG);
  6.         SpiaRegs.SPITXBUF=(cmd<<8);
  7.         while(SpiaRegs.SPISTS.bit.BUFFULL_FLAG);
  8.         get = SpiaRegs.SPIRXBUF;
  9. }
复制代码

在前后各加了一个while(SpiaRegs.SPISTS.bit.BUFFULL_FLAG);来判断,前后少哪个都不行,都只会显示两个点,但感觉这样也不是很对啊,要写这么麻烦么?目前我的情况是不这么写,就不正常

点评

无意中看到,因为这个主题已经不给我提示了。 SPI和UART是不一样的,后者讲的上波特率,而前者讲的是相伴及最高频率。 我在用同样TI的芯片作实验时,如ADS8332和C2000联接,如果严格按照手册上所说,没办法  详情 回复 发表于 2014-8-1 17:05
 
 
 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

7
 
liangzr 发表于 2014-7-29 22:11
楼主,我的问题暂时解决了,是这样

在前后各加了一个while(SpiaRegs.SPISTS.bit.BUFFULL_FLAG);来判断, ...

无意中看到,因为这个主题已经不给我提示了。

SPI和UART是不一样的,后者讲的上波特率,而前者讲的是相伴及最高频率。


我在用同样TI的芯片作实验时,如ADS8332和C2000联接,如果严格按照手册上所说,没办法成功通讯,后来我反复检查程序的其它设置没问题时,逐一试了相位,结果,不按手册中所说的倒是正确的。

点评

学习了,文档只是参考,还是要自己多试试  详情 回复 发表于 2014-8-2 16:15
 
 
 

回复

33

帖子

0

TA的资源

一粒金砂(中级)

8
 
dontium 发表于 2014-8-1 17:05
无意中看到,因为这个主题已经不给我提示了。

SPI和UART是不一样的,后者讲的上波特率,而前者讲的是 ...

学习了,文档只是参考,还是要自己多试试
 
 
 

回复

1080

帖子

2

TA的资源

五彩晶圆(中级)

9
 
引用资深网友的发言:

高位先出,数够8位,后面就不发了。

为了提高发送效率,我都是将两个8位合并成一个16位,全部16位发送的。只要接收端不需要每8位给一个确认信号就可以这么做。

还有FIFO,最多可以放4个16位,可以不间断64位全部发出,然后才发出一个STE信号,这样,可以很方便的菊花链8块595,一口气扩展64个端口。如果每16位需要一个STE信号,可以设置一个延时,会自动每16位给一个STE信号。这样可以减少中断处理。

还有,发送中断是发送缓存为空时中断,这时移位寄存器中还有数据在发送中。所以发送中断时,不代表对方已经接收到数据。必须在接收中断中处理,接收中断了,才说明对方已经完整的接收到数据了。如果不需要对方回传数据,可以使用“三线模式”,自发自收,从而确认对方是否已经接收完数据。

这些说起来都是泪啊

点评

“ 还有FIFO,最多可以放4个16位,可以不间断64位全部发出,然后才发出一个STE信号 ”, 我也关心过发送多位再置STE的问题,然而没有发现FIFO的空否控制它的,所以,虽然可以连续发4个16位再控制STE,但控制STE还  详情 回复 发表于 2015-1-27 23:05

赞赏

1

查看全部赞赏

 
 
 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

10
 
xuyiyi 发表于 2015-1-27 04:28
引用资深网友的发言:

高位先出,数够8位,后面就不发了。

为了提高发送效率,我都是将两个8位合并成一个16位,全部16位发送的。只要接收端不需要每8位给一个确认信号就可以这么做。

还有FIFO,最多可以放4个16位,可以不间断64位全部发出,然后才发出一个STE信号,这样,可以很方便的菊花链8块595,一口气扩展64个端口。如果每16位需要一个STE信号,可以设置一个延时,会自动每16位给一个STE信号。这样可以减少中断处理。

还有,发送中断是发送缓存为空时中断,这时移位寄存器中还有数据在发送中。所以发送中断时,不代表对方已经接收到数据。必须在接收中断中处理,接收中断了,才说明对方已经完整的接收到数据了。如果不需要对方回传数据,可以使用“三线模式”,自发自收,从而确认对方是否已经接收完数据。

这些说起来都是泪啊

还有FIFO,最多可以放4个16位,可以不间断64位全部发出,然后才发出一个STE信号 ”, 我也关心过发送多位再置STE的问题,然而没有发现FIFO的空否控制它的,所以,虽然可以连续发4个16位再控制STE,但控制STE还是需要检测发送完否或用发送完中断来控制,这样就不会成为写入就不用管了


 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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