📄 global.c
字号:
#define __GLOBAL
#include "global.h"
#undef __GLOBAL
//********************** Global Variable **********************
unsigned long timestamp;
unsigned long lastdec; // 上次所得计数值. 用于换算CPU运行时间.
int timer_load_val ; // 定时器装载值
//*************************************************************
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函数: 获取CPU的运行时间.
// 描述: 获取CPU自上次本操作后的运行时间(小于定时器周期).
//
// [参数表]
// t: 需要减去的时间值.
//
// 返回: CPU运行时间-t.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ulong get_timer(int t)
{
unsigned long now;
now = rTCNTO4; // 读出当前定时器计数值
if (lastdec >= now) // 根据上次所得计数值与本次所得计数值之间的大小关系换算出CPU运行时间
{
// normal mode
timestamp += lastdec - now;
}
else
{
// we have an overflow ...
timestamp += lastdec + timer_load_val - now;
}
lastdec = now; // 用本次采用的定时器计数值更新上次所得计数值
return timestamp-t;
}//get_timer()
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函数: 微秒延时.
// 描述: 延时tt微秒.
//
// [参数表]
// tt: 微秒数.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void udelay(unsigned long tt)
{
unsigned long tmo;
tmo = tt;
tmo *= (timer_load_val);
tmo /= 1000;
tmo += get_timer(0);
while (get_timer(0) < tmo) // 通过读取当前CPU的运行时间, 间接利用定时器延时.
/*NOP*/;
}//udelay()
// 4字节块拷贝
void memcpy_four(int *dst, int *scr, int len)
// 功能: 将源数据块的内容复制到目标存储区域中, 每次拷贝4字节.
// dst: 目标存储区始地址.
// scr: 源数据块始地址.
// len: 数据块长度(按字节算).
{
int i;
for(i=0; i<len/4; i++)
*dst++ = *scr++;
// 由于此处采用int型进行操作, 而len给出的是char型的数据长度, 所以要除以4
}//memcpy_four
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -