TI中文支持网
TI专业的中文技术问题搜集分享网站

2812串口使用心得(主要是关于中断)

  2812串口的接收和发送都有16个字节深度的FIFO,这个FIFO可以启用或者关闭,接收和发送都有5位来指示FIFO现存的字节量。

  同时2812的串口还有通常串口常见的标志位,例如TXRDY和RXRDY等等。

  问题出现了,发现2812是这样的,当你开了串口的FIFO功能时候,TXRDY
和 RXRDY的标志位功能失效了,即,当接收到字符的时候(假如1个),开了FIFO功能,这个时候,RXRDY不指示满(此位不为1),而FIFO的TXFIFST会等于1;发送也一样道理。

  而当你关闭了串口FIFO的时候,接到字符,RXRDY就会置1了,但是TXFIFST没反应了。

  所以,根据以上,假如要用串口的话,用查询的方法,就要根据FIFO是否开启,来查询不同的标志位了(例如接收,开了的话查RXFIFST是否大于等于1,关了的话查RXRDY)!假如用中断的方法的话,就要注意在串口的寄存器里面开哪个中断了,假如开了FIFO,就要开FIFO中的匹配中断;假如关了的话就要开Tx INT ENA等中断位,当然,两边的中断都开也可以的。

 

看上面,FIFO打开了,接收FIFO里面有一个字节了,但是RXRDY不置位,此时,由于FIFO匹配中断没打开,中断服务程序也不会进入了。

接收的查询用:while(ScibRegs.SCIFFRX.bit.RXFIFST != 1) { }

发送的查询用:while (ScibRegs.SCIFFTX.bit.TXFFST != 0) { }

这里,FIFO关闭了,RXFIFST就不会增了,但是RXRDY置位了,同时,中断也进去了。

接收的查询用:while(ScibRegs.SCIRXST.bit.RXRDY !=1) { }

发送的查询用:while (ScibRegs.SCICTL2.bit.TXRDY != 1){ }

 

看上面,datasheet里面这个表也很清楚了,开FIFO和关FIFO,中断的标志位是不一样的。

 

这个笔记记在OneNote里面好久,这次正好拿来交流一下,呵呵~~~

Jones Chen:

谢谢分享,好像除了图片,其他字符都是乱码哎!

  2812串口的接收和发送都有16个字节深度的FIFO,这个FIFO可以启用或者关闭,接收和发送都有5位来指示FIFO现存的字节量。

  同时2812的串口还有通常串口常见的标志位,例如TXRDY和RXRDY等等。

  问题出现了,发现2812是这样的,当你开了串口的FIFO功能时候,TXRDY
和 RXRDY的标志位功能失效了,即,当接收到字符的时候(假如1个),开了FIFO功能,这个时候,RXRDY不指示满(此位不为1),而FIFO的TXFIFST会等于1;发送也一样道理。

  而当你关闭了串口FIFO的时候,接到字符,RXRDY就会置1了,但是TXFIFST没反应了。

  所以,根据以上,假如要用串口的话,用查询的方法,就要根据FIFO是否开启,来查询不同的标志位了(例如接收,开了的话查RXFIFST是否大于等于1,关了的话查RXRDY)!假如用中断的方法的话,就要注意在串口的寄存器里面开哪个中断了,假如开了FIFO,就要开FIFO中的匹配中断;假如关了的话就要开Tx INT ENA等中断位,当然,两边的中断都开也可以的。

 

看上面,FIFO打开了,接收FIFO里面有一个字节了,但是RXRDY不置位,此时,由于FIFO匹配中断没打开,中断服务程序也不会进入了。

接收的查询用:while(ScibRegs.SCIFFRX.bit.RXFIFST != 1) { }

发送的查询用:while (ScibRegs.SCIFFTX.bit.TXFFST != 0) { }

这里,FIFO关闭了,RXFIFST就不会增了,但是RXRDY置位了,同时,中断也进去了。

接收的查询用:while(ScibRegs.SCIRXST.bit.RXRDY !=1) { }

发送的查询用:while (ScibRegs.SCICTL2.bit.TXRDY != 1){ }

 

看上面,datasheet里面这个表也很清楚了,开FIFO和关FIFO,中断的标志位是不一样的。

 

这个笔记记在OneNote里面好久,这次正好拿来交流一下,呵呵~~~

Chuangbin Zhou:

回复 Jones Chen:

好了,开始字体被我设置为wingdings了(因为那个下拉菜单没有中文字体),在firefox下也正常显示,就不管了。刚刚被你提示,就到ie下看,果然是乱码。不得已,自己编辑html,改成宋体了,现在应该是正常的吧。(至少我这边ie和Firefox都正常了)。

