; --------------------------------------------------------------------------------
; @Title: Initialization script for phyCore-MPC5121e
; @Description: -
; @Author: REI
; @Board: phycore-mpc5121e
; @Chip: MPC5121
; @Copyright: (C) 1989-2014 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Id: init.cmm 7496 2014-07-29 14:25:53Z rweiss $


;Debugger Configuration
  SYStem.CPU MPC5121
  SYStem.Option.WATCHDOG.OFF
  SYStem.Up

  IF !SIMULATOR()
    SYStem.BdmClock 20.MHz

;initialize R1
  Register.Set R1 0x00000000

  IF SIMULATOR()
    SYStem.Option.BASE 0x80000000

  Data.Set ANC:IOBASE()         %Long %BE 0x80000000 ;IMMR

  Data.Set ANC:IOBASE()+0x000c4 %Long %BE 0x30000000 ;SRAMBAR = 0x30000000

;enable clocks of all modules
  Data.Set ANC:IOBASE()+0x00F04 %Long %BE 0xFFFFFFFF ;SCCR1
  Data.Set ANC:IOBASE()+0x00F08 %Long %BE 0xFFFFFFFF ;SCCR2
  
;set system clock frequency
  Data.Set ANC:IOBASE()+0x00F0C %Long %BE 0x01E0531F ;SCFR1

;access windows
  Data.Set ANC:IOBASE()+0x00024 %Long %BE 0xFE00FFFF
  Data.Set ANC:IOBASE()+0x000C4 %Long %BE 0x30000000
  Data.Set ANC:IOBASE()+0x00028 %Long %BE 0x8200821F
  Data.Set ANC:IOBASE()+0x0002C %Long %BE 0x84008400
  Data.Set ANC:IOBASE()+0x0003C %Long %BE 0x86008600
  Data.Set ANC:IOBASE()+0x000A0 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x000A4 %Long %BE 0x0000001B
  Data.Set ANC:IOBASE()+0x00060 %Long %BE 0xA0000000
  Data.Set ANC:IOBASE()+0x00064 %Long %BE 0x8000001C
  Data.Set ANC:IOBASE()+0x00068 %Long %BE 0x86000000
  Data.Set ANC:IOBASE()+0x0006C %Long %BE 0x80000017

;LBC chip selects
  Data.Set ANC:IOBASE()+0x10000 %Long %BE 0x05059110 ;CS0CR
  Data.Set ANC:IOBASE()+0x10004 %Long %BE 0x05059110 ;CS1CR
  Data.Set ANC:IOBASE()+0x10008 %Long %BE 0x0505931C ;CS2CR
  Data.Set ANC:IOBASE()+0x10018 %Long %BE 0x05059310 ;CS6CR

  Data.Set ANC:IOBASE()+0x10020 %Long %BE 0x01000000 ;CSCR
  Data.Set ANC:IOBASE()+0x10034 %Long %BE 0x00000007 ;CSSR

  Data.Set ANC:IOBASE()+0x00104 %Long %BE 0x00400000 ;SCLPCSA

