lophyxp 发表于 2017-1-21 18:50:12

【龙芯相关】【08】龙芯中断系统

心映真的空间
苦心励志 技术强国
让我们面对现实 让我们忠于理想
欢迎来到唐刚的首页

龙芯中断系统                        
龙芯相关 » 龙芯中断系统                        
                                                      
龙芯中断系统与x86中断系统完全不一样的。
CPU级中断(异常)支持
几个相关的寄存器有
SR (BEV, SR, NMI, IM7-0, ERL, EXL, IE)
Cause (IP7-0)
龙芯有6个硬件中断信号线,分别对应Cause寄存器的15~10(IP7~IP2)位,龙芯片上时钟(定时器)占用了最高位那一根信号线,即Cause中的IP7。
龙芯还有两个软件中断寄存器位,对应Cause的9~8(IP1~0)位,它们是可读可写的。
当外部一个中断信号来到的时候,首先影响的就是Cause寄存器中IP位,信号从哪根线进入就会把对应的IP7~IP2中的那个位置1。Cause的任何一个IP位被置1,就能够引发一个CPU异常,但是要实在地引发CPU异常,还需要通过SR状态寄存器中的某几个关卡。要使一个传入的中断信号一定能引发一个中断,需要对SR中的以下几个位做如下操作:

[*]SR(IE 0位) 位必须置1, 否则会束缚CPU不响应任何中断,所以这位的名字叫全局中断全能位;
[*]SR(EXL 1位) 和 SR(ERL 2位) 两位必须清零。如果它俩中的任何一位为1, 则会禁止任何中断。而且每一次中断(CPU异常)成功触发后,它们中的某一个会自动置1,所以要注意在一个异常结束前,要将这两位都清零一下;
[*]在SR状态寄存器中,还要8位掩码位 IM7~0(15位~8位),它们分别对应Cause中的那8位IP位(IP7~0),要想使某个IP位成功引发一个CPU异常,则那个IP位对应的IM位必须置1(表示掩码开)。相当于在这里又设置了一道关卡。由于8个通道有8个掩码,可以实现精确独立的信号响应控制,而这种控制是由软件在程序中实施的,所以给了程序员很大的方便。
板级中断结构
8259中断控制芯片
PCI中断机制
软件中断组织
中断产生时的寄存器位处理及子例程调用过程                  

简单平安 发表于 2017-1-23 11:54:13

楼主用心了,赞!

南农烧鸡 发表于 2017-9-22 09:53:05

楼主可以分享1b中断的小例程么 要是可以 我们写中断效率很高 谢谢 项目需要 希望楼主分享下

简单平安 发表于 2017-9-27 10:35:23

南农烧鸡 发表于 2017-9-22 09:53
楼主可以分享1b中断的小例程么 要是可以 我们写中断效率很高 谢谢 项目需要 希望楼主分享下 ...

rt-thread中有对1b的支持,https://github.com/RT-Thread/rt-thread
另外,“龙芯1c库”(https://gitee.com/caogos/OpenLoongsonLib1c)会找时间把中断加进去,这样裸机编程就so easy了。龙芯1c和1b类似,欢迎关注

《【龙芯1c库】龙芯1c的中断分析》http://blog.csdn.net/caogos/article/details/69948579
希望有所帮助
页: [1]
查看完整版本: 【龙芯相关】【08】龙芯中断系统