四、 时钟与中断处理 1. 时钟控制逻辑 OS Timer Interrupt Enable Register Operating System Match Register 0-3 Operating System Counter Register Operating System Status Register 在上图中,有4种和系统时钟相关寄存器,它们的含义如下: l OSCR: 一个自动递增计数的 32 位计数器。 l OSMR3-0: 4 个 32 位的匹配寄存器,当 OSCR 的值匹配时产生中断。 l OSSR: 状态寄存器,当 OSCR 和 OSMR 匹配时,会对 OSSR 做标志。 l OIER: 使能寄存器,表示当匹配发生时,允许在 OSSR 设置一个标识位。 OSCR 在自动累加的过程中,与OSMR里面设定的那些匹配寄存器进行匹配,发现有匹配的事件时,就会对 OSSR 中的相应位置设一个标志位“1”,表示OSCR与对应的OSMR 发生了匹配。当然这个匹配发生的前提是发生匹配的那个OSMR在OIER中的相应位被使能,否则OSMR中的设置将不起作用。 2. 系统时钟初始化流程 uC/OS-II 中创建的第一个任务将负责启动时钟节拍,时钟的初始化设置流程如下: 1) 设置 OSMR0 = x ,表示 初始化 OSMR0,即当计数器为x时发生匹配 2) 设置 OSSR = 0xf ,表示 清除所有已经发生的匹配,写“1”清除 3) 设置 OIER = OIER_EO ,表示 使能 OSMR0 来产生匹配 4) 设置 OSCR = 0 ,表示 初始化计数器的开始值 为 0 3. 系统时钟中断复位 1) 清除 OSSR 中的相应位,即向发生匹配的OSMR的那个对应位写“1” 2) 设置 OSCR = 0 ,表示 继续初始化计数器的值为 0 4. 中断控制器相关的寄存器 l ICPR: 中断标示寄存器,表示了当前系统正处于激活状态的中断源。 l ICMR: 中断屏蔽寄存器,用来屏蔽相应位的中断。 l ICLR: 中断级别设置寄存器,设定报告中断的级别是 IRQ 或者是 FIQ 。 l ICIP: IRQ 级别的中断源寄存器,用来标识 IRQ 中断发生的源设备。 l ICFP: FIQ 级别的中断源寄存器,用来标识 FIQ 中断发生的源设备。 5. 中断控制器初始化流程
1) 设置 ICMR 屏蔽位为不屏蔽时钟中断 OSMR0 (相应位写“1”) 2) 设置 ICLR 为都报告为 IRQ 级别(所有位写“0”) |