;IO control
  Data.Set ANC:IOBASE()+0x0A008 %Long %BE 0x00000003
  Data.Set ANC:IOBASE()+0x0A00C %Long %BE 0x00000003
  Data.Set ANC:IOBASE()+0x0A010 %Long %BE 0x00000003
  Data.Set ANC:IOBASE()+0x0A014 %Long %BE 0x0000001B
  Data.Set ANC:IOBASE()+0x0A018 %Long %BE 0x0000001B
  Data.Set ANC:IOBASE()+0x0A01C %Long %BE 0x0000001B
  Data.Set ANC:IOBASE()+0x0A020 %Long %BE 0x00000007
  Data.Set ANC:IOBASE()+0x0A024 %Long %BE 0x0000001B
  Data.Set ANC:IOBASE()+0x0A028 %Long %BE 0x00000003
  Data.Set ANC:IOBASE()+0x0A02C %Long %BE 0x00000003
  Data.Set ANC:IOBASE()+0x0A030 %Long %BE 0x00000003
  Data.Set ANC:IOBASE()+0x0A034 %Long %BE 0x00000003
  Data.Set ANC:IOBASE()+0x0A038 %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A03C %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A040 %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A044 %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A048 %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A04C %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A050 %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A054 %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A058 %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A05C %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A060 %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A064 %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A068 %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A06C %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A070 %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A074 %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A078 %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A07C %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A080 %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A084 %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A088 %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A08C %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A090 %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A094 %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A098 %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A09C %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A0A0 %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A0A4 %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A0A8 %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A0AC %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A0B0 %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A0B4 %Long %BE 0x00000103
  Data.Set ANC:IOBASE()+0x0A0B8 %Long %BE 0x0000001B
  Data.Set ANC:IOBASE()+0x0A0BC %Long %BE 0x0000001B
  Data.Set ANC:IOBASE()+0x0A0C0 %Long %BE 0x0000001B
  Data.Set ANC:IOBASE()+0x0A0C4 %Long %BE 0x00000003
  Data.Set ANC:IOBASE()+0x0A0C8 %Long %BE 0x00000003
  Data.Set ANC:IOBASE()+0x0A0CC %Long %BE 0x0000001B
  Data.Set ANC:IOBASE()+0x0A0D0 %Long %BE 0x0000000B
  Data.Set ANC:IOBASE()+0x0A0D4 %Long %BE 0x0000000B
  Data.Set ANC:IOBASE()+0x0A0D8 %Long %BE 0x00000003
  Data.Set ANC:IOBASE()+0x0A0F4 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A0F8 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A0FC %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A100 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A104 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A108 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A10C %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A110 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A114 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A118 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A11C %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A120 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A124 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A128 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A12C %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A130 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A134 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A138 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A13C %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A140 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A144 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A148 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A14C %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A150 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A154 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A158 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A15C %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A160 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A164 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A168 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A16C %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A170 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A174 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A178 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A17C %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A180 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A184 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A188 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A18C %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A190 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A194 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A198 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A19C %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A1A0 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A1A4 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A1A8 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A1AC %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A1B0 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A1B4 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A1B8 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A1BC %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A1C0 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A1C4 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A1CC %Long %BE 0x00000083
  Data.Set ANC:IOBASE()+0x0A1D0 %Long %BE 0x00000083
  Data.Set ANC:IOBASE()+0x0A1D4 %Long %BE 0x00000083
  Data.Set ANC:IOBASE()+0x0A1E0 %Long %BE 0x00000107
  Data.Set ANC:IOBASE()+0x0A1E4 %Long %BE 0x00000107
  Data.Set ANC:IOBASE()+0x0A1C8 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x0A20C %Long %BE 0x00000083
  Data.Set ANC:IOBASE()+0x0A210 %Long %BE 0x00000083
  Data.Set ANC:IOBASE()+0x0A214 %Long %BE 0x00000083
  Data.Set ANC:IOBASE()+0x0A218 %Long %BE 0x00000083
  Data.Set ANC:IOBASE()+0x0A21C %Long %BE 0x00000083
  Data.Set ANC:IOBASE()+0x0A220 %Long %BE 0x00000083
  Data.Set ANC:IOBASE()+0x0A224 %Long %BE 0x00000083
  Data.Set ANC:IOBASE()+0x0A228 %Long %BE 0x00000083
  Data.Set ANC:IOBASE()+0x0A22C %Long %BE 0x00000083
  Data.Set ANC:IOBASE()+0x0A230 %Long %BE 0x00000083
  Data.Set ANC:IOBASE()+0x0A234 %Long %BE 0x00000083
  Data.Set ANC:IOBASE()+0x0A238 %Long %BE 0x00000083
  Data.Set ANC:IOBASE()+0x0A23C %Long %BE 0x00000083
  Data.Set ANC:IOBASE()+0x0A240 %Long %BE 0x00000083
  Data.Set ANC:IOBASE()+0x0A244 %Long %BE 0x00000083
  Data.Set ANC:IOBASE()+0x0A258 %Long %BE 0x0000008B
  Data.Set ANC:IOBASE()+0x0A000 %Long %BE 0x00000036 

;PSC3
  Data.Set ANC:IOBASE()+0x113C0 %Long %BE 0x00000080
  Data.Set ANC:IOBASE()+0x11380 %Long %BE 0x00000080
  Data.Set ANC:IOBASE()+0x113D0 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x11390 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x1139C %Long %BE 0x00000040
  Data.Set ANC:IOBASE()+0x113DC %Long %BE 0x01000080
  Data.Set ANC:IOBASE()+0x113C0 %Long %BE 0x00000001
  Data.Set ANC:IOBASE()+0x11380 %Long %BE 0x00000001
  Data.Set ANC:IOBASE()+0x11F00 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x11308 %Byte 0x10
  Data.Set ANC:IOBASE()+0x11308 %Byte 0x0A
  Data.Set ANC:IOBASE()+0x11304 %Word 0xDD00
  Data.Set ANC:IOBASE()+0x11340 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x11300 %Byte 0x13
  Data.Set ANC:IOBASE()+0x11300 %Byte 0x07
  Data.Set ANC:IOBASE()+0x11318 %Byte 0x00
  Data.Set ANC:IOBASE()+0x1131C %Byte 0x24
  Data.Set ANC:IOBASE()+0x11314 %Word 0x0000
  Data.Set ANC:IOBASE()+0x11308 %Byte 0x20
  Data.Set ANC:IOBASE()+0x11308 %Byte 0x30
  Data.Set ANC:IOBASE()+0x11308 %Byte 0x05

