思澈科技软件开发工具包  2.20
BUSMON

BUSMON(Bus Monitor )模块用于统计系统AHB总线上各个master和slave的传输行为。BUSMON共有8个通道,可以同时选出8组master或slave作为观察对象,统计每个观察对象分别在各自设定的地址空间内进行的读/写操作次数,并在统计值达到特定次数时产生触发信号输出至PTC模块。 BUSMON模块可以用来统计外接flash的分块访问频次,找到cache经常miss的区域进行优化;也可以查找RAM的特定地址是被谁改写;也可以用来观测memory的带宽占用情况。BUSMON与PTC结合,可以在访问特定地址空间时产生中断,或者在某个观察对象进行特定次数的总线操作时触发其他外设工作,构成总线-外设硬件任务链。 BUSMON不增加总线关键路径长度。

BUSMON主要特性: ● 8个独立配置的通道可同时工作
● 支持总线上所有master和slave
● 任意配置的总线地址空间
● 可统计读/写/读写总线操作
● 31位计数器,24位比较器
● 计数溢出可自动复位重新开始,溢出可查询
● 8个通道独立的PTC触发源

使用Bus Monitor

BUSMON_HandleTypeDef BusmonHandle;
volatile uint32_t temp;
volatile uint32_t * p;
// Initialize Bus Monitor
{
BusmonHandle.Init.Channel = 1; // Channel 1
BusmonHandle.Init.Flags = BUSMON_OPFLAG_READ; // Monitor read activity only
BusmonHandle.Init.SelFunc = HAL_BUSMON_HCPU_S; // Monitor HCPU BUS SLAVE
BusmonHandle.Init.Max = 0x60010000; // Max address range
BusmonHandle.Init.Min = 0x60000000; // Min address range
HAL_BUSMON_Init(&BusmonHandle); // Initialize the busmon
HAL_BUSMON_Enable(&BusmonHandle, 1); // Enable bus monitor
}
p=*(uint32_t*)0x60000000; // Read from PSRAM between 0x60000000-0x60010000 100 times
for (int i=0;i<100;i++) {
temp=*p;
p++;
}
HAL_BUSMON_GetCount(&BusmonHandle, (int32_t *)&temp); // temp is 100.
printf("Count=%d\n", temp);
BUSMON_InitTypeDef::Max
uint32_t Max
Definition: bf0_hal_busmon.h:194
HAL_BUSMON_Enable
HAL_StatusTypeDef HAL_BUSMON_Enable(BUSMON_HandleTypeDef *hbusmon, int enable)
Enable/disable Busmonitor.
BUSMON_HandleTypeDef
Definition: bf0_hal_busmon.h:203
BUSMON_InitTypeDef::Min
uint32_t Min
Definition: bf0_hal_busmon.h:193
BUSMON_HandleTypeDef::Init
BUSMON_InitTypeDef Init
Definition: bf0_hal_busmon.h:206
BUSMON_InitTypeDef::Flags
uint8_t Flags
Definition: bf0_hal_busmon.h:197
BUSMON_InitTypeDef::Channel
uint8_t Channel
Definition: bf0_hal_busmon.h:198
HAL_BUSMON_GetCount
HAL_StatusTypeDef HAL_BUSMON_GetCount(BUSMON_HandleTypeDef *hbusmon, int32_t *count)
Get Busmonitor count.
BUSMON_InitTypeDef::SelFunc
uint8_t SelFunc
Definition: bf0_hal_busmon.h:196
HAL_BUSMON_Init
HAL_StatusTypeDef HAL_BUSMON_Init(BUSMON_HandleTypeDef *hbusmon)
Initialize Busmonitor.