打印
[方案相关]

HC32F460外设中断用法

[复制链接]
1804|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
华大HC32F460的外设中断和STM32相比也是非常的个性!!!
先来看看HC32F460的启动文件startup.s,如下图所示:

使用特权

评论回复
沙发
实际测量不符|  楼主 | 2021-11-30 12:29 | 只看该作者
从这个文件可以看出来,它定义的中断向量表里,对中断名有只一个编号,没有写明具体是哪个外设的中断。

这就非常有意思,因为HC32F460的外设中断的中断号是可以“任意”编程的,不过这个“任意”也并不是全部128个中断都可以随便选择,也有一定的小规则,查看手册INTC章节,有如下所示的表格:

比如GPIO中断,只能选择0-37或者128。

使用特权

评论回复
板凳
实际测量不符|  楼主 | 2021-11-30 12:30 | 只看该作者
下面就来看看怎么把外设中断和中断号关联起来:
这里以UART1外设为例。
首先还是看手册的中断请求表,找到UART1,如下图,UART这个外设有5个中断事件。

使用特权

评论回复
评论
实际测量不符 2021-11-30 12:31 回复TA
我们知道,常规的MCU外设如STM32一样,通常是一个UART外设的所有中断请求都是共用同一个中断号,然后在该中断服务程序里面判断外设的标志位,得到中断源,并做出在相应和处理。 
地板
实际测量不符|  楼主 | 2021-11-30 12:31 | 只看该作者
但是HC32F460就完全不一样了,UART外设里的每个中断标志位,都是独立请求中断,必须单独给分配中断号,这样一来,一个UART就可以有5个中断服务程序了,编程其实更麻烦了。

比如上面的USART1_REI表示串口接收错误,可以分配0-31/80-85/136这些中断号,如果要给它分配的中断号是80,那么需要往寄存器INT_SEL80里写入278,其中278就是USART1_REI的中断事件序号。当UART1发生接收错误时,就会触发278号中断事件,该事件绑定了80号中断请求,就会执行IRQ080_Handler中断函数,我们在这个函数里面去处理对应的数据就可以了。

使用特权

评论回复
5
实际测量不符|  楼主 | 2021-11-30 12:36 | 只看该作者
再比如USART1_RI表示接收到数据中断,我们给它分配中断号81,那么就要往INT_SEL81写入279,然后在IRQ081_Handler中断函数里面去处理接收数据。

使用特权

评论回复
6
实际测量不符|  楼主 | 2021-11-30 12:37 | 只看该作者
上面是HC32F460的中断配置寄存器用法,华大提供了一个驱动库,
里面有一个hc32f460_interrupts.c文件,实现了中断管理,但是很坑,占用ROM空间巨大!
这个库提供了enIrqRegistration函数,用来绑定中断事件,以及中断处理函数。
但要注意,调用它之前最好先调用enIrqResign函数,用来删除中断绑定关系,否则注册中断有可能会失败!

使用特权

评论回复
7
实际测量不符|  楼主 | 2021-11-30 12:38 | 只看该作者
下面的代码,演示注册UART1的接收中断为81号中断,并指定中断处理函数为uart1_rx_handler

使用特权

评论回复
8
实际测量不符|  楼主 | 2021-11-30 12:39 | 只看该作者
stc_irq_regi_conf_t irq_cfg;
irq_cfg.enIRQn      = Int081_IRQn;
irq_cfg.enIntSrc    = INT_USART1_RI;
irq_cfg.pfnCallback = uart1_rx_handler;
enIrqResign(Int081_IRQn);
enIrqRegistration(&irq_cfg);
NVIC_EnableIRQ(Int081_IRQn);

使用特权

评论回复
9
实际测量不符|  楼主 | 2021-11-30 12:39 | 只看该作者
如果这个注册中断的时候可以给中断函数加上一个参数的话,实用性会大大提高,但是目前并不能,而一个中断事件绑定一个中断函数,又太占用ROM空间了,且很麻烦。

使用特权

评论回复
10
七毛钱| | 2021-12-1 17:12 | 只看该作者
好**,收藏

使用特权

评论回复
11
koala889| | 2021-12-28 10:48 | 只看该作者
对我来说,这个有点深奥,不过写的挺好

使用特权

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

本版积分规则

43

主题

589

帖子

1

粉丝