; --------------------------------------------------------------------------------
; @Title: Example script for programming of MPC5746R (Rainier) internal flash.
;
; @Description:
; Script arguments:
;
;   DO mpc574xr [PREPAREONLY] [SKIPCONFIG]
;
;     PREPAREONLY only declares flash but does not execute flash programming
;     SKIPCONFIG  skip configuration part to allow script external configuration
;
; Example:
;
;   DO ~~/demo/powerpc/flash/mpc574xr PREPAREONLY SKIPCONFIG
;
; @Author: rweiss
; @Chip: MPC5746R MPC5745R MPC5743R
; @Copyright: (C) 1989-2014 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Rev: 3346 $
; $Id: mpc574xr.cmm 3346 2015-07-23 14:55:34Z rweiss $
;


  LOCAL &parameters &param_prepareonly &param_skipconfig
  ENTRY %LINE &parameters
  &param_prepareonly=(STRing.SCAN(STRing.UPpeR("&parameters"),"PREPAREONLY",0)!=-1)
  &param_skipconfig=(STRing.SCAN(STRing.UPpeR("&parameters"),"SKIPCONFIG",0)!=-1)

  LOCAL &DualPort
  IF VERSION.BUILD.BASE()>=45520.
    &DualPort="/DualPort"

; --------------------------------------------------------------------------------
; CPU setup

  IF !&param_skipconfig
  (
    SYStem.RESet
    SYStem.BdmClock 4.0MHz
    SYStem.DETECT.CPU
    SYStem.CONFIG.CORE 2. 1. ; core_1
    SYStem.CONFIG.Slave OFF
    SYStem.Option.WATCHDOG OFF
    SYStem.Up

    ; Initialize internal SRAM (only partially used)
    Data.Set EA:0x40000000--0x4000FFFF %Quad 0
  )

; --------------------------------------------------------------------------------
; Flash declaration

  FLASH.RESet

  ; Low address space
  FLASH.Create 1. 0x00404000--0x00407FFF NOP    Quad 0x0000 /INFO "BAF (read only)"
  FLASH.Create 1. 0x00FA0000--0x00FA3FFF TARGET Quad 0x0001
  FLASH.Create 1. 0x00FA4000--0x00FA7FFF TARGET Quad 0x0002
  FLASH.Create 1. 0x00FA8000--0x00FABFFF TARGET Quad 0x0003
  FLASH.Create 1. 0x00FAC000--0x00FAFFFF TARGET Quad 0x0004
  FLASH.Create 1. 0x00F9C000--0x00F9FFFF TARGET Quad 0x0005
  FLASH.Create 1. 0x00FB0000--0x00FB7FFF TARGET Quad 0x0006
  FLASH.Create 1. 0x00FB8000--0x00FBFFFF TARGET Quad 0x0007
  FLASH.Create 1. 0x00FC0000--0x00FCFFFF TARGET Quad 0x0008
  FLASH.Create 1. 0x00FD0000--0x00FDFFFF TARGET Quad 0x0009
  FLASH.Create 1. 0x00FE0000--0x00FEFFFF TARGET Quad 0x000A
  FLASH.Create 1. 0x00FF0000--0x00FFFFFF TARGET Quad 0x000B
  ; Mid address space
  FLASH.Create 2. 0x00800000--0x00803FFF TARGET Quad 0x0100
  FLASH.Create 2. 0x00804000--0x00807FFF TARGET Quad 0x0101
  FLASH.Create 2. 0x00808000--0x0080BFFF TARGET Quad 0x0102
  FLASH.Create 2. 0x0080C000--0x0080FFFF TARGET Quad 0x0103
  FLASH.Create 2. 0x00810000--0x00813FFF TARGET Quad 0x0104
  FLASH.Create 2. 0x00814000--0x00817FFF TARGET Quad 0x0105
  FLASH.Create 2. 0x00818000--0x0081BFFF TARGET Quad 0x0106
  FLASH.Create 2. 0x0081C000--0x0081FFFF TARGET Quad 0x0107
  FLASH.Create 2. 0x00820000--0x0082FFFF TARGET Quad 0x0108
  FLASH.Create 2. 0x00830000--0x0083FFFF TARGET Quad 0x0109
  ; 256k address space
  FLASH.Create 4. 0x01000000--0x0103FFFF TARGET Quad 0x0300
  FLASH.Create 4. 0x01040000--0x0107FFFF TARGET Quad 0x0301
  FLASH.Create 4. 0x01080000--0x010BFFFF TARGET Quad 0x0302
  FLASH.Create 4. 0x010C0000--0x010FFFFF TARGET Quad 0x0307
  FLASH.Create 4. 0x01100000--0x0113FFFF TARGET Quad 0x0308
  FLASH.Create 4. 0x01140000--0x0117FFFF TARGET Quad 0x0309
  IF CPUIS(MPC5745R)||CPUIS(MPC5746R)
  (
    FLASH.Create 4. 0x01180000--0x011BFFFF TARGET Quad 0x0303
    FLASH.Create 4. 0x011C0000--0x011FFFFF TARGET Quad 0x0304
    FLASH.Create 4. 0x01200000--0x0123FFFF TARGET Quad 0x0305
    FLASH.Create 4. 0x01240000--0x0127FFFF TARGET Quad 0x0306
  )
  IF CPUIS(MPC5746R)
  (
    FLASH.Create 4. 0x01280000--0x012BFFFF TARGET Quad 0x030a
    FLASH.Create 4. 0x012C0000--0x012FFFFF TARGET Quad 0x030b
    FLASH.Create 4. 0x01300000--0x0133FFFF TARGET Quad 0x030c
    FLASH.Create 4. 0x01340000--0x0137FFFF TARGET Quad 0x030d
  )
  ; UTEST address space
  FLASH.Create 6. 0x00400000--0x00403FFF TARGET Quad 0x0500 /OTP /INFO "UTEST"

  ; Overlay enabled mapping
  FLASH.CreateALIAS 0x08A00000--0x08FFFFFF 0x00A00000   ; Small & medium flash blocks
  FLASH.CreateALIAS 0x09000000--0x09FFFFFF 0x01000000   ; Large flash blocks

  FLASH.TARGET E:0x40000000 E:0x40002000 0x4000 ~~/demo/powerpc/flash/quad/c55fm5746r.bin /STACKSIZE 0x0200 &DualPort

  ;flash script ends here if called with parameter PREPAREONLY
  IF &param_prepareonly
    ENDDO

; --------------------------------------------------------------------------------
; Flash programming

  DIALOG.YESNO "Flash programming prepared. Program flash memory now?"
  LOCAL &progflash
  ENTRY &progflash

  IF &progflash 
  (
    FLASH.ReProgram ALL /Erase
    Data.LOAD.auto *
    FLASH.ReProgram.off 
  )
  ELSE
  (
    FLASH.List
  )

  ENDDO
