uC/OS-II和ARM系统应用中的精确定时

来源:本站
导读:目前正在解读《uC/OS-II和ARM系统应用中的精确定时》的相关信息,《uC/OS-II和ARM系统应用中的精确定时》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《uC/OS-II和ARM系统应用中的精确定时》的详细说明。
简介:本文介绍了uC/OS-II和ARM系统应用中的精确定时

1 uC/OSII与ARM系统简介

电力系统微机保护在国内发展近20年,随着计算机技术的迅速发展,微机保护也从原来前后台的程序设计方式,进入到采用实时多任务操作系统时代。

嵌入式操作系统uC/OSII是一个占先式多任务操作系统,它具有可移植性强、裁剪性好的特点,程序执行时间具有可确定性,内核调度开销小,系统稳定可靠。因此该操作系统适合应用于电力系统中低压微机保护装置。

ARM嵌入式系统具有以下特点:

① 其架构是32位的RISC,开放性非常好。它是由ARM公司将其技术授权给世界上许多著名的半导体和OEM厂商,生产出各式各样以ARM为内核的芯片。

② ARM芯片支持JTAG调试,调试方便。

③ 有些厂家又将ISP(系统在线编程)功能作为固件做在ARM芯片的BOOT扇区内,从而方便用户程序的升级。电力系统微机保护越来越向小型化发展,ISP功能在软件升级和维护方向具有很高的应用价值。

④ 很多ARM芯片内置大容量Flash,外设资源非常丰富,便于系统的小型化,可提高系统的性价比。

由此可见,ARM系统也非常适用于中低压微机保护装置。将ARM平台与uC/OSII实时多任务操作系统整合在一起作为微机保护装置的平台,能够充分发挥两者的优点,具有很强的生命力。

2 精确定时问题

将uC/OSII操作系统用于微机保护装置中,不可避免地要遇到精确定时的问题。为了保证微机保护装置交流量计算的准确,要保证交流电量的A/D采样中断间隔的精确。

对于实时多任务操作系统,实现任务间通信最简便的办法是使用共享数据结构。特别是当所有的任务都在一个单一地址空间下时,这种处理特别简便。如果能够使用变量(如全局变量、指针、缓冲区、链表以及循环缓冲区等),使用共享数据结构通信就更为容易。虽然共享数据区法简化了任务间的信息交换,但是必须保证每个任务在处理共享数据时的排它性,以避免竞争和数据的破坏。与共享资源打交道时,使之满足互斥条件最简单的方法是采用关中断,uC/OSII操作系统也采用了此方法。

为了保证操作不出错,uC/OSII操作系统内核运行对一些临界区的变量操作之前要调用OS_ENTER_CRITICAL()关中断;对这些变量修改完成后,再调用OS_EXIT_CRITICAL()开中断。这就带来一个问题,正常情况下,会造成A/D采样中断也会被禁止,导致各个采样点的时间间隔不一致,也就无法保证交流量计算的正确性。

3 解决方案

3.1 FIQ快中断

为解决本问题,先来分析一下ARM芯片中断的特点。ARM芯片具有两种中断类型: IRQ中断和FIQ快中断。快中断是为支持数据传输或快速数据通道而设计的,它有以下特点:

① 快中断被设为最高中断优先级。

② 在快中断模式增设了7个私有工作寄存器,从而避免了由于主工作寄存器数据的保存和恢复而带来额外开销。

③ 快中断处理程序处于异常向量表的最后位置,因此可紧接异常向量表书写快中断处理程序,而不必进行程序跳转操作,避免了刷新指令流水线和高速缓存。

这些特点可保证快中断的响应速度最快,并且进入/退出快中断程序的时间开销最小。根据此特点,选择快中断作为A/D采样的中断。

3.2 精确定时方案

为使采样中断间隔不受uC/OSII操作系统影响,采用以下措施:

① 改进uC/OSII中移植文件os_cpu_c.c中的OS_ENTER_CRITICAL()和oS_EXIT_CRITICAL()两个函数,保证快中断不受这两个函数影响。

② 在A/D采样的快中断函数中,只对A/D采样缓冲区进行写操作,快中断以外的中断或操作系统任务只对A/D采样缓冲区进行读操作,以保证没有临界区的数据产生。

③ 其他所有中断都采用IRQ中断。

3.3 CPSR程序状态寄存器

ARM的程序状态寄存器为CPSR,它可以控制IRQ和FIQ中断的允许与中断。CPSR的各位如图1所示。

uC/OS-II和ARM系统应用中的精确定时

图1 程序状态寄存器

中断禁止位包括I和F位:当I位置位时,IRQ中断被禁止;当F位置位时,FIQ中断被禁止。

因此,uC/OSII操作系统只控制I位(而不控制F位)来解决A/D采样中断间隔定时问题。

3.4 开中断、关中断函数

要实现开中断、关中断函数,涉及uC/OSII操作系统的两个文件: os_cpu.h和os_cpu_c.c。

首先在os_cpu.h中定义:

__swi(0x02) void OS_ENTER_CRITICAL(void);

/*关中断*/

__swi(0x03) void OS_EXIT_CRITICAL(void);

/*开中断*/

