完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
根据网上已有的教程,现已成功实现了FIFO中断接收数据,但由于F28035的FIFO接收深度只有4个字节,当我一次发送8个字节长度的数据时,发现只会触发一次中断,只成功接收了前四个数据,后面四个数据收不到,不知道怎样能解决这个问题。串口部分代码如下:
/* * sci.c * * Created on: 2021Äê10ÔÂ7ÈÕ * Author: FZP */ #include "sci.h" #define FIFO_SIZE 4 interrupt void sciaRxFifoIsr(void); interrupt void sciaTxFifoIsr(void); Uint16 Rx_Buff[MAX_Buff_Size]; Uint16 Work_MODE; void SCI_Init(void) { EALLOW; // This is needed to write to EALLOW protected registers PieVectTable.SCIRXINTA = &sciaRxFifoIsr; PieVectTable.SCITXINTA = &sciaTxFifoIsr; EDIS; // This is needed to disable write to EALLOW protected registers InitSciaGpio(); EALLOW; GpioCtrlRegs.GPAMUX2.bit.GPIO17=0; GpioCtrlRegs.GPADIR.bit.GPIO17=1; GpioCtrlRegs.GPAPUD.bit.GPIO17=0; EDIS; SciaRegs.SCICTL1.bit.SWRESET =0; SciaRegs.SCICCR.all =0x0007; //8λÊý¾Ý¸ñʽ£¬Ñ¡ÔñµØַλÐÒé SciaRegs.SCICTL1.all =0x0003; //ʹÄÜSCI·¢ËͺͽÓÊÕ //SciaRegs.SCICTL2.bit.TXINTENA =1; //ʹÄÜ·¢ËÍÖжϣ¨ÓÉÓÚÏÂÃæÅäÖÃʧÄÜÁËFIFO·¢ËÍÖжϣ¬ËùÒÔÕâÀïʹ²»Ê¹Äܶ¼Ã»Óã© SciaRegs.SCICTL2.bit.RXBKINTENA =1; //ʹÄܽÓÊÕÖÐ¶Ï SciaRegs.SCIHBAUD = 0x0000; SciaRegs.SCILBAUD = 0x00c2; //ÉèÖò¨ÌØÂÊ9600 SciaRegs.SCICCR.bit.LOOPBKENA =0; // ¹Ø±Õ×Ô²âģʽ SciaRegs.SCIFFTX.all=0xC044; //ʧÄÜFIFO·¢ËÍÖжϣ¬ÉèÖ÷¢ËÍFIFOÉî¶ÈΪ4 SciaRegs.SCIFFRX.all=0x4064; //ʹÄÜFIFO½ÓÊÕÖжϣ¬ÉèÖýÓÊÕFIFOÉî¶ÈΪ4(28035 ×î´óÉî¶ÈΪ4) SciaRegs.SCICTL1.all =0x0023; // ½ûÖ¹Èí¸´Î» SciaRegs.SCIFFCT.all=0x00; //FIFO¿ØÖƼĴæÆ÷ SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1; //·¢ËÍFIFO¸´Î» SciaRegs.SCIFFRX.bit.RXFIFORESET=1; //½ÓÊÕFIFO¸´Î» PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block PieCtrlRegs.PIEIER9.bit.INTx1=1; // PIE Group 9, INT1 PieCtrlRegs.PIEIER9.bit.INTx2=1; // PIE Group 9, INT2 IER |= M_INT9; // Enable CPU INT EINT; RS485RX_EN(); } void sci_msg(char* msg, Uint16 len) { int i; RS485TX_EN(); for(i=0;i RS485RX_EN(); } void sci_xmit(int a) { while (SciaRegs.SCICTL2.bit.TXRDY == 0) {} SciaRegs.SCITXBUF=a; } interrupt void sciaRxFifoIsr(void) { Uint16 i; for(i=0;i if(Rx_Buff[0]==0xAA && Rx_Buff[1]==0x00) { Work_MODE=Rx_Buff[2]; } SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1; // Clear Overflow flag SciaRegs.SCIFFRX.bit.RXFFINTCLR=1; // Clear Interrupt flag PieCtrlRegs.PIEACK.all|=0x100; // Issue PIE ack } interrupt void sciaTxFifoIsr(void) { //δʹÄÜFIFO·¢ËÍÖжϣ¬º¯Êý²»Ö´ÐС£ //SciaRegs.SCIFFTX.bit.TXFFINTCLR=1; // Clear SCI Interrupt flag PieCtrlRegs.PIEACK.all|=0x100; // Issue PIE ACK } |
|
相关推荐
1个回答
|
|
已解决,源代码可就可行,之前是自己测试方式不对。不能打断点,打断点就只进一次中断,连续运行观察变量时发现是触发多次中断的
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
509 浏览 0 评论
1833 浏览 0 评论
基于 DSP5509 进行数字图像处理中 Sobel 算子边缘检测的硬件连接威廉希尔官方网站 图
3704 浏览 0 评论
837 浏览 0 评论
普中科技F28335开发板中,如何使用aic23播放由代码生成的正弦波
4126 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-8 11:51 , Processed in 0.530012 second(s), Total 72, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号