5653|9

45

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

为什么串口接收中断会反复被触发执行 [复制链接]

void UART1_ISR(void)
{
    unsigned long ulStatus;
    ulStatus=UARTIntStatus(UART1_BASE,true);     //   读取当前中断状态
    UARTIntClear(UART1_BASE,ulStatus);//   清除中断状态

   
    GPIOPinWrite(LED_PORT,LED_PIN, 0XFF);
    SysCtlDelay(1000 * (TheSysClock / 3000));
    GPIOPinWrite(LED_PORT,LED_PIN, 0X00);
    SysCtlDelay(1000 * (TheSysClock / 3000));
   
   

   
  
}
   
//  主函数(程序入口)
int main(void)
{
    clockInit();                                      //  时钟初始化:晶振,6MHz
    SysCtlPeriEnable(LED_PERIPH);                           //  使能LED所在的GPIO端口
    GPIOPinTypeOut(LED_PORT, LED_PIN);                      //  设置LED所在管脚为输出
    uartInit();                                             //  UART初始化
   
    for(;;);
}

我开了串口接收终端和接收超时中断  然后用串口调试助手给M3只发送了一次数据  只有一个字节 然而上面程序运行结果却是中断处理函数被反复触发执行呢 就像进入死循环一样  我只发了一次数据 而且只有一个字节 并且中断触发后也有清中断语句  所以不理解  请高手指点 小弟不胜感激

最新回复

  good 楼主也可以试试不使用FIFO撒,单字节接收发送。  详情 回复 发表于 2011-10-19 09:27
 
点赞 关注

回复
举报

2751

帖子

0

TA的资源

裸片初长成(初级)

沙发
 

原帖由 luhezhangjian 于 2011-10-18 12:35 发表 void UART1_ISR(void) { unsigned long ulStatus; ulStatus=UARTIntStatus(UART1_BASE,true); // 读取当前中断状态 UARTIntClear(UART1_BASE,ulStatus);// 清除中断状态 GPI ...

 

看看是不是接收超时中断的原因,把超时中断关一下试试。

 
 

回复

45

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发 David_Lee 的帖子

我试过了 没用的  还是反复执行
 
 
 

回复

849

帖子

0

TA的资源

纯净的硅(高级)

4
 

回复 楼主 luhezhangjian 的帖子

LZ把你的UART配置函数拉上来看看,从Main和uart中断函数看是没有大的问题了。可能是配置上面有一些问题。。。。。。

或者是LZ在使用串口调试工具的时候,执行的不是发送一次,有些工具有连续发送这个选项的,望LZ再检查一下。或者建议直接使用超级终端或者Putty这个小软件。。。

[ 本帖最后由 shilaike 于 2011-10-18 16:26 编辑 ]
 
个人签名只有想不到,没有做不到。
 
 

回复

45

帖子

0

TA的资源

一粒金砂(中级)

5
 

回复 4楼 shilaike 的帖子

谢谢楼上抽空关注小弟的帖子  那个现在我把接收超时中断关掉了 不会反复执行了 可是有了另外一个问题 就是我连续给M3发数据的时候 中断处理函数只触发执行一次 再发数据 中断函数就不触发执行了 代码如下:
/  UART初始化
void uartInit(void)
{
    SysCtlPeriEnable(SYSCTL_PERIPH_UART1);                  //  使能UART模块
    SysCtlPeriEnable(SYSCTL_PERIPH_GPIOD);                  //  使能RX/TX所在的GPIO端口
    IntMasterEnable();
    GPIOPinTypeUART(GPIO_PORTD_BASE,                        //  配置RX/TX所在管脚为
                    GPIO_PIN_2 | GPIO_PIN_3);               //  UART收发功能

    UARTConfigSet(UART1_BASE,                               //  配置UART端口
                  9600,                                     //  波特率:115200
                  UART_CONFIG_WLEN_8 |                      //  数据位:8
                  UART_CONFIG_STOP_ONE |                    //  停止位:1
                  UART_CONFIG_PAR_NONE);                    //  校验位:无
   /* UARTFIFOLevelSet(UART0_BASE,       //   设置发送和接收FIFO深度
    UART_FIFO_TX4_8,      //   发送FIFO 为2/8深度(4B)
    UART_FIFO_RX1_8);      //   接收FIFO 为6/8深度(12B)*/
    UARTIntEnable(UART1_BASE,UART_INT_RX);
    IntEnable(INT_UART1);
    IntMasterEnable();
    UARTEnable(UART1_BASE);                                 //  使能UART端口
  
}



void UART1_ISR(void)
{
    unsigned long ulStatus;
    ulStatus=UARTIntStatus(UART1_BASE,true);     //   读取当前中断状态
    UARTIntClear(UART1_BASE,ulStatus);//   清除中断状态
    UARTCharPut(UART1_BASE,'Y');
   
   
   
   
  
}
   
//  主函数(程序入口)
int main(void)
{
    clockInit();                                      //  时钟初始化:晶振,6MHz
    SysCtlPeriEnable(LED_PERIPH);                           //  使能LED所在的GPIO端口
    GPIOPinTypeOut(LED_PORT, LED_PIN);                      //  设置LED所在管脚为输出
    uartInit();                                             //  UART初始化
    for(;;);
}
 
 
 

回复

149

帖子

0

TA的资源

纯净的硅(初级)

6
 
M3收到的数据没有及时读出啊,一直存在FIFO里面了。。。
 
 
 

回复

1803

帖子

0

TA的资源

五彩晶圆(高级)

7
 

回复 6楼 brucege888 的帖子

嗯,应该是这个原因,在接收中断里边,没有将 FIFO 里的数据读走,次数多了就会造成 FIFO 溢出,而溢出中断又没有开启,实际上后续的数据就丢了。
 
 
 

回复

2751

帖子

0

TA的资源

裸片初长成(初级)

8
 

原帖由 Study_Stellaris 于 2011-10-19 09:08 发表 嗯,应该是这个原因,在接收中断里边,没有将 FIFO 里的数据读走,次数多了就会造成 FIFO 溢出,而溢出中断又没有开启,实际上后续的数据就丢了。

 

good

楼主也可以试试不使用FIFO撒,单字节接收发送。

 
 
 

回复

45

帖子

0

TA的资源

一粒金砂(中级)

9
 

回复 6楼 brucege888 的帖子

恩 谢谢各位朋友 小弟刚刚接触 不太懂 谢谢大家
 
 
 

回复

45

帖子

0

TA的资源

一粒金砂(中级)

10
 

回复 7楼 Study_Stellaris 的帖子

恩 你说的对 我加了接收语句之后  就可以了 谢谢啊
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表