基于eTPU技术的信号处理模块的设计与实现
2014-11-10华金
华 金
(上海船舶运输科学研究所,上海200135)
0 引 言
目前,对于实时嵌入式系统中运行的控制器,更加注重其精确而快速的定时功能。频繁地中断服务程序将占据大部分中央处理器(Central Processing Unit,CPU)开销,削弱执行高速实时性任务的能力。为此,飞思卡尔将增强型时间处理单元模块(Enhanced Ti me Processing Unit,e TPU)作为其32位处理器的一部分,与主CPU并行运行,执行复杂的时序和输入/输出(Input/Output,I/O)管理。在CPU系统初始化过程中,对e TPU外设模块做相关设置即可自动产生或测量信号,无需CPU的干预,从而减轻CPU的工作负荷。以脉冲宽度调制功能(Pulse Width Modulation,PWM)和频率脉冲测量(Frequency of Pluse Measures,FPM)功能为例,设计与实现一般I/O信号处理模块的过程。
1 e TPU硬件结构
e TPU模块包含了运行需要的所有微控制器:共享代码存储器、共享数据存储器、微引擎、任务调度器以及32条I/O通道(见图1)。
各控制器的主要功能特点有:2个24位全局时钟计数寄存器TCR1和TCR2,为通道匹配和捕获提供基准参考;32个独立通道,每个通道有2个相互作用的事件集寄存器Action Unit A和Action Unit B,每个事件寄存器可设置为匹配寄存器、捕获寄存器、大于或等于比较寄存器,结构见图2;CPU接口模块,允许CPU控制e TPU操作,如初始化e TPU通道、提出服务请求和中断响应入口地址;共享数据存储器(Shared Pa-rameter RA M,SPRA M),可以被CPU和e TPU共同进行读写操作,是传递e TPU数据参数的平台;共享代码存储器(Shared Code Memor y,SCM),主要用于e TPU代码的存储;任务调度器,主要根据分配的优先级(高、中、低)和通道标记,决策所有通道的服务顺序,确保所有提出服务请求的通道被响应。
图1 eTPU硬件框图
图2 双动作通道结构
2 功能设计与实现
e TPU功能可涵盖所有重要应用领域,如I/O信号处理PWM、FPM等;通信接口功能UART、SPI、I2C等;以及在电机控制和汽车引擎,燃油喷射控制等。以PWM、FPM功能为例,阐述其设计与实现过程。
e TPU功能开发涉及两方面。
1.e TPU的主机接口(API)函数的开发,作为CPU和e TPU的交互控制。
2.e TPU固件代码,利用第三方软件编译器(如ByteCraft),生成的代码文件通过API函数写入共享代码存储器中。
2.1 PWM 功 能
通过CPU设置频率和占空比,产生0~100%PWM波形,可用于工业应用领域,如实现电机控制、调光等。
主机接口API函数
CPU调用主机接口函数fs_etpu_p w m_init(),产生服务请求(Host Ser vice Request,HSR),e TPU代码进入S0线程,管脚低电平输出,设置Action Unit A和Action Unit B的参考时钟及匹配时电平变化。等待Action Unit A产生匹配进入S1线程,管脚变高电平并配置下一次Action Unit A匹配时间点。同理,等待Action Unit B产生匹配进入S2线程,管脚变低电平并配置下一次Action Unit B匹配时间点。如果产生异常,进入S3线程进行处理。应用过程中可调用主机接口函数fs_et pu_p w m_update(),通过修改参数Period和Active Ti me的数值,实现不同频段的PWM输出。
2.2 FPM 功能
采用等精度的多周期同步测频原理,在特定时间窗口内对被测脉冲计数。通过计算,得出被测脉冲频率,可用于测量高精度要求的转速。
主机接口API函数
/*FPM初始化,设置测量时间窗口 * /
uint32 fs_etpu_f p m_init(uint8 channel,uint8 pri,uint32 window_size);
/* 修 改测量时间窗口 * /
uint32 fs_etpu_f p m_update_window_size(uint8 channel,uint32 windo w);
/* 获 取被测频率 * /
uint32 fs_etpu_f p m_get_freq(uint8 channel,uint32*freq);
e TPU固件代码
void FPM(Window,Edge Count,TCRCounts)
CPU调用主机接口函数fs_etpu_f p m_init(),产生HSR,e TPU代码进入S0线程,设置管脚为输入模式上升沿触发,设置Action Unit A参考时钟及匹配时电平无变化,置位flag0。待第一个上升沿信号触发进入S2线程,记录Ti meStart=ert A(捕获寄存器)和Acc Egde Count=0,开启测量时间窗口并复位flag0。在时间窗口未匹配之前,每次上升沿信号触发进入S3线程,记录上升沿时刻Ti meCurrent=ert A和Acc Egde Count++。最后,时间窗口匹配时进入S4线程,计算标准时钟个数TCRCounts与被测频率个数Egde-Count,赋值Acc EgdeCount=0和Ti meStart=Ti meCurrent,并产生1个中断,让CPU调用主机接口函数fs_etpu_f p m_get_freq()来获取被测频率,接着进入下一时间窗口测量周期。此外,CPU可以调用主机接口函数fs_etpu_f p m_update_window_size()产生服务请求进入S1线程,通过修改参数 Window数值测量时间窗口大小。
3 仿真与试验
e TPU的功能设计由ByteCraft C软件完成,结合ASH WARE仿真套件进行相关验证。图3为仿真验证图,提供了丰富的调试窗口,如查看变量和跟踪寄存器。
图3 仿真验证图
e TPU命令脚本文件中,设置CPU工作频率为100 MHz,CPU时钟的2分频分配给TCR1,e TPU引脚4、引脚5分别被定义为PWM和FPM功能。内部寄存器写入PWM周期及高电平保持时间,输出波形如PWMChannel所示,计算结果T=0x1000/50=81.92 us符合仿真结果Delta Cursor=081.914u S。
e TPU测试向量脚本文件中,定义变量state hi 1和state lo 0,激励基准波形频率为1 MHz,输出波形为如FPMChannel所示(hi 60 l o 40),理论频率计算为10 000 Hz。在某段时间窗口内,通过查看仿真后变量Edge Count=3,Elapsed TCRCount=15 000,计算结果
符合预期测量频率结果。
在Code Warrior开发环境下,初始化fs_et pu_init()、fs_etpu_p w m_init()、fs_etpu_f p m_init()等主机接口函数,PWM输出波形观察示波器及信号发生器产生激励用于测量频率,试验结果与理论预期完全吻合。
4 结 语
基于e TPU技术实现PWM和FPM等功能模块的简单的I/O信号处理,有效降低主CPU的负载,避免因中断风暴而导致系统瘫痪。经过测试验证,误差较小,符合高精度的条件,最多能实现32路通道以满足实际多路信号处理的要求。
[1] Munir Bannoura.e TPU Programming Made Easy[M].USA:A MT Publishing,2004.
[2] Enhanced Ti me Processing Unit(e TPU)Preliminary Reference Manual[EB/OL].[2004-05].http://www.freescale.co m.
[3] Freescale Cor p MPC5634 M Microcontroller Reference Manual[EB/OL].[2012-09-04].http://www.freescale.co m.