uC CPU port

来源:互联网 发布:网络攻防大赛 常见思路 编辑:程序博客网 时间:2024/06/06 03:57


cpu_core.c  :CPU相关初始化(时间戳,测量中断时间,CPUName),模拟CLZ(count leading zeros)指令,测量中断关闭时间方法等。
cpu_core.h :cpu_core.c的函数、变量声明。
cpu_def.h  :CPU模块使用的各种#define(大端小端字节序、堆栈的增长方向、Critical Section处理)
cpu.h  :CPU模块使用的类型定义、具体大端小端字节序、具体堆栈增长方向、具体Critical Section处理方法(CPU_CRITICAL_METHOD_STATUS_LOCAL,进入时需要在所所有的变量后面添加CPU_SR_ALLOC();)。
cpu_a.asm  :汇编方法实现CPU_IntDis、CPU_IntEn、CPU_SR_Save、CPU_SR_Restore、CPU_WaitForInt、CPU_WaitForInt、CPU_CntLeadZeros、CPU_CntTrailZeros)。
cpu_c.c  :针对特定CPU结构写的C函数BitBand、中断相关的操作)(在系统中没有用到...)。
cpu_cfg.h  :是否开启设置CPU_Name功能,是否开启CPU的时间戳功能,是否测量中断关闭时间、是否有CLZ指令的汇编实现


cpu_cfg.h

CPU_CFG_NAME_EN
是否开启设置CPU_Name功能,在Debug的时候可能会有用,DISABLED关闭。

CPU_CFG_TS_32_EN
是否开启CPU的时间戳功能  
Cortex M3 Debug Watch Trace(DWT) 包含一个32bit CPU cycle counter(CYCCNT) 频率为CPU的频率
需要在bsp.c中实现 CPU_TS_TmrInit()  CPU_TS_TmrRd() 

CPU_CFG_INT_DIS_MEAS_EN
是否测量中断关闭时间

CPU_CFG_INT_DIS_MEAS_OVRHD_NBR
通过多少次遍历得到测试中断关闭时间引入的额为开销,求平均时加入了1个Ts

CPU_CFG_LEAD_ZEROS_ASM_PRESENT
是否有CLZ指令的汇编实现(在cpu.h中也有定义)


cpu_core.c


CPU_INT08U  CPU_CntLeadZerosTbl[256]:
    计算0x00~0xFF之间值对应的前面的0的数量的数组  (0x**前面有多少个0 == CPU_CntLeadZerosTbl[0x**])  

void  CPU_Init (void):
    初始化CPU模块包括时间戳CPU_TS_Init、测量中断时间CPU_IntDisMeasInitCPU_NameInit

CPU_TS32  CPU_TS_Get32 (void)
    获取CPU时间戳,里面包含如果定时器长度<时间戳长度的累加处理。

CPU_DATA  CPU_CntLeadZeros** (CPU_DATA  val)
    模拟CLZ汇编指令的实现。通过将val分成若干个0xFF,分别通过CPU_CntLeadZerosTbl[0x**]计算前面的0的个数。

CPU_DATA  CPU_CntTrailZeros** (CPU_DATA  val)
    通过处理val,调用CPU_CntLeadZeros方法计算得到。
    val & ((CPU_DATA)~val+1) :val取反+1 与上val 得到的值只有一个1,1后面的0的个数为要得到的值,1前面的0的个数可以通过CPU_CntLeadZeros计算得到

static  void  CPU_TS_Init (void)
    调用在bsp中实现的CPU_TS_TmrInit();初始化时间戳DWT_CYCCNT,并设置时间戳的频率(与CPU频率相同)。

static  void  CPU_IntDisMeasInit (void):    
    通过CPU_CFG_INT_DIS_MEAS_OVRHD_NBR次遍历得到测试中断关闭时间引入的额为开销,求平均时加入了1个Ts

0 0
原创粉丝点击