xc2000同步串行口发送和接收数据错误

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
丸子头怎么了
Level 1
xc2000和sd卡建立ssc通讯(xc2000是主机,sd卡是从机),用Dave生成底层代码,其中指令函数里有一个主发从收的函数和一个从发主收的函数。 主发从收函数如下 void U1C1_SSC_vSendData(uword uwData) { while(!(U1C1_PSR & 0x2000)); // wait until tx buffer indication flag is set U1C1_PSCR |= 0x2000; // clear transmit buffer indication flag U1C1_TBUF00 = uwData; // load transmit buffer register } 从发主收函数类似,这里写不下了。 奇怪的是,如果单独使用一个指令函数,会陷入函数里的while跳不出来。我试了好几种方法,发现主机发送函数后必须写上主机接收函数,而且必须一一对应,比如发送一次接收两次就会陷入接收函数里的while死循环。主函数里有好几条发数的指令,我在每一个主发从收函数后面都写上从发主收函数,在示波表里看发送的数据没错,但最后主机接收到的数据不正常(本应该接收到0x01,但接收到的数据是0xff)。 疑问有二 1.为什么主发从收函数后面必须写上从发主收函数,出现了什么问题导致这种状况? 2.怎么让主机接收到的数据正常? 求大神指点,本人菜鸟小白,希望详细点
0 点赞
1 解答
hou
Level 4
Level 4
50 replies posted 25 replies posted 10 replies posted
应该是上一次的数据没发出去,下一次的又要发送,在发送后面加一个txbuffferfree试试。

在原帖中查看解决方案

0 点赞
20 回复数
丸子头怎么了
Level 1
补充 从发主收的函数如下: uword U1C1_SSC_uwGetData(void) { while(!((U1C1_PSR & 0x8000) || (U1C1_PSR & 0x4000))); U1C1_PSCR |= 0xC000; // clear alternate receive indication flag & receive indication flag return(U1C1_RBUF); // return receive buffer register }
0 点赞
凌风2018_版主_
Level 4
其实这个flag很不靠谱,我也测试过XC系列的USIC,可以试试直接读取传送值。
0 点赞
之前我也试过不判断标志位的情况,但发送的数据就不对了,比如程序上写的是发一条0xff,发一条0x01,但实际发送的可能是若干条0xff后接若干条0x01
0 点赞
凌风2018_版主_
Level 4
SSC其实就是SPI通讯,正常情况下只有一个master。SD我没做过,不过应该是单片机为主,SD为从。 你说的发送和接收应该是同步进行的,单片机每发送一个地址,SD卡就返回一个值。所以发送和接收是一一对应的,这是通讯时序决定的。你的问题中发送后面必须跟上接收,否则就会陷入循环?这个我觉得不应该。
0 点赞
凌风2018_版主_
Level 4
另外,我的意思是在你每次发送函数下面,直接读取接收的值,不要摆上你的从发主收函数。因为这个接收flag不好判断是哪次的。
0 点赞
凌风2018_版主_
Level 4
还有一点是,一般是根据时序判断几位的通讯,SD应该是16位的。如果你设置的每次发送都是8位,那就需要发送四次,然后读取SD的返回值。并不是说每次发送都必须接收一次,而且不存在一次发送多次接收的情况。如果通讯位数超过16位,请看一下手册,需要做其他配置。
0 点赞
小拜月
Level 4
Level 4
First like received 100 replies posted 50 replies posted
大神们。。。
0 点赞
青柠笑笑
Level 5
Level 5
100 replies posted 50 replies posted 25 replies posted
静静的看着
0 点赞
cyrus
Level 2
Level 2
收到的都是ff,有没有可能是时钟频率设置不对
0 点赞
hou
Level 4
Level 4
50 replies posted 25 replies posted 10 replies posted
应该是上一次的数据没发出去,下一次的又要发送,在发送后面加一个txbuffferfree试试。
0 点赞
丸子头怎么了
Level 1
完美
0 点赞
灵魂有香气的女子
Level 1
楼主,请问你解决了吗?我现在也在用这个芯片调SD卡,遇到了相同问题,可以交流一下吗?扣扣邮箱和扣扣都可以。
0 点赞
ZERO_GO
Level 6
Level 6
5 sign-ins Welcome!
还是要看看FLAG
0 点赞
ZERO_GO
Level 6
Level 6
5 sign-ins Welcome!
学习一下
0 点赞
阳东
Level 5
Level 5
10 comments on blog 5 comments on blog First comment on blog
学习一下
0 点赞
liliWinner
Level 6
Level 6
500 replies posted 250 replies posted 100 replies posted
搞定了吗
0 点赞
电车人
Level 3
Level 3
50 replies posted 25 replies posted 10 replies posted
学习一下
0 点赞
JCET-GAO
Level 3
Level 3
Distributor - Jingchuan(GC)
100 comments on blog 50 comments on blog 25 comments on blog
学习一下
0 点赞
User22064
Level 5
Level 5
10 sign-ins First like given 5 sign-ins
学习了
0 点赞
User22064
Level 5
Level 5
10 sign-ins First like given 5 sign-ins
学习了
0 点赞