龙芯7A桥片为龙芯3A处理器提供南北桥功能,7A桥片内部集成的中断控制器用于接收外部中断信号,并将中断信号转发给3A处理器。
MaQueOS采用的中断传输模式是HT消息中断模式。当7A桥片中的中断控制器接收到来自外部的中断信号后,以HT消息包的形式通过HT总线,将中断信号转发给3A处理器的HT控制器。3A处理器中的扩展I/O中断控制器接收到HT控制器发送的HT中断后,将中断信号发送给处理器核,如图3.2所示。
图3.2 键盘中断信号传递过程
MaQueOS在使用键盘前,需要调用excp_init函数进行键盘中断初始化的操作,excp_init函数(第2版)的实现详见代码清单3.6。初始化过程主要包括以下步骤:
1)在7A桥片中断控制器中使能键盘中断。
2)为键盘中断建立从7A桥片中断控制器的中断向量号到3A处理器的HT中断向量号的映射。
3)在3A处理器扩展I/O中断控制器中使能键盘中断。
4)在3A处理器核内使能键盘中断。
代码清单3.6 excp_init函数(第2版)
下面对代码清单3.6进行说明。
·第24行: 在7A桥片中断控制器中使能键盘中断。7A桥片的中断控制器共支持64个中断,64位7A桥片寄存器L7A_INT_MASK 用于屏蔽这64个中断。若某中断对应的位的值为0,则表示不屏蔽该中断;若值为1,则表示屏蔽该中断。由于键盘中断在7A桥片中断控制器中的中断向量号为3,因此,通过将L7A_INT_MASK寄存器的第3位设置为0,可以取消对键盘中断的屏蔽。
·第25行: 为键盘中断建立从7A桥片中断控制器的中断向量号到3A处理器HT的中断向量号的映射。7A桥片寄存器L7A_HTMSI_VEC用于建立从7A桥片中断控制器的中断向量号到HT中断向量号的映射。在MaQueOS中,将键盘中断映射到0号HT中断向量。因此,如图3.2所示,当7A桥片的中断控制器接收到中断向量号为3(图中的int3)的键盘中断后,将其映射到0号HT中断向量(图中的int0)后,向3A处理器的HT控制器发送HT消息包。
·第26行: 在3A处理器扩展I/O中断控制器中使能键盘中断。3A处理器扩展I/O中断控制器共支持256个HT中断,256位3A处理器寄存器IOCSR_EXT_IOI_EN用于使能这256个HT中断。若某中断对应的位的值为1,则表示使能该中断;若值为0,则表示屏蔽该中断。因为在上一行中已将键盘中断映射到0号HT中断向量,所以通过调用write_iocsr库函数,将IOCSR_EXT_IOI_EN寄存器中键盘中断对应的位0设置为1,实现在3A处理器的扩展I/O中断控制器中使能键盘中断。
·第27~28行: 本章实验code3中的excp_init函数的第2版在第1版的基础上增加了对硬中断HWI0的使能。在默认情况下,键盘中断被路由到硬中断HWI0,因此,类似使能时钟中断的过程,通过将ECFG寄存器的LIE字段中的HWI0位设置为1来使能3A处理器核内的键盘中断。