; --------------------------------------------------------------------------------
; @Title: Example script for programming internal flash of Salsa MPC5604E
;
; @Description:
; Script arguments:
;
;   DO mpc560xe [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/mpc560xe PREPAREONLY SKIPCONFIG
;
; @Author: rweiss
; @Chip: MPC5604E
; @Copyright: (C) 1989-2017 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Rev: 4131 $
; $Id: mpc560xe.cmm 4131 2017-02-09 13:33:05Z 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 &flashsize &flashdriver
&flashsize=0x000000000
&flashdriver="tbd.bin"

LOCAL &DualPort
IF VERSION.BUILD.BASE()>=45520.
  &DualPort="/DualPort"

; --------------------------------------------------------------------------------
; CPU setup

IF !&param_skipconfig
(
  SYStem.RESet
  SYStem.BdmClock 4.0MHz
  ;select automatic CPU detection
  SYStem.CPU MPC55XX
  SYStem.DETECT.CPU
  SYStem.Option.WATCHDOG OFF
  SYStem.Up
)

;protect from accessing unimplemented memory (open Data.List/Dump windows)
MAP.DenyAccess 0x20000000--0x3FFFFFFF

; --------------------------------------------------------------------------------
; Flash declaration

IF (CPU()=="MPC5604E")                            ; Salsa
(
  &flashsize=0x00080000
  &flashdriver="c90fl560x256k.bin"
)
ELSE 
(
  DIALOG.OK "This processor is not supported"
  ENDDO
)

; initialize internal SRAM
Data.Set EA:0x40000000--0x40003fff %Quad 0

FLASH.RESet
FLASH.Create 1. 0x00000000++0x03fff TARGET Quad 0. ; L0
FLASH.Create 1. 0x00004000++0x03fff TARGET Quad 1. ; L1
FLASH.Create 1. 0x00008000++0x07fff TARGET Quad 2. ; L2
FLASH.Create 1. 0x00010000++0x07fff TARGET Quad 3. ; L3
FLASH.Create 1. 0x00018000++0x03fff TARGET Quad 4. ; L4
FLASH.Create 1. 0x0001c000++0x03fff TARGET Quad 5. ; L5
FLASH.Create 1. 0x00020000++0x0ffff TARGET Quad 6. ; L6
FLASH.Create 1. 0x00030000++0x0ffff TARGET Quad 7. ; L7

FLASH.Create 2. 0x00040000++0x1ffff TARGET Quad 0. ; M0
FLASH.Create 2. 0x00060000++0x1ffff TARGET Quad 1. ; M1

; Shadow row
FLASH.Create 9. 0x00200000++0x3fff NOP Quad /CENSORSHIP 0x00203DD8--0x00203DE7 /INFO "Shadow Row"

; Data flash
FLASH.Create 10. 0x00800000++0x3fff TARGET Quad 0.
FLASH.Create 10. 0x00804000++0x3fff TARGET Quad 1.
FLASH.Create 10. 0x00808000++0x3fff TARGET Quad 2.
FLASH.Create 10. 0x0080c000++0x3fff TARGET Quad 3.

FLASH.TARGET E:0x40000000 E:0x40002000 0x1000 ~~/demo/powerpc/flash/quad/&flashdriver /STACKSIZE 0x0200 &DualPort

;flash script ends here if called with parameter PREPAREONLY
IF &param_prepareonly
  ENDDO PREPAREDONE

; --------------------------------------------------------------------------------
; Flash programming example
;
; Flash programming speed is about three times faster when memory class E:
; is used for data buffer (DUALPORT memory access). For DUALPORT access it
; is required to setup MemAccess NEXUS for both, NEXUS and JTAG debugger. 

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
)

;set JTAG clock back to default
SYStem.BdmClock 4MHz

ENDDO
