📜  外围总线时钟 pic32 - C 编程语言(1)

📅  最后修改于: 2023-12-03 14:51:40.050000             🧑  作者: Mango

外围总线时钟 PIC32 - C 编程语言

PIC32是一种微控制器,它支持外围总线时钟(Peripheral Bus Clock)。外围总线时钟是一种用于控制微控制器外围设备的时钟信号。该时钟信号可以使微控制器与其他外部设备进行同步和通信。

在PIC32中,使用系统配置寄存器(System Configuration Register)来设置外围总线时钟。下面是一段示例代码,展示如何设置外围总线时钟:

// 主时钟(Main Clock)频率
#define SYSCLK_FREQ 80000000

// 设置PBCLK2的预分频器值
// PBCLK2的频率为(SYSCLK_FREQ / 2) / 2
PB2DIVbits.PBDIV = 0x01;

// 设置PBCLK3的预分频器值
// PBCLK3的频率为(SYSCLK_FREQ / 2) / 1
PB3DIVbits.PBDIV = 0x00;

// 配置PBCLK2为40Mhz
PBCLK2CLR = 0xFFFFFFFF; // 清零
PBCLK2SET = _PBCLK2_DIV_2_MASK; // 除以2
PBCLK2SET = _PBCLK2_CLKSEL_MASK | _PBCLK2_CLKSEL_OSCPLL;  // 设置PBCLK2时钟源为OSC+PLL

// 配置PBCLK3为80Mhz
PBCLK3CLR = 0xFFFFFFFF; // 清零
PBCLK3SET = _PBCLK3_DIV_1_MASK; // 除以1
PBCLK3SET = _PBCLK3_CLKSEL_MASK | _PBCLK3_CLKSEL_SYSCLOCK; // 设置PBCLK3时钟源为SYSCLK

以上代码中,SYSCLK_FREQ表示主时钟的频率(单位为Hz),根据具体的应用可以进行修改。PBCLK2和PBCLK3是PIC32中的两个外围总线时钟,它们的频率可以使用PB2DIVbits.PBDIVPB3DIVbits.PBDIV设置预分频器的值,最终的频率由以下公式计算得出:

PBCLKx频率 = (SYSCLK_FREQ / 2) / 分频器的值

例如,以下代码片段将PBCLK2的预分频器设置为2,PBCLK3的预分频器设置为1,使PBCLK2的频率为40MHz,PBCLK3的频率为80MHz:

// 设置PBCLK2和PBCLK3的预分频器值
PB2DIVbits.PBDIV = 0x01; // PBCLK2的频率为(SYSCLK_FREQ / 2) / 2
PB3DIVbits.PBDIV = 0x00; // PBCLK3的频率为(SYSCLK_FREQ / 2) / 1

// 配置PBCLK2为40Mhz
PBCLK2CLR = 0xFFFFFFFF; // 清零
PBCLK2SET = _PBCLK2_DIV_2_MASK; // 除以2
PBCLK2SET = _PBCLK2_CLKSEL_MASK | _PBCLK2_CLKSEL_OSCPLL;  // 设置PBCLK2时钟源为OSC+PLL

// 配置PBCLK3为80Mhz
PBCLK3CLR = 0xFFFFFFFF; // 清零
PBCLK3SET = _PBCLK3_DIV_1_MASK; // 除以1
PBCLK3SET = _PBCLK3_CLKSEL_MASK | _PBCLK3_CLKSEL_SYSCLOCK; // 设置PBCLK3时钟源为SYSCLK

在以上代码片段中,使用了特定的宏(Macro)来设置PBCLK2和PBCLK3的频率,这些宏定义在p32mx****.h中,它们的名称如下:

  • _PBCLKx_DIV_n_MASK:该宏用于清零PBCLKx的预分频器寄存器。
  • _PBCLKx_CLKSEL_MASK:该宏用于清零PBCLKx的时钟选择寄存器。
  • _PBCLKx_CLKSEL_SYSCLK:该宏用于将PBCLKx的时钟源设置为SYSCLK。
  • _PBCLKx_CLKSEL_OSCPLL:该宏用于将PBCLKx的时钟源设置为OSC+PLL。

希望本文能够帮助你更好地了解PIC32中的外围总线时钟,并帮助你编写相应的代码。