TI论坛
直播中

魏双艳

7年用户 222经验值
私信 关注
[问答]

请问F28035 SCI通讯的奇偶校验位能否用代码指定?

看寄存器,似乎没有可以修改这个位的操作,现在要做个项目,和客户的MCU通讯,他们的协议中,用奇偶位为0来表示帧头,1表示数据。我觉得可以用地址位来代替奇偶位,但是28035的地址位操作看起来好麻烦,现在还没彻底理解整个操作过程。

回帖(7)

胡红枚

2018-9-10 09:57:26
你在看一下数据手册   应该是可以在寄存器中配置的
找了手册  里面是有奇偶校验和无校验的配置bit的
举报

胡红枚

2018-9-10 10:07:00
你在看一下数据手册   应该是可以在寄存器中配置的
找了手册  里面是有奇偶校验和无校验的配置bit的
举报

魏双艳

2018-9-10 10:15:21
引用: oiewjrj 发表于 2018-9-10 09:48
你在看一下数据手册   应该是可以在寄存器中配置的
找了手册  里面是有奇偶校验和无校验的配置bit的

不是要配置是否奇偶校验,是奇偶校验那个位能否手工设置,比如我设置了偶校验,然后发个数据0,本来奇偶位应该是0的,但是我能否改成1?这两天看了很多遍手册,感觉这个是没可能了。我想了个方案,开启校验功能,并设计一个数,令校验位刚好是0,发送一个数后,就关掉校验,这样“第9位”就是停止位,符合客户的协议。不过代码还没调通。
举报

魏双艳

2018-9-10 10:29:38
引用: 60user128 发表于 2018-9-10 09:56
不是要配置是否奇偶校验,是奇偶校验那个位能否手工设置,比如我设置了偶校验,然后发个数据0,本来奇偶位应该是0的,但是我能否改成1?这两天看了很多遍手册,感觉这个是没可能了。我想了个方案,开启校验功能,并设计一个数,令校验位刚好是0,发送一个数后,就关掉校验,这样“第9位”就是停止位,符合客户的协议。不过 ...

用我的方案可以应对客户的协议,只是原来忽略了一个问题,如下代码
SciaRegs.SCICCR.bit.PARITYENA = 1; //启用奇偶校验
SciaRegs.SCITXBUF = 0;                         //发送数据
while(SciaRegs.SCIFFTX.bit.TXFFST); //等待FIFO为空,因为是帧头,所以仅在FIFO放入一个数
SciaRegs.SCICCR.bit.PARITYENA = 0; //关闭奇偶校验
如果按照这个代码运行,实际发送出去的数据是不带奇偶校验的。因为FIFO为空不代表数据已经发出去,所以发送数据时,实际奇偶校验就已经关闭了
1 举报
  • li_g888: 这样是否可行?我也遇到大致的问题

更多回帖

发帖
×
20
完善资料,
赚取积分