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在閃爍了。