📄 tracer.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 + -