一、硬件介绍
1、产品特点
MAX78000FTHR 开发板集成卷积神经网络加速器,将ARM Cortex-M4处理器与浮点单元 (FPU)、卷积神经网络 (CNN) 加速器和 RISC-V 内核组合在一起,包括MAX20303 PMIC,用于电池和电源管理,兼容Adafruit Feather Wing外设扩展板。评估板包括各种外设,例如CMOS VGA图像传感器、数字麦克风、低功耗立体声音频CODEC、1MB QSPI SRAM、micro SD存储卡连接器、RGB指示LED和按键。

板载的MAX32625微控制器已预先编程有 DAPLink 固件,可通过 USB 对 MAX78000 Arm 内核进行调试和编程
标准10pin引脚JTAG接口,可调试和编程MAX78000的RISC-V内核
特性
双核:Arm Cortex-M4 FPU处理器,100MHz;RISC-V协处理器,60MHz
512KB闪存
128KB SRAM
16KB 缓存
卷积神经网络加速器
12位并行摄像头接口
MAX20303可穿戴PMIC,带电量计
Micro SD卡连接器
CMOS VGA图像传感器
低功耗、立体声音频编解码器
数字麦克风
系统框图

二、频率设置方法
系统初始化时钟默认为SystemCoreClock = 60Mhz,其中外设时钟PeripheralClock = SystemCoreClock / 2 = 30Mhz;
具体实现方法在 ..\MaximSDK\Libraries\CMSIS\Device\Maxim\MAX78000\Source
相关时钟源选择定义 (mxc_sys.h)
MXC_SYS_CLOCK_IPO = 100MHz 内部主振荡 (性能最高)
MXC_SYS_CLOCK_ISO = 60MHz 内部振荡(低功耗)
MXC_SYS_CLOCK_IBRO = 7.3728MHz
MXC_SYS_CLOCK_INRO = 30kHz 低速
MXC_SYS_CLOCK_ERTCO= 32.768kHz
MXC_SYS_CLOCK_EXTCLK = 外部输入(需实际提供 EXTCLK)
代码实现方法
#include "mxc_sys.h"
static void SetSystemClock(mxc_sys_clock_t src)
{
    // 使能目标时钟源
    MXC_SYS_ClockSourceEnable(src);
    
    // IPO 就绪位:MXC_F_GCR_CLKCTRL_IPO_RDY
    // ISO 就绪位:MXC_F_GCR_CLKCTRL_ISO_RDY
    // IBRO / INRO / ERTCO 可直接选择
    volatile uint32_t *clk = &MXC_GCR->clkctrl;
    if (src == MXC_SYS_CLOCK_IPO) {
        while(!(*clk & MXC_F_GCR_CLKCTRL_IPO_RDY)) {}
    } else if (src == MXC_SYS_CLOCK_ISO) {
        while(!(*clk & MXC_F_GCR_CLKCTRL_ISO_RDY)) {}
    }
    // 选择系统时钟
    MXC_SYS_Clock_Select(src);
    // 设置分频:0=不分频
    uint32_t reg = *clk;
    reg &= ~MXC_F_GCR_CLKCTRL_SYSCLK_DIV;  // 清除分频
    reg |= (0u << MXC_F_GCR_CLKCTRL_SYSCLK_DIV_POS); // 分频=0
    MXC_GCR->clkctrl = reg;
    // 更新
    SystemCoreClockUpdate();
}
int main(void)
{
    // 使能 IPO 100MHz
    SetSystemClock(MXC_SYS_CLOCK_IPO);
    printf("系统时钟频率 = %lu MHz, 外设时钟频率 = %lu MHz\n", SystemCoreClock / 1000000, PeripheralClock / 1000000);
    uint32_t sel = (MXC_GCR->clkctrl & MXC_F_GCR_CLKCTRL_SYSCLK_SEL) >> MXC_F_GCR_CLKCTRL_SYSCLK_SEL_POS;
    uint32_t div = (MXC_GCR->clkctrl & MXC_F_GCR_CLKCTRL_SYSCLK_DIV) >> MXC_F_GCR_CLKCTRL_SYSCLK_DIV_POS;
    
   //  具体含义详见mxc_sys.h (0:MXC_S_GCR_CLKCTRL_SYSCLK_DIV_DIV1  4:MXC_V_GCR_CLKCTRL_SYSCLK_SEL_IPO)
    printf("时钟选择模式 = %lu, 分频系数模式 = %lu\n", sel, div);
    while (1) {
    }
}
17
										
			
			
			
						
			