吐槽一下:网站这个发的帖排版好差啊,颜色怎么是灰色的,字体怎么设置也不好看。行距也太小了。

  2812串口的接收和发送都有16个字节深度的FIFO,这个FIFO可以启用或者关闭,接收和发送都有5位来指示FIFO现存的字节量。

  同时2812的串口还有通常串口常见的标志位,例如TXRDY和RXRDY等等。

  问题出现了,发现2812是这样的,当你开了串口的FIFO功能时候,TXRDY
和 RXRDY的标志位功能失效了,即,当接收到字符的时候(假如1个),开了FIFO功能,这个时候,RXRDY不指示满(此位不为1),而FIFO的TXFIFST会等于1;发送也一样道理。

  而当你关闭了串口FIFO的时候,接到字符,RXRDY就会置1了,但是TXFIFST没反应了。

  所以,根据以上,假如要用串口的话,用查询的方法,就要根据FIFO是否开启,来查询不同的标志位了(例如接收,开了的话查RXFIFST是否大于等于1,关了的话查RXRDY)!假如用中断的方法的话,就要注意在串口的寄存器里面开哪个中断了,假如开了FIFO,就要开FIFO中的匹配中断;假如关了的话就要开Tx INT ENA等中断位,当然,两边的中断都开也可以的。

 

看上面,FIFO打开了,接收FIFO里面有一个字节了,但是RXRDY不置位,此时,由于FIFO匹配中断没打开,中断服务程序也不会进入了。

接收的查询用:while(ScibRegs.SCIFFRX.bit.RXFIFST != 1) { }

发送的查询用:while (ScibRegs.SCIFFTX.bit.TXFFST != 0) { }

这里,FIFO关闭了,RXFIFST就不会增了,但是RXRDY置位了,同时,中断也进去了。

接收的查询用:while(ScibRegs.SCIRXST.bit.RXRDY !=1) { }

发送的查询用:while (ScibRegs.SCICTL2.bit.TXRDY != 1){ }

 

看上面,datasheet里面这个表也很清楚了,开FIFO和关FIFO,中断的标志位是不一样的。

 

这个笔记记在OneNote里面好久,这次正好拿来交流一下,呵呵~~~

Jones Chen:

回复 Chuangbin Zhou:

谢谢您的意见和分享。

关于排版方面,会有群主Deyisupport去帮您反映一下。

  2812串口的接收和发送都有16个字节深度的FIFO,这个FIFO可以启用或者关闭,接收和发送都有5位来指示FIFO现存的字节量。

  同时2812的串口还有通常串口常见的标志位,例如TXRDY和RXRDY等等。

  问题出现了,发现2812是这样的,当你开了串口的FIFO功能时候,TXRDY
和 RXRDY的标志位功能失效了,即,当接收到字符的时候(假如1个),开了FIFO功能,这个时候,RXRDY不指示满(此位不为1),而FIFO的TXFIFST会等于1;发送也一样道理。

  而当你关闭了串口FIFO的时候,接到字符,RXRDY就会置1了,但是TXFIFST没反应了。

  所以,根据以上,假如要用串口的话,用查询的方法,就要根据FIFO是否开启,来查询不同的标志位了(例如接收,开了的话查RXFIFST是否大于等于1,关了的话查RXRDY)!假如用中断的方法的话,就要注意在串口的寄存器里面开哪个中断了,假如开了FIFO,就要开FIFO中的匹配中断;假如关了的话就要开Tx INT ENA等中断位,当然,两边的中断都开也可以的。

 

看上面,FIFO打开了,接收FIFO里面有一个字节了,但是RXRDY不置位,此时,由于FIFO匹配中断没打开,中断服务程序也不会进入了。

接收的查询用:while(ScibRegs.SCIFFRX.bit.RXFIFST != 1) { }

发送的查询用:while (ScibRegs.SCIFFTX.bit.TXFFST != 0) { }

这里,FIFO关闭了,RXFIFST就不会增了,但是RXRDY置位了,同时,中断也进去了。

接收的查询用:while(ScibRegs.SCIRXST.bit.RXRDY !=1) { }

发送的查询用:while (ScibRegs.SCICTL2.bit.TXRDY != 1){ }

 

看上面,datasheet里面这个表也很清楚了,开FIFO和关FIFO,中断的标志位是不一样的。

 

这个笔记记在OneNote里面好久,这次正好拿来交流一下,呵呵~~~

deyisupport:

回复 Jones Chen:

