⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tracer.c

📁 realview下的一个arm9的bootloader烧录器.支持norflash读写
💻 C
字号:
/*******************************************************************************
 * Copyright Statement:
 * --------------------
 * This software is protected by Copyright and the information contained herein
 * is confidential.  The software may not be copied and the information
 * contained herein may not be used or disclosed except with the written
 * permission of Infomax Corp.
 *
 * MODULE NAME:  
 * DESCRIPTION:  API function for tracer manipulation
 * AUTHOR:       Bo-Hung Wu
 * BEGIN DATE:   Oct. 18, 2007      
 * LAST MODIFICATION: 
 *****************************************************************************/

/* Include */
#include "magic_reg_defs.h"
#include "tracer.h"

/* Constant/Marco */
#define TACER_ENABLE_BIT 0x1
#define TACER_TIME_STAMP_WRAP_AROUND_ENABLE_BIT 0x1
#define TACER_ADDRESS_SET_ENABLE_BIT 0x1
//#define ARM_TRACER_ADDRESS_SET_INDIVIDUAL_FEATURE_REG(ID) ARM_TRACER_ADDRESS_SET_##ID_INDIVIDUAL_FEATURE_REG
#define ARM_TRACER_ADDRESS_SET_INDIVIDUAL_FEATURE_REG(ID) ARM_TRACER_ADDRESS_INDIVIDUAL_FEATURE_REG_SET_##ID


/* Structure/Union/Enum/Typedef */

/* Local function prototype */

/* Global/Local variables */

volatile UINT32 *arm_tracer_address_set_individual_feature_reg_array[] = 
{    ARM_TRACER_ADDRESS_SET_0_INDIVIDUAL_FEATURE_REG,    ARM_TRACER_ADDRESS_SET_1_INDIVIDUAL_FEATURE_REG,    ARM_TRACER_ADDRESS_SET_2_INDIVIDUAL_FEATURE_REG,    ARM_TRACER_ADDRESS_SET_3_INDIVIDUAL_FEATURE_REG,
    ARM_TRACER_ADDRESS_SET_4_INDIVIDUAL_FEATURE_REG,    ARM_TRACER_ADDRESS_SET_5_INDIVIDUAL_FEATURE_REG,    ARM_TRACER_ADDRESS_SET_6_INDIVIDUAL_FEATURE_REG,    ARM_TRACER_ADDRESS_SET_7_INDIVIDUAL_FEATURE_REG
};volatile UINT32 *arm_tracer_address_set_operation_mode_reg_array[] = 
{    ARM_TRACER_ADDRESS_SET_0_OPERATION_MODE_REG,    ARM_TRACER_ADDRESS_SET_1_OPERATION_MODE_REG,    ARM_TRACER_ADDRESS_SET_2_OPERATION_MODE_REG,    ARM_TRACER_ADDRESS_SET_3_OPERATION_MODE_REG,    ARM_TRACER_ADDRESS_SET_4_OPERATION_MODE_REG,    ARM_TRACER_ADDRESS_SET_5_OPERATION_MODE_REG,    ARM_TRACER_ADDRESS_SET_6_OPERATION_MODE_REG,    ARM_TRACER_ADDRESS_SET_7_OPERATION_MODE_REG};volatile UINT32 *arm_tracer_address_set_compare_reg_array[] = 
{    ARM_TRACER_ADDRESS_SET_0_COMPARE_REG,    ARM_TRACER_ADDRESS_SET_1_COMPARE_REG,    ARM_TRACER_ADDRESS_SET_2_COMPARE_REG,    ARM_TRACER_ADDRESS_SET_3_COMPARE_REG,    ARM_TRACER_ADDRESS_SET_4_COMPARE_REG,    ARM_TRACER_ADDRESS_SET_5_COMPARE_REG,    ARM_TRACER_ADDRESS_SET_6_COMPARE_REG,    ARM_TRACER_ADDRESS_SET_7_COMPARE_REG};volatile UINT32 *arm_tracer_address_set_mask_reg_array[] = 
{    ARM_TRACER_ADDRESS_SET_0_MASK_REG,    ARM_TRACER_ADDRESS_SET_1_MASK_REG,    ARM_TRACER_ADDRESS_SET_2_MASK_REG,    ARM_TRACER_ADDRESS_SET_3_MASK_REG,    ARM_TRACER_ADDRESS_SET_4_MASK_REG,    ARM_TRACER_ADDRESS_SET_5_MASK_REG,    ARM_TRACER_ADDRESS_SET_6_MASK_REG,    ARM_TRACER_ADDRESS_SET_7_MASK_REG};
/* Function implementation */

/**
 @Desc
    Description for function_name
 @Param parameter 1
    Put parameter 1 description here
 @Param parameter 2
    Put parameter 2 description here
 @Return    Return value 1 and it description 
 @Return    Return value 1 and it description 
*/
void tracer_enable(void)
{
    *ARM_TRACER_ENABLE_REG |= TACER_ENABLE_BIT;
}

void tracer_disable(void)
{
    *ARM_TRACER_ENABLE_REG &= ~TACER_ENABLE_BIT;
}

void tracer_init(tracer_init_conf_data_T *tracer_init_conf_data_param_P)
{
    *ARM_TRACER_TIME_STAMP_REG = tracer_init_conf_data_param_P->timestamp_resolution;
    
    /* Disable wrap around report by default */
    tracer_disable_wrap_around_report();
}

void tracer_enable_wrap_around_report(void)
{
    *ARM_TRACER_WRAP_AROUND_ENABLE_REG |= TACER_TIME_STAMP_WRAP_AROUND_ENABLE_BIT;
}

void tracer_disable_wrap_around_report(void)
{
    *ARM_TRACER_WRAP_AROUND_ENABLE_REG &= ~TACER_TIME_STAMP_WRAP_AROUND_ENABLE_BIT;
}

void tracer_send_software_report(UINT32 sw_id_param)
{
    *ARM_TRACER_SOFTWARE_ID_REG = sw_id_param;
}

void tracer_configure_int_report(UINT32 intr_mask_param)
{
    *ARM_TRACER_SELECT_INTERRUPT_REG = intr_mask_param;
}

void tracer_configure_address_trigger_report(UINT8 address_set_report_id_param, tracer_address_report_conf_data_T *tracer_address_report_conf_data_param)
{
    *(arm_tracer_address_set_operation_mode_reg_array[address_set_report_id_param]) = tracer_address_report_conf_data_param->operation_mode;
    *(arm_tracer_address_set_compare_reg_array[address_set_report_id_param])        = tracer_address_report_conf_data_param->address_set;    *(arm_tracer_address_set_mask_reg_array[address_set_report_id_param])           = tracer_address_report_conf_data_param->address_set_mask;
}

void tracer_enable_address_trigger_report(UINT8 address_set_report_id_param)
{
   *(arm_tracer_address_set_individual_feature_reg_array[address_set_report_id_param]) |= TACER_ADDRESS_SET_ENABLE_BIT;
}

void tracer_disable_address_trigger_report(UINT8 address_set_report_id_param)
{
    *(arm_tracer_address_set_individual_feature_reg_array[address_set_report_id_param]) &= ~TACER_ADDRESS_SET_ENABLE_BIT;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -