【MPC5744P】S32DS中Processor Expert自動生成程式碼工具使用教程(一) 開發環境搭建
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在閃爍了。