Fujitsu Easy Kit非常小巧精致,功能也很丰富,主要优势还是在于其低廉的价格,对于足以应付大多数一般应用。 拿到手之后先是查阅资料。然后配置各项参数。先后按照示例代码运行了点灯;时钟;PWM;..... 一切顺利。 具体的开发环境搭建,和各项基本功能代码论坛里面各位大大已经写的很清楚了。在这里就不再重复了。在这里主要给出Math_Api的用法,和系能测试。 一般用于AD转换的测量电路中会用到数字滤波的功能。这方面的工作一般由Dsp完成,为节约成本对要求不高的场合常用单片机资源进行的滤波运算。滤波运算的过程中难免用到大量的乘除法运算。而两数相乘就会出现溢出问题; Fujitsu的Math_api就是为了解决F²MC-8FX系列8位MCU乘除法运算位溢出问题,而开发的算法库。本文测试了其在算法的性能。 测试代码(在 halibote523 的基础上进行修改):
#include "mb95200.h"
#include "MATH_API.h"
unsigned int Systemtime;
/******************************************************************************
NAME: InitCompTimer();
FUNCTION: initial timer for the interval timer (Free run) function
******************************************************************************/
void InitCompTimer (void)
{
T01DR = 0x0f; // set count value (high 8 bit)
T00DR = 0xff ; // set count value (low 8 bit)
TMCR0 = 0x10; // 16-bit, no filtering
T00CR0 = 0x82; // interval timer in free run mode // enable IF flag interrupt
T00CR1 = 0xA1; // enable interrupt, enable output // start timer
}
/******************************************************************************
name: CompTimer ();
function: enter ISR while the counter value matches the pre-set value
******************************************************************************/
__interrupt void CompTimer (void)
{
T00CR1_IE = 0; // disable interrupt
T00CR1_IF = 0; // clear flag //... // interrupt service routine
Systemtime++;
T00CR1_IE = 1; // enable interrupt
}
/******************************************************************************
NAME: delay ();
FUNCTION: test Multiplication func time
******************************************************************************/
void delay(unsigned int delay)
{
unsigned long _t;
while(delay--)
{ //asm("\tNOP"); //_t = 0xff + delay;
_t = UCharMulUInt(0xff ,delay); //_t = 0xff * delay;
}
}
/******************************************************************************
NAME: main ();
FUNCTION: main loop
******************************************************************************/
void main (void)
{
InitCompTimer();
InitIrqLevels();
__EI();
while(1)
{
delay(0xffff);
}
}
分别测试 运行一次delay函数 加法、接使用乘法、和UCharMulUInt()(Math_Api提供的函数)时,系统产生时钟中断的次数(systemtime)。
测试结果如下:加法 0x2C (62)直接使用乘法 0x44 (98) UCharMulUInt() 0x94 (148) 由此可见,Math_Api在解决溢出的问题的同时也带来了近一倍的硬件资源的消耗。如果没有溢出可能的时候还是尽量少使用Math_Api。
附录: Fujitsu Math_api lib库的使用:下载链接 http://www.fujitsu.com/downloads/CN/fmc/MCU/mb95260/MCU-AN-500073-E14_Math_Lib.rar 应用文档(英文) http://www.fujitsu.com/downloads/CN/fmc/MCU/mb95260/MCU-AN-500073-E-14.pdf [img]http://uphotos.eepw.com.cn/zvvv/thumb/e0cfa1dde03297d711710fa78eb6d1d5.png[/img] [img]http://uphotos.eepw.com.cn/zvvv/thumb/590af5109f8b2ea8d0e9be916dd54297.png[/img] [img]http://uphotos.eepw.com.cn/zvvv/thumb/af88e1d91a0e6e7533733705940da851.png[/img] [img]http://uphotos.eepw.com.cn/zvvv/thumb/22051530702682018337084864f75eb9.png[/img] [img]http://uphotos.eepw.com.cn/zvvv/thumb/28c492084034dd905c33cd7f49c893e1.png[/img] [img]http://uphotos.eepw.com.cn/zvvv/thumb/1b5b0a5abea399dfce1809898e100c9a.png[/img]