;I2C Channel 1
  Data.Set ANC:IOBASE()+0x01708 %Long %BE 0x00000000 ;MCR
  Data.Set ANC:IOBASE()+0x01704 %Long %BE 0x39000000 ;MFDR
  Data.Set ANC:IOBASE()+0x01700 %Long %BE 0xFE000000 ;MADR
  Data.Set ANC:IOBASE()+0x01708 %Long %BE 0x80000000 ;MCR
  Data.Set ANC:IOBASE()+0x0170C %Long %BE 0x81000000 ;MSR

;I2C Channel 2
  Data.Set ANC:IOBASE()+0x01728 %Long %BE 0x00000000 ;MCR
  Data.Set ANC:IOBASE()+0x01724 %Long %BE 0x39000000 ;MFDR
  Data.Set ANC:IOBASE()+0x01720 %Long %BE 0xFE000000 ;MADR
  Data.Set ANC:IOBASE()+0x01728 %Long %BE 0x80000000 ;MCR
  Data.Set ANC:IOBASE()+0x0172C %Long %BE 0x81000000 ;MSR

;I2C Channel 3
  Data.Set ANC:IOBASE()+0x01748 %Long %BE 0x00000000 ;MCR
  Data.Set ANC:IOBASE()+0x01744 %Long %BE 0x39000000 ;MFDR
  Data.Set ANC:IOBASE()+0x01740 %Long %BE 0xFE000000 ;MADR
  Data.Set ANC:IOBASE()+0x01748 %Long %BE 0x80000000 ;MCR
  Data.Set ANC:IOBASE()+0x0174C %Long %BE 0x81000000 ;MSR

;I2C Channel 4
  Data.Set ANC:IOBASE()+0x01760 %Long %BE 0x00000000 ;MCR
  Data.Set ANC:IOBASE()+0x01764 %Long %BE 0x00000000 ;MFDR

;DRAM
  Data.Set ANC:IOBASE()+0x09000 %Long %BE 0xF0000000
  Data.Set ANC:IOBASE()+0x09080 %Long %BE 0x00077777
  Data.Set ANC:IOBASE()+0x09084 %Long %BE 0x00000000
  Data.Set ANC:IOBASE()+0x09088 %Long %BE 0x00000001
  Data.Set ANC:IOBASE()+0x0908C %Long %BE 0xFFEEDDCC
  Data.Set ANC:IOBASE()+0x090A0 %Long %BE 0xBBAAAAAA
  Data.Set ANC:IOBASE()+0x09090 %Long %BE 0x66666666
  Data.Set ANC:IOBASE()+0x090A4 %Long %BE 0x55555555
  Data.Set ANC:IOBASE()+0x09094 %Long %BE 0x44444444
  Data.Set ANC:IOBASE()+0x090A8 %Long %BE 0x44444444
  Data.Set ANC:IOBASE()+0x09098 %Long %BE 0x55555555
  Data.Set ANC:IOBASE()+0x090AC %Long %BE 0x55555558
  Data.Set ANC:IOBASE()+0x0909C %Long %BE 0x11111111
  Data.Set ANC:IOBASE()+0x090B0 %Long %BE 0x11111122
  Data.Set ANC:IOBASE()+0x090B4 %Long %BE 0xAAAAAAAA
  Data.Set ANC:IOBASE()+0x090C8 %Long %BE 0xAAAAAAAA
  Data.Set ANC:IOBASE()+0x090B8 %Long %BE 0x66666666
  Data.Set ANC:IOBASE()+0x090CC %Long %BE 0x66666666
  Data.Set ANC:IOBASE()+0x090BC %Long %BE 0x11111111
  Data.Set ANC:IOBASE()+0x090D0 %Long %BE 0x11111111
  Data.Set ANC:IOBASE()+0x090C0 %Long %BE 0x11111111
  Data.Set ANC:IOBASE()+0x090D4 %Long %BE 0x11111111
  Data.Set ANC:IOBASE()+0x090C4 %Long %BE 0x11111111
  Data.Set ANC:IOBASE()+0x090D8 %Long %BE 0x11111111
  Data.Set ANC:IOBASE()+0x09000 %Long %BE 0xFA804A00
  Data.Set ANC:IOBASE()+0x09004 %Long %BE 0x00003D2E
  Data.Set ANC:IOBASE()+0x09008 %Long %BE 0x68EC1168
  Data.Set ANC:IOBASE()+0x0900C %Long %BE 0x34310864
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01380000
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01380000
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01380000
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01380000
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01380000
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01380000
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01380000
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01380000
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01380000
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01380000
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01100400
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01380000
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01080000
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01380000
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01080000
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01380000
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01000432
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01380000
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01020000
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01380000
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01100400
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01020000
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01030000
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01010000
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01000432
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01100400
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01080000
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01000432
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01010780
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01100400
  Data.Set ANC:IOBASE()+0x09010 %Long %BE 0x01380000
  Data.Set ANC:IOBASE()+0x09004 %Long %BE 0x06183D2E
  Data.Set ANC:IOBASE()+0x09000 %Long %BE 0xEA804A00
  WAIT 500.ms
  
ENDDO