然后在os_cpu_c.c中实现OS_ENTER_CRITICAL和OS_EXIT_CRITICAL函数。这两个函数的功能在软件中断服务程序中实现,OS_ENTER_CRITICAL对应2号软件中断,OS_EXIT_CRITICAL对应3号软件中断。本文给出宏定义NoInt为0x80,即它只控制I位。

#define NoInt0x80

void SWI_Exception(int SWI_Num, int *Regs) {

OS_TCB*ptcb;

switch(SWI_Num) {

case 0x02:

/*关中断函数OS_ENTER_CRITICAL()*/

__asm{

MRSR0, SPSR

ORRR0, R0, #NoInt

/*“或”操作,禁止IRQ中断*/

MSRSPSR_c, R0

}

OsEnterSum++;

break;

case 0x03:/* 开中断函数OS_EXIT_CRITICAL()*/

OsEnterSum;

if ((OsEnterSum&0x0000ffff) == 0) {

__asm {

MRSR0, SPSR

BICR0, R0, #NoInt

/* BIC位清除指令,将NoInt求反后按位

“与”R0*/

MSRSPSR_c, R0

}

}

break;

}

}

4 实现与测试

4.1 硬件方案

选择NXP(原Philips)公司的ARM芯片LPC2292作为微机保护测控装置的CPU,它主要具有以下特点:

◆ 256 KB片内Flash 程序存储器,128 位宽度接口/加速器实现高达60 MHz 的操作频率;

◆ 可外扩总线,外部8、16 或32 位总线(144 脚封装);

◆ 支持片内Boot 装载程序实现ISP 和IAP;

◆ 2 个互连的CAN 接口,带有先进的验收滤波器;

◆ 2 个32 位定时器(带4 路捕获和4 路比较通道);

◆ PWM 单元(6 路输出);

◆ 多个串行接口,包括2 个16C550 工业标准UART、高速I2C 接口(400 kHz)和2 个SPI 接口;

◆ 通过片内PLL 可实现最高为60 MHz 的 CPU 操作频率。

为了便于验证测试结果,本文选用LPC2292的PWM脉宽调制器,它具有一个带可编程32位预分频器的32位定时器/计数器,并支持双边沿控制的PWM输出,而PWM定时中断产生而引发的PWM输出不用CPU干预,电平翻转时间精确,可以利用该信号作为A/D采样间隔的测试信号。

采用100 MHz的逻辑分析仪检测PWM输出,可以实测到A/D采样中断间隔。

4.2 软件实现

对微机保护测控装置,采用每个工频周期(50 Hz)采样32点数据,即A/D采样间隔为625 ms。

本文在PWMInit函数中实现了对PWM定时器的初始化、对PWM输出引脚的配置,开放PWM定时中断。

//初始化PWM0,A/D采样FIQ中断

void PWMInit(void) {

PINSEL1 = (PINSEL1&0xFFFFF3FF) | 0x00000400;

//将LPC2292的P0.21引脚配置为功能脚PWM5

PWMPR=0x00;

//PWM预分频计数器

PWMMCR =0x0000003;

//PWM匹配控制寄存器。D0=1,PWMMR0中断允许;

//D1=1,PWMTC复位允许

PWMMR0=Fpclk*20/32/1000;

//设置PWM周期,即采样周期 32点采样,Fpclk为CPU

//的外设频率

PWMMR5=Fpclk*20/32/1000/2;

//PWM占空比,用于测试FIQ的响应时间,翻转是PWM

//周期的一半

PWMLER = 0x21;//PWM锁存使能寄存器

PWMPCR = 0x2000;

//PWM控制寄存器。D13=1,使能PWM5输出;D5=0,

//PWM5选择单边沿控制模式

PWMTCR = 0x09;

//D3=1,PWM模式使能; D0=1,PWM定时器计数器和

//PWM预分频使能计数

VICVectAddr = 0;

PWMIR = 0x000070F;//复位PWMMR0~PWMMR6中断

PWMTC = 0;//PWM定时器计数器清0

VICIntEnable = 1 << 8;//允许PWM0中断

}

软件还包括uC/OSII操作系统、A/D采样程序以及有关交流电量计算任务等程序。

在系统运行后,使用逻辑分析仪检测到: PWM输出脉宽最大为625.94 μs,最小为624.23 μs,定时误差在μs级,完全满足微机保护测控装置要求。逻辑分析仪检测波形如图2所示。

uC/OS-II和ARM系统应用中的精确定时

图2 逻辑分析仪检测波形

如果关中断将IRQ中断和FIQ中断都禁止,则检测PWM脉宽最大误差为18 μs,这会给测量精度带来很大误差。

5 结论

本文讨论使用ARM芯片、uC/OSII操作系统来实现微机保护测控装置的可能性,针对使用操作系统会带来A/D采样间隔时间不准的问题,给出了解决方案和验证结果。本技术已在微机保护装置上得到实际应用,交流量的测量精度取得很好的结果。

如果使用其他操作系统时遇到精确定时问题,也可参考本文的解决方案。

提醒:《uC/OS-II和ARM系统应用中的精确定时》最后刷新时间 2024-03-14 00:56:53,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《uC/OS-II和ARM系统应用中的精确定时》该内容的真实性请自行鉴别。