谢谢您的意见!由于这是基于美国团队提供的平台,所以在中文排版方面是有缺陷。因为以前没有发生这样的问题,不知道您的具体情况是怎么样的。如果可能,请您把具体情况在意见与建议版块中分享一下,我这边会反馈到美国团队,看看有什么可以改进的地方。谢谢您!

  2812串口的接收和发送都有16个字节深度的FIFO,这个FIFO可以启用或者关闭,接收和发送都有5位来指示FIFO现存的字节量。

  同时2812的串口还有通常串口常见的标志位,例如TXRDY和RXRDY等等。

  问题出现了,发现2812是这样的,当你开了串口的FIFO功能时候,TXRDY
和 RXRDY的标志位功能失效了,即,当接收到字符的时候(假如1个),开了FIFO功能,这个时候,RXRDY不指示满(此位不为1),而FIFO的TXFIFST会等于1;发送也一样道理。

  而当你关闭了串口FIFO的时候,接到字符,RXRDY就会置1了,但是TXFIFST没反应了。

  所以,根据以上,假如要用串口的话,用查询的方法,就要根据FIFO是否开启,来查询不同的标志位了(例如接收,开了的话查RXFIFST是否大于等于1,关了的话查RXRDY)!假如用中断的方法的话,就要注意在串口的寄存器里面开哪个中断了,假如开了FIFO,就要开FIFO中的匹配中断;假如关了的话就要开Tx INT ENA等中断位,当然,两边的中断都开也可以的。

 

看上面,FIFO打开了,接收FIFO里面有一个字节了,但是RXRDY不置位,此时,由于FIFO匹配中断没打开,中断服务程序也不会进入了。

接收的查询用:while(ScibRegs.SCIFFRX.bit.RXFIFST != 1) { }

发送的查询用:while (ScibRegs.SCIFFTX.bit.TXFFST != 0) { }

这里,FIFO关闭了,RXFIFST就不会增了,但是RXRDY置位了,同时,中断也进去了。

接收的查询用:while(ScibRegs.SCIRXST.bit.RXRDY !=1) { }

发送的查询用:while (ScibRegs.SCICTL2.bit.TXRDY != 1){ }

 

看上面,datasheet里面这个表也很清楚了,开FIFO和关FIFO,中断的标志位是不一样的。

 

这个笔记记在OneNote里面好久,这次正好拿来交流一下,呵呵~~~

Chuangbin Zhou:

回复 deyisupport:

            之前我这个笔记是记录在office OneNote里面,用的是雅黑字体,贴到这里,预览一下,发现排版很差,很难看。就以为是字体问题,就全选,在工具栏下拉菜单那里选字体,结果没有发现有中文字体,就随便选了一个,再预览,还是一样,就不管了,发出去了。

        昨天有网友回复说乱码,但我看了不会啊(此时是用Firefox),换ie9试一下,果然乱码,看来应该是字体问题了。但又没得中文字体选了,不得已,用html编辑,把内容复制出来,把font-family属性改为:宋体,正常了。

        情况就是这样,版主很热心啊,赞一个!

  2812串口的接收和发送都有16个字节深度的FIFO,这个FIFO可以启用或者关闭,接收和发送都有5位来指示FIFO现存的字节量。

  同时2812的串口还有通常串口常见的标志位,例如TXRDY和RXRDY等等。

  问题出现了,发现2812是这样的,当你开了串口的FIFO功能时候,TXRDY
和 RXRDY的标志位功能失效了,即,当接收到字符的时候(假如1个),开了FIFO功能,这个时候,RXRDY不指示满(此位不为1),而FIFO的TXFIFST会等于1;发送也一样道理。

  而当你关闭了串口FIFO的时候,接到字符,RXRDY就会置1了,但是TXFIFST没反应了。

  所以,根据以上,假如要用串口的话,用查询的方法,就要根据FIFO是否开启,来查询不同的标志位了(例如接收,开了的话查RXFIFST是否大于等于1,关了的话查RXRDY)!假如用中断的方法的话,就要注意在串口的寄存器里面开哪个中断了,假如开了FIFO,就要开FIFO中的匹配中断;假如关了的话就要开Tx INT ENA等中断位,当然,两边的中断都开也可以的。

 

看上面,FIFO打开了,接收FIFO里面有一个字节了,但是RXRDY不置位,此时,由于FIFO匹配中断没打开,中断服务程序也不会进入了。

接收的查询用:while(ScibRegs.SCIFFRX.bit.RXFIFST != 1) { }

发送的查询用:while (ScibRegs.SCIFFTX.bit.TXFFST != 0) { }

这里,FIFO关闭了,RXFIFST就不会增了,但是RXRDY置位了,同时,中断也进去了。

接收的查询用:while(ScibRegs.SCIRXST.bit.RXRDY !=1) { }

发送的查询用:while (ScibRegs.SCICTL2.bit.TXRDY != 1){ }

 

