ARM MCU has multiple bus structures. There are two types of Busses in ARM7 microcontroller – Advanced High-performance BUS (AHB) and VPB bus. AHB is a fast bus that is clocked directly by PLL and works simultaneously as the ARM core. So to the AHB bus, the ARM core, and Interrupt controller is directly connected while other peripherals are connected through the VPB divider. VPB divider can divide the speed of AHB by 1, 2, and 4. so this means if the VPB bus divider will be set to 4 and the CPI core speed will be 60MHz, then the MCU timer will run at speed 60/4=15MHz.
C code snippet of VPB speed setting:
#define PBSD 4
//define VPBDIV_VALUE needed to write to VPBDIV register
#define VPBDIV_VALUE (PBSD & 0x03)
//Write VPBDIV_VALUE to VPBDIV register to divide VHB frequency by PBSD:
VPBDIV = VPBDIV_VALUE;
When talking of buses wee need to mention that there is one more bus connected to AHB via MAM (Memory Accelerator Module); MAM is used to accelerate Flash memory as it can run at a maximum speed of 20MHz while the CPU core can run at like 80MHz. MAM is using some cashing technique to achieve flash memory speed equal to cores peed. This will be discussed later.