打印
[技术问答]

如何使用合泰单片机 HT66F2390 的串口多功能中断?

[复制链接]
325|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
慢动作|  楼主 | 2022-12-31 13:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 eltonchang2001 于 2023-1-13 09:30 编辑

    这篇博客是我第一次使用合泰8位单片机遇到的困难的记录,之前对51,32单片机中断的认识只停留在一个中断对应一个中断函数,但合泰单片机使用了多个中断共用一个中断函数,这种类型的中断统称为多功能中断,包括 TM 中断,LVD 中断,EEPROM 写操作中断,SIM接口中断,SPIA 接口中断和 UART 接口中断。下面直接放simHT66F2390规格书的原图。

使用特权

评论回复
评论
慢动作 2022-12-31 13:26 回复TA
———————————————— 版权声明:本文为CSDN博主「hanshengrui」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/hanshengrui/article/details/123850877 

相关帖子

沙发
慢动作|  楼主 | 2022-12-31 13:26 | 只看该作者

使用特权

评论回复
板凳
慢动作|  楼主 | 2022-12-31 13:27 | 只看该作者

使用特权

评论回复
地板
慢动作|  楼主 | 2022-12-31 13:28 | 只看该作者
这在214页

但要使用多个同类型的中断时,这里以UART0,UART1为例,我们只需要在原来使用一个中断的基础上上判断哪一个中断旗标被置1,就可以使两个中断互相独立使用。(原本因为我的错误思路导致只能交替使用两个串口中断)

使用特权

评论回复
5
慢动作|  楼主 | 2022-12-31 13:28 | 只看该作者
?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAaGFuc2hlbmdydWk=,size_19,color_FFFFFF,t_70,g_se,x_16

使用特权

评论回复
6
慢动作|  楼主 | 2022-12-31 13:29 | 只看该作者
这在191页

下面是程序部分

uart串口初始化

使用特权

评论回复
7
慢动作|  楼主 | 2022-12-31 13:30 | 只看该作者
这里要把MF5E多功能中断打开,这是重点!至于上面的配置可以参考规格书

使用特权

评论回复
8
慢动作|  楼主 | 2022-12-31 13:31 | 只看该作者
这里注释一下,在配置波特率的时候因为单片机本身的特性,选用115200的波特率会因为误差太大而无法正常接收发送(至少我是这样认为的。保命狗头.jpg),所以建议选用其他可行的波特率,比如19200,9600等。

使用特权

评论回复
9
慢动作|  楼主 | 2022-12-31 13:32 | 只看该作者
中断程序

我们可以先使用一个中断通过电脑的串口调试助手练练手,这样更容易理解

使用特权

评论回复
10
慢动作|  楼主 | 2022-12-31 13:32 | 只看该作者
DEFINE_ISR(UART0,0x3C)
{

        char buff[100]={'\0'};

        get_buff0(buff,'\n');//获取一串字符串(该字符串要有换行符号)
        send_buff0(buff);//把接收到的字符串再发送出去
        _ur0f = 0;       
}

使用特权

评论回复
11
慢动作|  楼主 | 2022-12-31 13:33 | 只看该作者
这里中断地址可以参考上面的图表

使用特权

评论回复
12
慢动作|  楼主 | 2022-12-31 13:34 | 只看该作者
下面是使用两个uart串口的中断语句

使用特权

评论回复
13
慢动作|  楼主 | 2022-12-31 13:35 | 只看该作者
DEFINE_ISR(UART0,0x3C)
{
        char buff[50]={'\0'};
        char buff1[50]={'\0'};
        if(_ur0f==1)
        {
                get_buff0(buff,'\n');
                send_buff0(buff);
        }
        if(_ur1f==1)
        {
                get_buff0_uart1(buff1,'\n');
                send_buff0_uart1(buff1);
        }
        _mf5f=0;
        _ur0f=0;
        _ur1f=0;
        _emi=0;       

}

使用特权

评论回复
14
慢动作|  楼主 | 2022-12-31 13:36 | 只看该作者
这里的重点是要去判斷哪個旗標被置1

双路与单路是一样的,只是判断哪一个uart产生的中断,二者就只有这种区别。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

63

主题

695

帖子

0

粉丝