看上面,datasheet里面这个表也很清楚了,开FIFO和关FIFO,中断的标志位是不一样的。

 

这个笔记记在OneNote里面好久,这次正好拿来交流一下,呵呵~~~

pluto ran:

回复 Chuangbin Zhou:

好帖子,很有信息量!

  2812串口的接收和发送都有16个字节深度的FIFO,这个FIFO可以启用或者关闭,接收和发送都有5位来指示FIFO现存的字节量。

  同时2812的串口还有通常串口常见的标志位,例如TXRDY和RXRDY等等。

  问题出现了,发现2812是这样的,当你开了串口的FIFO功能时候,TXRDY
和 RXRDY的标志位功能失效了,即,当接收到字符的时候(假如1个),开了FIFO功能,这个时候,RXRDY不指示满(此位不为1),而FIFO的TXFIFST会等于1;发送也一样道理。

  而当你关闭了串口FIFO的时候,接到字符,RXRDY就会置1了,但是TXFIFST没反应了。

  所以,根据以上,假如要用串口的话,用查询的方法,就要根据FIFO是否开启,来查询不同的标志位了(例如接收,开了的话查RXFIFST是否大于等于1,关了的话查RXRDY)!假如用中断的方法的话,就要注意在串口的寄存器里面开哪个中断了,假如开了FIFO,就要开FIFO中的匹配中断;假如关了的话就要开Tx INT ENA等中断位,当然,两边的中断都开也可以的。

 

看上面,FIFO打开了,接收FIFO里面有一个字节了,但是RXRDY不置位,此时,由于FIFO匹配中断没打开,中断服务程序也不会进入了。

接收的查询用:while(ScibRegs.SCIFFRX.bit.RXFIFST != 1) { }

发送的查询用:while (ScibRegs.SCIFFTX.bit.TXFFST != 0) { }

这里,FIFO关闭了,RXFIFST就不会增了,但是RXRDY置位了,同时,中断也进去了。

接收的查询用:while(ScibRegs.SCIRXST.bit.RXRDY !=1) { }

发送的查询用:while (ScibRegs.SCICTL2.bit.TXRDY != 1){ }

 

看上面,datasheet里面这个表也很清楚了,开FIFO和关FIFO,中断的标志位是不一样的。

 

这个笔记记在OneNote里面好久,这次正好拿来交流一下,呵呵~~~

yong cao:

回复 pluto ran:

好,谢谢

  2812串口的接收和发送都有16个字节深度的FIFO,这个FIFO可以启用或者关闭,接收和发送都有5位来指示FIFO现存的字节量。

  同时2812的串口还有通常串口常见的标志位,例如TXRDY和RXRDY等等。

  问题出现了,发现2812是这样的,当你开了串口的FIFO功能时候,TXRDY
和 RXRDY的标志位功能失效了,即,当接收到字符的时候(假如1个),开了FIFO功能,这个时候,RXRDY不指示满(此位不为1),而FIFO的TXFIFST会等于1;发送也一样道理。

  而当你关闭了串口FIFO的时候,接到字符,RXRDY就会置1了,但是TXFIFST没反应了。

  所以,根据以上,假如要用串口的话,用查询的方法,就要根据FIFO是否开启,来查询不同的标志位了(例如接收,开了的话查RXFIFST是否大于等于1,关了的话查RXRDY)!假如用中断的方法的话,就要注意在串口的寄存器里面开哪个中断了,假如开了FIFO,就要开FIFO中的匹配中断;假如关了的话就要开Tx INT ENA等中断位,当然,两边的中断都开也可以的。

 

看上面,FIFO打开了,接收FIFO里面有一个字节了,但是RXRDY不置位,此时,由于FIFO匹配中断没打开,中断服务程序也不会进入了。

接收的查询用:while(ScibRegs.SCIFFRX.bit.RXFIFST != 1) { }

发送的查询用:while (ScibRegs.SCIFFTX.bit.TXFFST != 0) { }

这里,FIFO关闭了,RXFIFST就不会增了,但是RXRDY置位了,同时,中断也进去了。

接收的查询用:while(ScibRegs.SCIRXST.bit.RXRDY !=1) { }

发送的查询用:while (ScibRegs.SCICTL2.bit.TXRDY != 1){ }

 

看上面,datasheet里面这个表也很清楚了,开FIFO和关FIFO,中断的标志位是不一样的。

 

这个笔记记在OneNote里面好久,这次正好拿来交流一下,呵呵~~~

iSupport:

回复 yong cao:

好贴必顶!

赞(0)
未经允许不得转载:TI中文支持网 » 2812串口使用心得(主要是关于中断)
分享到: 更多 (0)