注册 登录
查看: 1186|回复: 17

[K60] 【KL26】串口中断问题

[复制链接]
发表于 2014-5-31 18:28:47 | 显示全部楼层 |阅读模式
本帖最后由 wk930523 于 2014-5-31 18:28 编辑

请问山外哥:

我们在使用KL26的串口中断时出现了问题。使用的是你们的例程 7.UART_INT  ,主函数里只进行了初始化的操作,中断服务函数中只判断了是接收中断还是发送中断。DEBUG时发现使能发送中断后,就开始一直进入串口中断服务函数,执行发送中断的相应代码。发送一个字节给单片机后,就会不断进入接收中断。感觉应该是中断标志没有被清除,再中断函数中清了一下标志位还是不行。请山外哥帮忙解决下。代码如下:

/*!
*  @brief      UART0中断服务函数
*  @since      v5.0
*/
void uart0_handler(void)
{
    char ch;
    UARTn_e uratn = UART0;

    if(UART_S1_REG(UARTN[uratn]) & UART_S1_RDRF_MASK)   //接收数据寄存器满
    {
         UART_S1_REG(UARTN[uratn]) &= ~UART_S1_RDRF_MASK;      
        ch = 'a';
        //用户需要处理接收数据
//        uart_getchar   (uratn, &ch);                    //无限等待接受1个字节
//        uart_putchar   (uratn , ch);                    //发送字符串
    }
    if(UART_S1_REG(UARTN[uratn]) & UART_S1_TDRE_MASK)   //发送数据寄存器满
    {
        UART_S1_REG(UARTN[uratn]) &= ~UART_S1_TDRE_MASK;
        ch = 'b';
        //用户需要处理接收数据
    }
}

/*!
*  @brief      main函数
*  @since      v5.0
*  @note       串口中断接收测试
*/
void main()
{
    //uart_init(UART0,115200);     //初始化串口(UART0 是工程里配置为printf函数输出端口,故已经进行初始化)

//    uart_putstr   (UART0 ,"\n\n\n接收中断测试:");           //发送字符串

    set_vector_handler(UART0_VECTORn,uart0_handler);   // 设置中断复位函数到中断向量表里

    uart_rx_irq_en (UART0);                                 //开串口接收中断
    uart_tx_irq_en(UART0);
    while(1)
    {

    }
}

顺便问下怎么把帖子里的代码放在代码编辑器中
回复

使用道具 举报

发表于 2014-5-31 18:56:01 | 显示全部楼层
我晚点测一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-1 08:48:00 | 显示全部楼层
山外メ雲ジ 发表于 2014-5-31 18:56
我晚点测一下

山外哥,测好了吗?
回复 支持 反对

使用道具 举报

发表于 2014-6-1 10:35:00 | 显示全部楼层
,我也遇到这样的问题啊,不知道楼主解决了吗?现在正在纠结呢?
回复 支持 反对

使用道具 举报

发表于 2014-6-1 10:35:17 | 显示全部楼层
山外メ雲ジ 发表于 2014-5-31 18:56
我晚点测一下

山外哥我也遇到这样的问题啊
回复 支持 反对

使用道具 举报

发表于 2014-6-1 12:11:33 | 显示全部楼层
楼主解决问题了,出来交流一下,
回复 支持 反对

使用道具 举报

发表于 2014-6-1 13:48:10 | 显示全部楼层
串口发送中断,有两个中断,一个是数据为空中断(即没有数据需要发送)、另外一个为发送完成中断。

uart_tx_irq_en(UART0);为数据为空中断,是发送数据后,再调用的。然后再中断里需要关闭中断,等后续我们发送数据后,再调用来开启。否则会一直反复进入中断。

uart_txc_irq_en(UART0) 为发送完成中断,每次发送完成后就会产生中断。

由于串口的发送中断不怎么好用,所以我们的例程也没有发送中断了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-1 17:14:46 | 显示全部楼层
山外メ雲ジ 发表于 2014-6-1 13:48
串口发送中断,有两个中断,一个是数据为空中断(即没有数据需要发送)、另外一个为发送完成中断。

uart ...

山外哥,你说串口发送中断不怎么好用指的是驱动的问题还是芯片的问题啊?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-1 18:13:51 | 显示全部楼层
hotsauce 发表于 2014-6-1 10:35
,我也遇到这样的问题啊,不知道楼主解决了吗?现在正在纠结呢?

已经解决了  UART_S1_REG是只读寄存器,中断标志智能硬件清除不能软件清除,接收标志在读出数据后会自动清楚,发送数据为空中断和发送完成中断在向UART数据寄存器中写数据后也会自动清除标志位。可以参考手册761页UART部分。
回复 支持 反对

使用道具 举报

发表于 2014-6-1 18:14:39 | 显示全部楼层
wk930523 发表于 2014-6-1 18:13
已经解决了  UART_S1_REG是只读寄存器,中断标志智能硬件清除不能软件清除,接收标志在读出数据后会自动清 ...

强烈支持,非常感谢哥们




回去看看去
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-1 18:14:43 | 显示全部楼层
山外メ雲ジ 发表于 2014-6-1 13:48
串口发送中断,有两个中断,一个是数据为空中断(即没有数据需要发送)、另外一个为发送完成中断。

uart ...

多谢山外哥,看过手册后问题解决了
回复 支持 反对

使用道具 举报

发表于 2014-6-1 18:23:36 | 显示全部楼层
wk930523 发表于 2014-6-1 18:13
已经解决了  UART_S1_REG是只读寄存器,中断标志智能硬件清除不能软件清除,接收标志在读出数据后会自动清 ...

把解决的代码来发来,给我参考一下
回复 支持 反对

使用道具 举报

发表于 2015-4-6 16:43:56 | 显示全部楼层
山外メ雲ジ 发表于 2014-6-1 18:23
把解决的代码来发来,给我参考一下

山外哥我们的KL26串口中断也不对啊,返回的都是乱七八糟的数据,用的是5.2的库,您那有最新的串口中断接收程序吗?


回复 支持 反对

使用道具 举报

发表于 2016-3-2 14:52:46 | 显示全部楼层
山外メ雲ジ 发表于 2014-6-1 18:23
把解决的代码来发来,给我参考一下

山外哥,能把解决这个问题的代码发出来吗,谢谢
回复 支持 反对

使用道具 举报

发表于 2016-3-2 18:01:54 | 显示全部楼层
山外メ雲ジ 发表于 2014-6-1 18:23
把解决的代码来发来,给我参考一下

山外哥,我就是烧的你这个例程,我可以收到那句 接收中断测试 但是 我在我发字符 没有返回的那个数值

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2016-3-2 18:07:03 | 显示全部楼层
hello12 发表于 2016-3-2 18:01
山外哥,我就是烧的你这个例程,我可以收到那句 接收中断测试 但是 我在我发字符 没有返回的那个数值

设断点,看看有没有进入接收中断。
回复 支持 反对

使用道具 举报

发表于 2016-3-2 18:28:29 | 显示全部楼层
敖安吉 发表于 2016-3-2 18:07
设断点,看看有没有进入接收中断。

你好,刚刚看了一下 是没有进入中断,请问该怎么处理呢
回复 支持 反对

使用道具 举报

发表于 2016-4-27 21:36:39 | 显示全部楼层
wk930523 发表于 2014-6-1 18:13
已经解决了  UART_S1_REG是只读寄存器,中断标志智能硬件清除不能软件清除,接收标志在读出数据后会自动 ...

请问具体是怎么弄得?
回复 支持 反对

使用道具 举报

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

本版积分规则

快速回复 返回列表 返回顶部