一、硬件介绍
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) { } }