原创 freescale coldfire V1中断处理的几点说明

2010-6-28 00:40 2932 13 13 分类: MCU/ 嵌入式

最近用FSL的MCF51CN128做个东西,此款芯片是飞思卡尔coldfire v1 core系列的一种。集成了以太网控制器,16个KBI中断+1个外部IRQ中断,多通道的ADC,3个SCI(即UART)。因为coldfire v1主要是为了提供低成本的32位微控制器,它实际上更像HCS08系列,而不像coldfire v2~v4那些系列。就V1的中断处理几个注意点说明下:这还是经飞思卡尔工程师确认的。


1. coldfire v1的中断控制器也是实现了7个interrupt level每个level里又支持9个priority,这点和coldfire v2是一样的,而hcs08则只有一个level,中断的优先级是固定的。不过coldfire v1虽然实现了7个level,但它与v2不同的是:每个中断源的优先级(interrupt level+priority)都是定死的,即不像coldfire v2是可以软件任意设置优先级的。


2. 在编程的时候,写中断服务程序isr的时候,只需要和hcs08完全一样的写法即可,无需在exceptions.c文件中把isr的名称加到对应位置上(而coldfire v2系列就需要这么做)


例如:MTIM中断服务程序


//mtim1 interrupt routine

interrupt VectorNumber_Vmtim1 void mtim1_isr(void) {

  Timer++;

  MTIM1SC_TOF=0;  

}

3.coldfire v1的中断处理可以设置成类似于HCS08的那种只有一个level的方式,方法是在进入每个中断服务程序的一开始就禁止所有可屏蔽中断。执行下面的指令:

MOVE.w #0x2700,SR

 

4.虽然如前面所说,coldfire v1的中断源的interrupt level和priority是固定死的,不像coldfire v2那样可以任意编程设置优先级。但coldfire v1仍然提供了有限的中断优先级调整手段,称为remap。coldfire v1的中断控制器有这么两个寄存器:INTC_PL6P6,INTC_PL6P7;这两个寄存器可以用来设置两个可屏蔽的最高优先级的中断源,即level6的priority 6和7.举个例子:串口sci1的发送和接收中断在MCF51CN128中对应的中断源号是16和17,本来它们的优先级分别是level4 priority 5和level 4,priority 6,我们可以用下面的语句把这两个中断的优先级提升到最高

INTC_PL6P7=16;

INTC_PL6P6=17;

则sci1的发送中断的优先级现在编程level 6,priority7(这是所有可屏蔽中断中的最高优先级了,level7是不可屏蔽中断);接收中断则是level6,priority6,是第2高的中断了。

 
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
13
关闭 站长推荐上一条 /3 下一条