; --------------------------------------------------------------------------------
; @Title: Example script for programming of S32R372 (RR Skinny) internal flash.
;
; @Description:
; Script arguments:
;
;   DO S32R372 [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/s32r372.cmm PREPAREONLY SKIPCONFIG
;
; @Author: rweiss
; @Chip: S32R372
; @Copyright: (C) 1989-2016 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Rev: 4046 $
; $Id: s32r372.cmm 4046 2016-12-14 16:33:50Z 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)

; --------------------------------------------------------------------------------
; CPU setup

IF !&param_skipconfig
(
  SYStem.RESet
  SYStem.BdmClock 2.0MHz
  SYStem.CPU S32R372
  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. 0x00800000--0x00803FFF TARGET Quad 0x0000 /INFO "EEPROM Block 0"
FLASH.Create 1. 0x00804000--0x00807FFF TARGET Quad 0x0001 /INFO "EEPROM Block 2"
; Mid address space
FLASH.Create 2. 0x00F98000--0x00F9BFFF TARGET Quad 0x0100 /INFO "Flash block 0 - boot location 0"
FLASH.Create 2. 0x00F9C000--0x00F9FFFF TARGET Quad 0x0101 /INFO "Flash block 1 - boot location 1"
FLASH.Create 2. 0x00FA0000--0x00FAFFFF TARGET Quad 0x0102 /INFO "Flash block 2 - boot location 2"
FLASH.Create 2. 0x00FB0000--0x00FBFFFF TARGET Quad 0x0103 /INFO "Flash block 3 - boot location 3"
FLASH.Create 2. 0x00FC0000--0x00FCFFFF TARGET Quad 0x0104 /INFO "Flash block 4"
FLASH.Create 2. 0x00FD0000--0x00FDFFFF TARGET Quad 0x0105 /INFO "Flash block 5"
; High address space
FLASH.Create 3. 0x00A00000--0x00A03FFF NOP    Quad 0x0200 /INFO "CSE2 Flash Block 0"
FLASH.Create 3. 0x00A04000--0x00A07FFF NOP    Quad 0x0201 /INFO "CSE2 Flash Block 1"
; 256k address space
FLASH.Create 4. 0x01000000--0x0103FFFF TARGET Quad 0x0300 /INFO "Flash block 6 - boot location 4"
FLASH.Create 4. 0x01040000--0x0107FFFF TARGET Quad 0x0301 /INFO "Flash block 7 - boot location 5"
FLASH.Create 4. 0x01080000--0x010BFFFF TARGET Quad 0x0302 /INFO "Flash block 8 - boot location 6"
FLASH.Create 4. 0x010C0000--0x010FFFFF TARGET Quad 0x0303 /INFO "Flash block 9 - boot location 7"
; UTEST address space
FLASH.Create 6. 0x00400000--0x00403FFF TARGET Quad 0x0500 /OTP /INFO "UTEST"

; Overlay enabled mapping
FLASH.CreateALIAS 0x08F98000--0x08FDFFFF 0x00F98000   ; Small & medium flash blocks
FLASH.CreateALIAS 0x09000000--0x090FFFFF 0x01000000   ; Large flash blocks

FLASH.TARGET E:0x40000000 E:0x40002000 0x1000 ~~/demo/powerpc/flash/quad/c55fm5746m.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
