想用接收FIFO来减少dnf如何减少网络连接中断次数数,如何判断接收完了

CTI即字符接收超时中断,当有不足触发点值规定的字符串读入时,将引起中断,其与串口的RDA中断(接收中断)具有相同的优先级,并会同时被使能。
DSP28335使用FIFO的串口中断总结
一、串行通信与并行通信
DSP控制器间,DSP控制器与外部设备间交换信息,通信,可采取的通信方式主要两大类1、串行通信 2、并行通信。
并行通信一般包括多条数据线、多条控制线和状态线,传输速度快,传...
缺页中断——FIFO、LRU、OPT这三种置换算法
FIFO、LRU、OPT这三种置换算法的缺页次数2缺页中断  在请求分页系统中,可以通过查询页表中的状态位类确定所要访问的页面是否存在于内存中。每当所要访问的压面不在内存时,会产生一次缺页中断,此时操...
UART的FIFO功能
经常听到UART的FIFO功能,但是从来没有真正使用过和认真思考过它的作用。正好有客户用到这个功能,在这里做个总结。
FIFO 是“First-In First-Out”的缩写,它是一个具有先...
什么是UART中的FIFO ?
FIFO是先进先出缓冲区的意思,即串口接收到的数据可以先进入FIFO,不必马上进入中断服务程序接收,这样可节省CPU时间。对于发送数据也一样,可以把要发送的数据一起写入FIFO,串口控制器可按写入顺序...
串口中fifo的作用
FIFO是先进先出缓冲区的意思,即串口接收到的数据可以先进入FIFO,不必马上进入中断服务程序接收,这样可节省CPU时间。对于发送数据也一样,可以把要发送的数据一起写入FIFO,串口控制器可按写入顺序...
stm32的文档上说can有两个接收fifo,但是对具体怎么使用并没有特别提到,在网上也没有找到靠谱或者统一的说法
我看了几个例子和文档也没发现具体怎么设置使用哪个fifo
今天仔细的看了下文档里...
早在去年的这个时候就搞定了28335的串口实验,包括使用和不使用fifo的,今天再度捡起,竟然耗费了将近一天的时间来搞明白,菜鸟真心伤不起,现在记录下不使用fifo的串口中断实验过程和自己曾经和现在犯...
dsp28335 采用SCI &em&FIFO&/em&+&em&中断&/em&方式实dsp 与上位机实现串口通信 上位机向dsp发送一个字符或字符串,经过数据处理,上位机接收数据
TI DSP 28335 串口&em&FIFO中断&/em&接收程序打开后在工程添加文件中的comm_2int_fifo.c文件即可。该文件已经本人调试成功可用。
陈海生,郭晓云,邓锐,王峰,陈亮
1. 广东海洋大学 信息学院, 湛江524000; 2. 广东海洋大学 智能工程研究所
摘要:为了研究基于S3C2440的串口FIFO模式的中断机制和相应处理策...
没有更多推荐了,您当前的位置:&>&&>&&>&
关于串口FIFO中断
串口FIFO中断有;RDA CTI
串口的接收模块包括接收缓冲寄存器和移位寄存器。接收的数据进入移位寄存器后经移位处理并行传入缓冲寄存器,事实上,UART的FIFO是一个硬件环形的缓冲队列,物理上不可寻址,不可见,仅U0RBR这个FIFO出口可见。U0RBR就是接收FIFO的第一位。FIFO的长度是可设的,也叫触发点,低于这个长度的字符串不会引起中断,但在实际应用中,不可能串口读入的数据长度总为触发点值的整数倍,为此,引入了CTI即字符接收超时中断,当有不足触发点值规定的字符串读入时,将引起中断,其与串口的RDA中断具有相同的优先级,并会同时被使能。
那么,LPC2000的UART机制是如何判断串口读入数据的一次性容量呢?如果接收FIFO里已经有了1个字符,它可在一定的时间内等待下一个字符的读入,也就是说,不超过一定的时间就不会触发CTI中断,这个时间是在本次通讯协议设置的前提下,接收3.5到4.5个字符所用的时间。比如,需串口接收GPRS数传状态成功建立后的返回值&Ok_Info_WaitingForData&22个字符组成的字符串,FIFO触发点设置为14,在前14个字符读入之后,立即触发RDA中断(接收中断),跳转至RDA中断服务子程序将这14个字符放入我所预设的缓冲区内,接着,后8个字符读入,这时CPU并不立刻中断,它需等待在本次串口通讯协议设置的前提下,接收3.5到4.5个字符所用的时间(需根据波特率和帧格式具体计算),这个时间一到,立刻触发CTI中断(超时中断),换句话说,超过这个时间的等待,CPU就认为一个完整的字符串已经结束了,这才是字符串超时的真正含义。
CTI触发的前提是接收FIFO里已经有了1个字符,在等待下一个字符的进入
用FIFO发送数据时,需要保证接受端的FIFO不溢出,则发送过快,接受端FIFO满后中断末取走数据,发送端就又发数据。其只能由发送端来保证
不过接受端FIFO有2个Buffer,循环接收.
3、个人觉得,当FIFO的触发深度设为1时和不用FIFO时的效果是一样的。
4、串口发送时,推荐第一个字符要在打开串口中断前送(不懂???),否则可能中断只来一次。比如下面的这个用串口中断发送字符串的函数为:
/****************************************************************************************************
** 函数名称 :UART0_SendStr()
** 函数功能 :向串口发送字符串
** 入口参数 :str 要发送的字符串的首地址指针
** 出口参数 :无
*****************************************************************************************************
void UART0_SendStr( CHAR const *str)
Str_Send_P =
U0THR = *Str_Send_P++;
U0IER |= 0x02; //开发送中断
在中断发送程序中的处理为:
SWITCH(IIR & 0x0e)
case 0x02: //利用串口发送中断,发送字符串
if((*Str_Send_P)!='')
U0THR = *Str_Send_P++;
U0IER &= (~0x02); //关发送中断
这种做法的道理不太明白,但实验证明,不这么做就只发一次!~
扩展阅读:【跟谁学社区】-学习论坛_学习小组_兴趣小组
话题小组123帮你解决孩子教育和妈妈成长问题NEW「职说Talk」,专属职场人学习的平台。NEW领先的高考状元培养社群。NEW外教爸爸双语宝宝让0-12岁儿童爱上英语三岁看小,七岁看老,家庭教育至关重要!这里有你想要的咨询,快来加入吧!嗨!We are 伐木累!一起打造嗨皮高中生活~~来找到与你相知的那一群人!情调的生活,钱多多的职场,都是我们的!张开梦想的翅膀,我们飞向新世界!粉丝互动、建议反馈,嗨起来~中国爱乐乐团第一小提琴手高中小海量资料,坚持看一年,英语会改变30年成就3000万人魅力表达、身心富足瑜伽,让你遇到最美丽的自己!解析高考招生政策,介绍大学和专业最简单方法。分数+ 能力,语言+ 逻辑。三分长相 七分打扮 会打扮的女人最好命!既然选择远方,便只顾风雨兼程关于日语、关于日本,一起聊聊吧每天都离法国更近一点在喧嚣的世界中打造一片心灵的净土!爱美术,爱生活每日变换自己的装束,分享你的美!蹦沙卡拉卡~帅哥美女看这里~大千世界,总有你不知道的事~热门帖子1839163223142612021112210341340001011110411000031010111...hi,欢迎来到跟谁学社区登录
联系我们新手指南DSP28335 SCI通信问题总结以及问题总结。 - TI C2000论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
林超文手把手教你学!
教你1000种电路设计思路
张飞硬件电路之PFC全集
参与免费送VIP+原创视频
运放、ADC、电磁兼容
DSP28335 SCI通信问题总结以及问题总结。
18:53:40  
20473&查看
& &&&本人新手,刚接触DSP不久,和其他很多人一样也是从例程学起。
& &&&在学习的过程中难免会遇到一些问题,我希望通过把这些问题写出来,一方面希望各位大神指点;也希望通过这种方式帮助后面的新学者一种提示吧,开始第一步始终是很难的,我是深有体会的;最后也希望大家踊跃讨论,集思广益嘛,互相学习。本人文采很差,我尽量把问题表述清楚。
& & 进入正题:最近几天一直在学习SCI通信,自己以为应该不难,以前有51的串口经验。但是事实上,并没有想象中的那么容易。
& &1、首先是非FIFO模式的中断设置服务程序,不能直接进入发送中断;需要先发送一个字节的数据才能进入中断;
& && &按照51的模式,发送数据的时候,直接TI = 1,直接进入串口数据发送中断服务程序,接着在中断函数中将 TI = 0;
& && & void TXD_ISR() interrupt 4
& && && && && &if(TI)
& && && && && &{
& && && && && && && && &&&TI = 0&&;
& && && && && && && && &&&SBUF =
& && && && && &}
& && &但是28335没有这个标志位,不知道这个算不算 ScibRegs.SCICTL2.bit.TXRDY,datasheet上怎么写&&if(ScibRegs.SCICTL2.bit.TXRDY == 1)& &ScibRegs.SCITXBUF = msg[x];会自动清零的;并且SCI复位的时候这位始终为1;按照常理,如果只要中断寄存器配置好,按照51的模式可以直接进入中断,但是事实是,这不能进入中断,调试事实数据发现:PieCtrlRegs.PIEIFR9.bit.INTx4&&= 0这个没有置一,也就不能发生中段;
& &我是遇到这样的问题,不知道大家有没有发现这个问题;如果有谁想到解决办法也可以在提出来,互相学习;有的可能会说,有FIFO干嘛不用呀,可以减少CPU负担。也是呀,我但是也想对呀,于是也写了一个FIFO中断程序,但是按照开发板上的例程,我也遇到如下问题;就是问题2啦!
2、利用FIFO中断数据发送不完全,
& &FIFO配置如下:
& & void scic_fifo_init()
& & ScicRegs.SCIFFTX.all=0xE060;
& & ScicRegs.SCIFFRX.all=0x206f;
& & ScicRegs.SCIFFCT.all=0x0;
中断服务函数
interrupt void SCIb_TX_FIFO_ISR()
& & if(TX_Len != 0)
& & & & & & if(TX_Len & 16)
& & & & & & {
& & & & & & & & & & for(i = 0; i & 16;i++)
& & & & & & & & & & {
& & & & & & & & & & & & & & ScibRegs.SCITXBUF = msg[txdataindex1++];
& & & & & & & & & & }
& & & & & & & & & & TX_Len -= 16;
& & & & & & }
& & & & & & else
& & & & & & {
& & & & & & & & & & for(i = 0;i & TX_Li++)
& & & & & & & & & & {
& & & & & & & & & & & & & & ScibRegs.SCITXBUF = msg[txdataindex1++];
& & & & & & & & & & }
& & & & & & & & & & ScibRegs.SCICTL1.bit.TXENA = 0;
& & & & & & & & & & ScibRegs.SCICTL1.bit.RXENA = 1;
& & & & & & & & & & txdataindex1 = 0;
& & & & & & & & & & receivefinishflag = 0x00;
& & & & & & }
& & ScibRegs.SCIFFTX.bit.TXFFINTCLR = 1;
& & PieCtrlRegs.PIEACK.bit.ACK9 = 1;
但是出现一个问题;当TX_Len & 16的时候发送的数据时,发送的数据的个数是 :暂时标记为 n = TX_Len&&% 16;
举个例子:msg = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}
若TX_Len&&= 10;发送的数据为0,1,2,3,4,5,6,7,8,9
若TX_Len&&= 10;发送的数据为0,1,2,3
为啥会出现这种情况呢,
for(i = 0; i & 16;i++)
& && &&&ScibRegs.SCITXBUF = msg[txdataindex1++];//这句也执行了,但是却没有相应
& &TX_Len -= 16;//=执行了这句
我觉得肯定是哪里的寄存器设置有问题,但是也说不出来,在网上也找了很多资料也没有找见,偶尔我看到一个论坛上说,万一不行就用TI自带的例程,里面有中断模式的例程,TI的例程寄存器设置为:
void scib_fifo_init()
& &ScibRegs.SCICCR.all =0x0007;& & // 1 stop bit,&&No loopback
& && && && && && && && && && && &&&// No parity,8 char bits,
& && && && && && && && && && && &&&// async mode, idle-line protocol
& &ScibRegs.SCICTL1.all =0x0003;& &// enable TX, RX, internal SCICLK,
& && && && && && && && && && && &&&// Disable RX ERR, SLEEP, TXWAKE
& &ScibRegs.SCICTL2.bit.TXINTENA =1;
& &ScibRegs.SCICTL2.bit.RXBKINTENA =1;
& &ScibRegs.SCIHBAUD& & =0x0000;
& &ScibRegs.SCILBAUD& & =SCI_PRD;
& &ScibRegs.SCICCR.bit.LOOPBKENA =1; // Enable loop back
& &ScibRegs.SCIFFTX.all=0xC028;
& &ScibRegs.SCIFFRX.all=0x0028;
& &ScibRegs.SCIFFCT.all=0x00;
& &ScibRegs.SCICTL1.all =0x0023;& &&&// Relinquish SCI from Reset
& &ScibRegs.SCIFFTX.bit.TXFIFOXRESET=1;
& &ScibRegs.SCIFFRX.bit.RXFIFORESET=1;
比较FIFO设置你会发现主要的区别在哪里嘛,当然中断数据比较不算哈;
其实主要区别就在,我的FIFO初始化的将
ScibRegs.SCICTL2.bit.TXRDY&&清零;ScibRegs.SCIFFTX.bit.TXFFINTCLR = 1;而TI的标准例程是没有清零的;
按照ti标准重新设置;运行一切OK;
经验教训:作为初学者,我建议尽量参照ti例程走,开发板配套的很多例程也是从这上面修改来的,并且大多数例程没有给中断模式的,只有查询模式;
3、SCI的FIFO模式确实有很多优点,但是我想到一个问题;当用FIFO接收数据的时候,也采用中断模式;怎么设置 RXFFIL4 -0 ,也就是接收中断比较值;
& &比如我设为16,只有当接收数据大于等于16的时候才能发生中断,但是有一个问题是我接收到的数据很可能小于16个那不是一直进不了接收中断啦,
& &并且这是经常遇到的情况,
& &有一种方法是将RXFFIL4-0设置为1,这样失去FIFO的优势啦,不知道大家有没有好的解决办法。希望大家讨论。
总结:这是本人在学习SCI的问题和一些总结,希望大家指正,希望对大家有帮助,也希望大家一起讨论,互相帮助,谢谢各位。
& & & & & & & & & & & &
您的付出是论坛的动力,感谢您一直支持!.
21:44:30  
“比如我设为16,只有当接收数据大于等于16的时候才能发生中断,但是有一个问题是我接收到的数据很可能小于16个那不是一直进不了接收中断啦”
关于这个问题,DATASHEET里边是这样描述的:Receive FIFO generates interrupt when the FIFO status bis(RXFFST4-0) and FIFO level bits (RXFFIL4-0) match (greater than or equal to),而这个RXFFST4-0我觉得是可以自行设置的,当需要接收N个数据就触发中断时,把RXFFST4-0设为“16-N”,即可以理解为RXFFST4-0有个初始的值在垫底,累计到16不就可以发送了么?
个人愚见,不当之处还请斧正
21:18:14  
我的没用中断,给上位机传数据都是个问题~~忧伤
17:35:13  
我的没用中断,给上位机传数据都是个问题~~忧伤
没用中断用的定时发送的方式吗?那为什么给上位机传数据是个问题呢?能详细说下吗
11:08:45  
没用中断用的定时发送的方式吗?那为什么给上位机传数据是个问题呢?能详细说下吗
之前在串口调试助手上出现乱码,现在问题已经解决
等待验证会员
12:03:32  
17:01:49  
介绍的很详细,这个模块还没怎么练过
等待验证会员
12:29:42  
自认现在自己做的有些稀里糊涂
11:12:47  
不错& &不知道有没有汇编写的程序& &
16:09:40  
目前一头雾水,会不会被鄙视
22:32:30  
谢谢分享!
22:12:23  
批量生产原厂交流同步伺服驱动器方案
包括产品程序源代码 PCB文件 BOM物料清单
SCH原理图 开发文件等
有样机可供客户检测,可供研发、学习、生产使用。
提升你的产品开发效率,促进你的产品早日上市,争夺市场先机。
位置控制精度高:动态跟踪误差小,高速下进行快速定位无拖尾,停止时无抖动。
产品特点: 高性能硬件平台:32bit高性能DSP。
调速范围宽:稳速运行的最高速度可达3000rpm,最低速度0.1rpm。
过载能力强:转矩可达3倍额定负载 高动态响应:速度环带宽可达500Hz,突加负载转速变化小。
六种控制模式: 速度模式 位置模式 转矩模式 速度/位置切换模式 转矩/速度切换模式 位置/转矩切换模式。
伺服行业应用案例:数控机床、点胶机、火焰切割机、机械手、雕刻机、绕线机、丝印机、糖果包装机等
------------------------------------------------------------------
变频驱动设备解决方案伺服驱动器生产方案提供商
深圳市伊瑞软件技术
19:42:57  
谢谢分享,谢谢楼主
11:12:08  
有没有用汇编编程的朋友& &求约
10:14:08  
新手上路,看看大神讨论些什么
20:49:34  
新手上路,看看大神讨论些什么
09:57:19  
好好学习,,,,,,,
21:18:03  
楼主有没有试过在发送数据时候,SciTx(0x55);& &&&
void SciTx(unsigned char data)
& && &&&while (ScicRegs.SCICTL2.bit.TXRDY == 0) {}
& & & & ScicRegs.SCITXBUF=
程序执行到哪一步的时候,数据会到移位寄存器,也就是说GPIO63脚上会有数据,即高低电平的变化
20:54:19  
我最近在调试28335 串口的时候遇到和层主您一样的问题,程序执行到& && &&&ScicRegs.SCITXBUF=& &&&之后应该是管脚会有电平变化。但我想问问层主,我在执行这个幅值语句之后,按理说只要 TXENA置1了,数据应该经移位寄存器发送到端口,而我现在只能发一个字节,在发送第二个字节的时候,SCITXBUF的确赋值正确,但TXRDY始终为0,第二个字节一直出不去。层主能否解答一下?不胜感激!
11:07:19  
入DSP坑没多久,难受想哭
林超文手把手教你学!
教你1000种电路设计思路
张飞硬件电路之PFC全集
参与免费送VIP+原创视频
运放、ADC、电磁兼容
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司元器件百科
一种多路同步数据采集系统的设计_模拟技术
>>一种多路同步数据采集系统的设计_模拟技术

我要回帖

更多关于 缺页中断次数怎么数的 的文章

 

随机推荐