查看: 773|回复: 0

[评测分享] 【Avnet | NXP FRDM-MCXN947试用活动】+ 上手

[复制链接]
  • TA的每日心情
    慵懒
    2024-11-16 22:59
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2024-10-27 22:32:26 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 latera 于 2024-10-27 22:40 编辑

    5. 进一步了解
    5.1 N947
    为了进一步了解这个开发板的功能,我们先看一下这个芯片有什么神奇之处。下图为N947的框架图。
    1.jpg
    首先,应该注意到,虽然说它是2个M33,但其实应该一个是主核,一个是副核。主核是支持TrustZone,MPU,FPU,SIMD,DSP。主核应该是在上电自动启动的。而副核需要主核的程序执行相应的指令来启动(唤醒)。奇怪的是副核也是M33,应该也支持FPU,SIMD,DSP才对!!。
    再看一下右上方的“Connectivity”,这个MCU的USB是支持高速的,应该是内置高速PHY,而不用再外挂USB高速PHY芯片。
    另外3个比较有意思的“Acclerators”,“Advanced motor control” 和 “HMI”。从这些功能上看,应该这个MCU侧重在工业控制上的使用,如电机控制,PLC。
    还有的就是“Security”这一块,这块应该属于cortex M33共有的特性。


    5.2 开发板电路
    看完MCU的大致框架,我们来看一下,这个开发板硬件设计是怎样的。下图为FRDM-MCXN947开发板的框图。

    2.jpg
    第一步先关心一下整个的供电系统,下图为参考手册提供的一种供电方式,也是开发板默认的供电方式。N947主要的供电有三个:VDD_DCDC,VDD_SYS,VDD_CORE,分别经过内部的LDO_CORE,DCDC_CORE,LDO_SYS输出相应的电压,并供给内部模块,和输出到外接引脚。而实际给N947的外部供电只需要3.3V。并且3.3V供给DCDC_CORE后,DCDC_LX最终会通过外部电路供给VDD_CORE。另外还有其他的供电电压,如VDD_ANA,VDD_P0 ~ P4。这些后面再说。而VDD_CORE就是最重要的供电电压。

    3..jpg
    下图为开发板供电电路,首先,可以通过调试器的USB,或者HS-USB供给5V电压,再通过XC6227转换为3.3V(P3V3_MCU)。P3V3_MCU为MCU主要的供电。
    4.jpg
    实物中,右下方的绿灯和跳线帽,分别对应上图的D5 和 J24。(J24拆掉,MCU就断电了) 5.jpg
    开发板中,使用P3V3_MCU供给内部DCDC,再顺着DCDC_LX ---> DCDC_VDD_CORE ---> VDD_LDO_CORE_IN 和 DCDC_VDD_CORE,最后进入到VDD_LDO_CORE和VDD_CORE1/2。
    另外VDD_LDO_SYS_IN也由3.3V供电,VDD_SYS实际外围电路并没有其他东西。
    6.jpg
    以上是开发板的默认供电方式,通过修改电阻的接法,可以修改为不使用内部DCDC_CORE,而直接使用内部LDO_CORE。这2个区别应该是DCDC的效率更高,但外围电路复杂一点(我看就多个DCDC_Inductor电感)。LDO的方式外围电路的成本更低。
    另外,再看一下,N947的外接晶振和复位电路
    外部晶振为24MHZ,(另外还有一个32.768KHZ晶振)
    7.jpg
    复位电路就是一个简单的RC电路加一个复位按键,复位按键位于开发板左上角,调试器USB口旁边。
    8.jpg

    6. Hello world 代码分析
    通过开发板的设计了解了N947的硬件设计后,我们再通过Hello World的样例来了解一下N947的软件方面的知识。
    先看Hello World工程整个文件结构
    9.jpg


    以下为各个文件夹的大致内容或作用
    doc:就是这个工程的主要用途,和测试方法
    startup:主要就是启动文件,下文会分析一下N947的主核启动。
    drivers:外设驱动,NXP给gpio,串口等外设写好的驱动文件,文件名格式为fsl_xxx.c/fsl_xxx.h
    device:SOC级别的文件,如N947内核和外设的寄存器定义,主要为drivers中的文件提供寄存器操作使用。
    board:根据开发板外围基本电路,如串口,晶振,gpio口,编写的基本功能的源文件。给开发板使用者提供便利。
    utilities:方便调试的小功能
    component:组件,NXP根据N947外设编写的一些高级一点,通用性高点的驱动,或是软件层面的一些组件,如链表等。
    CMSIS:中间件,内核相关的,暂时不关注。
    source:应用程序main,和自己编写的应用代码。


    那N947是如何启动的?
    其实和其他cortex M系列的芯片启动方式方式差不多。打开startup_mcxn947_cm33_core0.c。可以看到ResetISR这个函数,N947启动后首先就是跳到这个函数开始执行代码的。大致步骤为
    关闭中断
    设置中断向量表
    设置栈位置
    跳到SystemInit,设置内部时钟
    搬运全局数据,包括有初始值数据和未初始化数值(.bss)
    跳转到__main,内部会初始化libc库,再跳到主程序的main()函数。
    10.jpg
    而在主程序中各种BOARD_xxx()函数。
    11.jpg
    BOARD_xxx(),相关的函数都在board.c中,其中BOARD_InitBootClocks()其实和SystemInit功能一样,重新根据板载的设计,设置内部的电压和时钟。
    BOARD_InitDebugConsole经过几个套壳方法,设置初始化lpuart4,
    BOARD_InitDebugConsole
        DbgConsole_Init
           HAL_UartInit
              HAL_UartInitCommon
                 LPUART_Init

    uart4在board.h中定义
    12.jpg
    板子上对应接的是P1_8和P1_9

    13.jpg 14.jpg
    P1_8、P1_9 这2个IO口的复用功能如下:其中FC4_Px的意思应该是FLEXCOMM4,就是lpuart4。奇怪的是在程序并没有使用PORT_SetPinMux()函数来设置IO口的复用功能。

    15.jpg
    7. 加入LED 闪烁

    开发板上对应为P0_10,P0_27,P1_2分别控制红,绿,蓝led。
    16.jpg
    在main中增加如下函数,大致功能为
    使能GPIO0、GPIO1时钟,
    初始化3个GPIO,
    设置systick的中断时间,可以在systick的中断函数中翻转GPIO。

    17.jpg
    翻转GPIO操作如下:
    18.jpg
    上面各个led函数定义其实是在board.h中:
    19.jpg
    编译,调试。就能看到开发板上的MCU上方的三色灯在闪烁。
    20.jpg
    现在大概了解N947的开发方法了。




    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /5 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-12-24 02:42 , Processed in 0.114512 second(s), 16 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.