【MPC5744P】S32DS中Processor Expert自动生成代码工具使用教程(一) 开发环境搭建

版权声明:本文为博主原创文章,转载注明出处 https://blog.csdn.net/u010875635/article/details/84846465

MPC5744P是NXP近几年推出来的主打安全功能的双核MCU,非常适合在汽车控制器相关产品中使用,非常强大。但是强大的同时,也意味着开发难度增大。

MPC5744P外设功能相关的寄存器非常之多,且对应的参考教程非常少,像STM32之类的工业MCU开发难度根本无法与之相比,早期只能依据官方参考手册上寄存器的描述来配置外设,而官方英文原版参考手册超过三千页,且寄存器之间的相关关联描述语焉不详,学习耗时很长。

幸运的是,在其它各家推出GUI配置工具(ST的CubeMX、Microchip的MCC和Harmony)之后,NXP也在Eclipse中集成了Processor Expert配置工具,可以很方便的配置外设,然后自动生成代码。

可惜的是,官方原版没有找到S32 Design Studio For Power Architecture相关的Processor Expert的教程。经过多日摸索,逐渐找到一些思路。

本节先开始搭建开发环境。

一、下载软件

首先,我们从NXP官方网站下载S32 Design Studio for Power Architecture 2017.R1以上版本以及包含MPC574X SDK的更新包。

二、安装软件

先安装软件,安装时需要联网以及激活码,激活码在你的NXP账号里可以找到,免费的。

三、安装更新

软件安装完毕之后,需要安装更新的SDK,打开刚刚安装好的S32DS 2017,然后选择Help->Install New Software->Add->Archive,选择下载的更新包进行安装。安装时间会非常长,视电脑配置而言,一般笔记本可能需要一个小时左右。

 

四、新建项目

新建一个S32SD项目,名称为led_test,芯片选择MPC5744P,SDK选择最新版本,注意不要选择FreeMaster,当前版本自动配置有些问题,我们后面手动配置。若是以后有更新,大家可以添加FreeMaster自动配置试试。

 

五、Processor Expert配置

新建项目完毕,我们会在项目最底下看到ProcessorExpert.pe文件,在菜单栏显示Processor Expert,可以看到配置项,系统自动将核心配置已经添加进去了。

由于刚刚接触Processor Expert,为了避免出现错误,我们使用默认的时钟即可。选择pin_mux:PinSettings我们来设置GPIO,来点亮led。假设我们LED为PC11,低电平亮。选择pin_mux:PinSettings,然后选中Component Inspector - pin_mux界面,设置引脚功能为GPIO,初始值为High。

设置完毕后保存,再在Project中选择Generate Processor Expert Code,此时,所有驱动代码生成完毕。

 

六、使用自动生成的代码

自动生成了代码不意味着就可以直接编译下载了,生成的只是驱动代码而已,还需要我们去引用。

Processor Expert的自动生成代码思路为:将所有外设的配置变成数组,生成时变化的只是数组,我们可以查看Generated_Code文件夹里面的.c/.h文件,全是配置文件数组。而需要传入这些数据的函数都存于SDK中,

例如我们要初始化时钟。调用clock_MPC57xx.h和cloclMan1.h中的函数和参数即可。设置pin脚也是这样。

我们初始化时钟和引脚,然后延时亮灭led。注意这里led的函数中操作pin和pins是不同的,pin直接写引脚号即可,pins是操作多个引脚,采用的是位控,例如PC11,pin操作:PINS_DRV_WritePin(PTC, 11);,pins操作:PINS_DRV_TogglePins(PTC, (1 << 11));

main.c代码示例:

/*
 * Copyright (c) 2013 - 2015, Freescale Semiconductor, Inc.
 * Copyright 2016-2017 NXP
 * All rights reserved.
 *
 * THIS SOFTWARE IS PROVIDED BY NXP "AS IS" AND ANY EXPRESSED OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL NXP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 * THE POSSIBILITY OF SUCH DAMAGE.
 */
/* ###################################################################
**     Filename    : main.c
**     Processor   : MPC574xP
**     Abstract    :
**         Main module.
**         This module contains user's application code.
**     Settings    :
**     Contents    :
**         No public methods
**
** ###################################################################*/
/*!
** @file main.c
** @version 01.00
** @brief
**         Main module.
**         This module contains user's application code.
*/
/*!
**  @addtogroup main_module main module documentation
**  @{
*/
/* MODULE main */


/* Including necessary module. Cpu.h contains other modules needed for compiling.*/
#include "Cpu.h"

  volatile int exit_code = 0;
/* User includes (#include below this line is not maintained by Processor Expert) */

/*!
  \brief The main function for the project.
  \details The startup initialization sequence is the following:
 * - startup asm routine
 * - main()
*/

uint32_t count=0;
int main(void)
{
  /* Write your local variable definition here */

  /*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
  #ifdef PEX_RTOS_INIT
    PEX_RTOS_INIT();                   /* Initialization of the selected RTOS. Macro is defined by the RTOS component. */
  #endif
  /*** End of Processor Expert internal initialization.                    ***/

  /* Write your code here */
  /* For example: for(;;) { } */
    /* Initialize clock gate*/
	CLOCK_SYS_Init(g_clockManConfigsArr,   CLOCK_MANAGER_CONFIG_CNT,
				   g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT);
	CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_AGREEMENT);
	/* Initialize and configure pins */
	PINS_DRV_Init(NUM_OF_CONFIGURED_PINS, g_pin_mux_InitConfigArr);

    for(;;)
    {
    	count++;
    	if(count>800000)
    	{
    		count=0;
    		PINS_DRV_TogglePins(PTC, (1 << 11));
    		//PINS_DRV_WritePin(PTC, 11);
    	}
    }

  /*** Don't write any code pass this line, or it will be deleted during code generation. ***/
  /*** RTOS startup code. Macro PEX_RTOS_START is defined by the RTOS component. DON'T MODIFY THIS CODE!!! ***/
  #ifdef PEX_RTOS_START
    PEX_RTOS_START();                  /* Startup of the selected RTOS. Macro is defined by the RTOS component. */
  #endif
  /*** End of RTOS startup code.  ***/
  /*** Processor Expert end of main routine. DON'T MODIFY THIS CODE!!! ***/
  for(;;) {
    if(exit_code != 0) {
      break;
    }
  }
  return exit_code;
  /*** Processor Expert end of main routine. DON'T WRITE CODE BELOW!!! ***/
} /*** End of main routine. DO NOT MODIFY THIS TEXT!!! ***/

/* END main */
/*!
** @}
*/
/*
** ###################################################################
**
**     This file was created by Processor Expert 10.1 [05.21]
**     for the NXP C55 series of microcontrollers.
**
** ###################################################################
*/

 

七、编译下载

注意下载时,选择的要是编译的同一个Interface,Debug就选Debug,而Debug_RAM则要选Debug_RAM。

注意选择你的调试器。

下载完毕,即可看到led在闪烁了。

 

 

猜你喜欢

转载自blog.csdn.net/u010875635/article/details/84846465