为精确的计时器。例如,2Hz定时器可以作为实时时钟的时钟源。 五、SPCE061A中断系统
SPCE061A系列单片机中断系统是单片机中中断功能较强的一种,它可以提供14个中断源,具有两个中断优先级,可实现两级中断嵌套功能。用户可以用关中断指令(或复位)屏蔽所有的中断请求,也可以用开中断指令使CPU接受中断申请。每一个中断源可以用软件独立控制为开或关中断状态;但中断级别不可用软件设置。 SPCE061A的中断类型
SPCE061A的结构给出了三种类型的中断:软件中断、异常中断和事件中断。 1.软件中断
软件中断是由软件指令break产生的中断。软件中断的向量地址为FFF5H 2.异常中断
异常中断表示为非常重要的事件,一旦发生,CPU必须立即进行处理。目前SPCE061A定义的异常中断只有‘复位’一种。通常,SPCE061A系统复位可以由以下三种情况引起:上电、看门狗计数器溢出以及系统电源低于电压低限。不论什么情况引起复位,都会使复位引脚的电位变低,进而使程序指针PC指向由一个复位向量(FFF7H)所指的系统复位程序入口地址。 3.事件中断
事件中断一般产生于片内设部件或由外设中断输入引脚引入的某个事
件。这种中断的开通/禁止,由相应独立使能和相应的IRQ或FIQ总使能控制。SPCE061A的事件中断可采用两种方式:快速中断请求即FIQ中断和中断请求即IRQ中断。这两种中断都有相应的总使能。 SPCE061A共有9个中断向量即FIQ、IRQ0-IRQ6及UART IRQ。这9个中断向量共可安置14个中断源供使用,其中有4个中断源可安置在FIQ或IRQ0-IRQ2中,另有10个中断源则可安置在IRQ3-IRQ6中。还有一个专门用于通用异步串行口UART的中断源,须安置在UARTIRQ向量中。
SPCE061A单片机的中断系统有14个中断源分为两个定时器溢出中断、两个外部中断、一个串行口中断、一个触键唤醒中断、7个时基信号中断、PWM音频输出中断。
SPCE061A单片机中,快速中断的优先级高于普通中断的优先级,在IRQ中断中IRQ1的中断优先级高于IRQ2,IRQ2的中断优先级高于IRQ3,按照IRQ的序号,序号越高则中断优先级越低,UART的中断优先级最低。在IRQ中断中,只是中断查询有先后,不能进行中断嵌套。同中断向量内的中断源中断优先级相同。 中断响应过程
从中断请求发生到被响应,从中断响应到转向执行中断服务程序,完成中断所要求的操作任务,是一个复杂的过程。整个过程都是在CPU的控制下有序进行的, SPCE061A单片机中断响应过程。 1.中断查询
SPCE061A把所有的中断请求都汇集到P_INT_Ctrl和P_UART_Command2
(该寄存器用于检测串行传输中断标志位)寄存器中。其中外中断是使用采样的方法将中断请求锁定在P_INT_Ctrl寄存器的相应标志位中,而音频输出中断、触键唤醒、定时中断、时基中断、串行异步中断的中断请求由于都发生在芯片的内部,可以直接去置位P_INT_Ctrl和P_UART_Command2中各自的中断请求标志,不存在采样的问题,所谓查询就是由CPU测试P_INT_Ctrl和P_UART_Command2中各标志位的状态,已确定有没有中断请求发生以及是哪一个中断请求,中断请求汇集使中断查询变得简单,因为只需对两寄存器查询即可。 SPCE061A中断查询发生在每一个指令周期结束后,按中断优先级顺序对中断请求进行查询,即先查询高级中断后,再查询低级中断,即先查询FIQ再查询IRQ,同级中断按IRQ0→IRQ1→IRQ2→IRQ3→IRQ4→IRQ5→IRQ6→UART的顺序查询。如果查询到有标志位为“1”,则表明有中断请求发生。因为中断请求是随机的发生的,CPU无法预先得知,因此在程序执行过程中,中断查询要在每个指令结束后不停的进行。 2.中断响应
中断响应就是CPU对中断源提出的中断请求的接受,是在中断查询后进行的,当查询到有效的中断请求时,紧接着就进行中断响应。中断响应的主要内容可以理解为是硬件自动生成一条调用指令,其格式为CALL addR16,这里的addR16就是存储器中断区中相应中断入口地址。在SPCE061A单片机中,这些入口地址已经由系统设定。
中断响应是有条件的,并不是查询到所有中断请求都能被立即响应,当存在下列情况时,中断响应被封锁:CPU正处在为一个同级或高级
的中断服务中。因为当一个中断被响应时,要求把对应的优先级触发器置位,封锁低级和同级中断。
中断响应的时间应首先从中断信号出现到CPU响应的时间与CPU响应中断信号到进入中断服务程序的时间之和。首先中断信号出现,CPU查询到后,再执行下一条指令结束后去响应中断,这个时间可以根据指令周期长短来确定;一般指令周期最长为182个时钟周期,原因是累乘加指令需要的时间最长为182个时钟周期;其次CPU响应中断后,到CPU执行中断服务程序又需要8个时钟,原因是需要堆栈PC指针和SR寄存器及将中断向量赋值给PC及跳转到中断服务程序,这些操作共需要8个时钟周期。
因此,SPCE061A从中断信号出现到进入中断服务最长需要190个时钟周期。当然,如果出现有同级或高级中断正在响应或服务中须等待的时候,那么响应时间是无法计算的。
中断响应后,P_INT_Ctrl和P_UART_Command2中的中断请求标志应及时清除。否则就意味着中断请求仍然存在,弄不好就会造成中断的重复查询和响应,因此就存在一个中断请求的撤销问题。在SPCE061A中断中,中断撤销只是标志位的置“0”问题。SPCE061A中断除UART中断外,所有的中断均需软件清除标志位,即将P_INT_Ctrl中相应的中断位清零。即可将中断请求撤销。而UART中断,则是硬件自动清零,不需要软件操作。如当接收到数据后,P_UART_Command2中的接收标志位自动置“1”,进入UART中断,在UART中断中读出数据,P_UART_Command2相应的中断标志位自动清零。
SPCE061A单片机的中断服务流程图3.8所示
图3.8 中断服务流程图
所谓中断的入口即中断的入口地址,每个中断源都有自己的入口地址, 中断入口地址表如表3.4: 中断向量 中断优先级别 FFF7H(复位向量) RESET FFF6H FIQ FFF8H IRQ0 FFF9H IRQ1 FFFAH IRQ2 FFFBH IRQ3 FFFCH IRQ4 FFFDH IRQ5 FFFEH IRQ6 FFFFH UART IRQ 表3.4 中断入口地址表
当CPU响应中断后,就是通过中断入口地址进入中断服务程序。 六、SPCE061A最小系统及开发方法 1.SPCE061A最小系统
最小系统接线如图3.9所示,在OSC0、OSC1端接上晶振及谐振电容,在锁相环压控振荡器的阻容输入VCP端接上相应的电容电阻后即可工