; -------------------------------------------------------------------------------- ; @Title: Example for flash declaration of Renesas RX72x internal flash. ; ; @Description: ; This script can be started with an opional endianess parameter "LE" or "BE" ; - the "Endian-Select-Register-S MDE" is programmed accordingly ; - without parameter MDE stays untouched ; ; @Author: estahleder ; @Chip: RX72N RX72M ; @Copyright: (C) 1989-2019 Lauterbach GmbH, licensed for use with TRACE32(R) only ; -------------------------------------------------------------------------------- ; $Rev: 7665 $ ; $Id: rx72x.cmm 7665 2019-11-22 13:13:21Z estahleder $ LOCAL &endianess &bigendian &mdes &flashsize &TargetEndian ENTRY &endianess ; -------------------------------------------------------------------------------- ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ; enter FlashSize: check chip stamping ; ; e.g. CPU="R5F572N D xxxx" ; | ; 2Mb ; ; D == CodeFlash->2Mb, RAM->1Mb, DataFlash->32Kb ; N == CodeFlash->4Mb, RAM->1Mb, DataFlash->32Kb ; -------------------------------------------------------------------------------- &flashsize="N" ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ; -------------------------------------------------------------------------------- ; Setup CPU SYStem.RESet SYStem.JtagClock 1.MHz ; CPU is in LOCO clock mode -> reduce JTAG clock SYStem.CPU RX72N SYStem.MemAccess CPU SYStem.Option IMASKASM ON SYStem.Option IMASKHLL ON SYStem.Up GOSUB ENDIANESS ; get target endianess GOSUB FLASHSETUP ; Flash declaration + Binary selection GOSUB PLLINIT ; PLL setup for 12MHz crystal -> 96MHz system-clk ; Setting the Big Endian directly on the MDE register &mde=0xf8f8f8f8 FLASH.AUTO.ALL /CENSORSHIP Data.Set 0xFE7F5D00 %Long &mde FLASH.AUTO.off SYStem.Up ; force RESET to sample new endianess GOSUB ENDIANESS ; get target endianess GOSUB FLASHSETUP ; Flash declaration + Binary selection GOSUB PLLINIT ; PLL setup for 12MHz crystal -> 96MHz system-clk ; Jtag clock can be increased if CPU is no more in LOCO clock mode SYStem.JtagClock 10.MHz ; -------------------------------------------------------------------------------- ; Flash programming example DIALOG.YESNO "Program flash memory?" LOCAL &progflash ENTRY &progflash IF &progflash ( FLASH.AUTO 1. ; unit "1." == programflash, see flash.list Data.LOAD.auto * FLASH.AUTO.off ) ENDDO ;===END===END===END===END===END===END===END===END===END===END===END===END ; -------------------------------------------------------------------------------- ; Flash declaration FLASHSETUP: LOCAL &BlockNo &BlockSize &BlockBase &FlashBlocks &cpu FLASH.RESet ; -------------------------------------------------------------------------------- ; Code Flash Declaration &BlockNo=0x0 IF ("&flashsize"=="D") ; 2mb ---------------------------------------- ( &FlashBlocks=8. &BlockSize=0x2000 &BlockBase=0xffffe000 WHILE (&BlockNo<&FlashBlocks) ( FLASH.Create 1. &BlockBase++(&BlockSize-1) &BlockSize TARGET Long &BlockNo &BlockNo=&BlockNo+1 &BlockBase=&BlockBase-&BlockSize ) &FlashBlocks=70. &BlockSize=0x8000 &BlockBase=0xffff0000-&BlockSize WHILE (&BlockNo<&FlashBlocks) ( FLASH.Create 1. &BlockBase++(&BlockSize-1) &BlockSize TARGET Long &BlockNo &BlockNo=&BlockNo+1 &BlockBase=&BlockBase-&BlockSize ) ) ELSE IF ("&flashsize"=="N") ; 4mb ---------------------------------------- ( &FlashBlocks=8. &BlockSize=0x2000 &BlockBase=0xffffe000 WHILE (&BlockNo<&FlashBlocks) ( FLASH.Create 1. &BlockBase++(&BlockSize-1) &BlockSize TARGET Long &BlockNo &BlockNo=&BlockNo+1 &BlockBase=&BlockBase-&BlockSize ) &FlashBlocks=134. &BlockSize=0x8000 &BlockBase=0xffff0000-&BlockSize WHILE (&BlockNo<&FlashBlocks) ( FLASH.Create 1. &BlockBase++(&BlockSize-1) &BlockSize TARGET Long &BlockNo &BlockNo=&BlockNo+1 &BlockBase=&BlockBase-&BlockSize ) ) ELSE ( PRINT %ERROR "FLASH size of CPU type is unknown" ENDDO ) ; -------------------------------------------------------------------------------- ; Data Flash Declaration (erased data-flash shows a flickering data dump) IF (("&flashsize"=="D")||("&flashsize"=="N")) ( &BlockNo=0x0 &BlockBase=0x100000 &FlashBlocks=512. &BlockSize=0x40 WHILE (&BlockNo<&FlashBlocks) ( FLASH.Create 2. &BlockBase++(&BlockSize-1) &BlockSize TARGET Long &BlockNo &BlockNo=&BlockNo+1 &BlockBase=&BlockBase+&BlockSize ) ) ; -------------------------------------------------------------------------------- ; Option Flash Declaration ; FLASH.Create 3. 0xFE7F5D00--0x12006f TARGET Long /CENSORSHIP 0x120040--0x12006f ; -------------------------------------------------------------------------------- ; Flash Programming Binary Declaration IF (SYStem.BIGENDIAN()) ( FLASH.TARGET 0x1400 0x0000 0x1000 ~~/demo/rx/flash/word_be/rx65m.bin PRINT "FlashBinary: Big Endian" ) ELSE ( FLASH.TARGET 0x1400 0x0000 0x1000 ~~/demo/rx/flash/word/rx65m.bin PRINT "FlashBinary: Little Endian" ) RETURN ; -------------------------------------------------------------------------------- ; -------------------------------------------------------------------------------- ; PLL init: for 24MHz crystal PLLINIT: Data.Set 0x803FE %Word 0xA50B ; SYSTEM.PRCR /* Protection OFF */ Data.Set 0x8C293 %Byte 0x00 ; SYSTEM.MOFCR Data.Set 0x8C293 %Byte 0x00 ; Data.Set 0x8C294 %Byte 0x01 ; SYSTEM.HOCOPCR Data.Set 0x8C293 %Byte 0x00 ; SYSTEM.MOFCR Data.Set 0x800A2 %Byte 0xFF ; SYSTEM.MOSCWTCR Data.Set 0x80032 %Byte 0x00 ; SYSTEM.MOSCCR WAIT 500.ms Data.Set 0x8C428 %Byte 0x00 ; RCR4 Data.Set 0x8C426 %Byte 0x00 ; RCR3 WAIT 500.ms Data.Set 0x80033 %Byte 0x01 ; SOSCCR WAIT 500.ms Data.Set 0x80028 %Word 0x1D00 ; SYSTEM.PLLCR Data.Set 0x80028 %Word 0x1D00 ; Data.Set 0x80028 %Word 0x1300 ; Data.Set 0x8002A %Byte 0x00 ; SYSTEM.PLLCR2 Data.Set 0x8101C %Byte 0x02 ; ROMWT Data.Set 0x80020 %Long 0x21C11222 ; SYSTEM.SCKCR Data.Set 0x80024 %Word 0x0041 ; SYSTEM.SCKCR2 /* USB Clock = 1/5 */ Data.Set 0x80026 %Word 0x0400 ; SYSTEM.SCKCR3 /* CLK-source = PLL circuit */ Data.Set 0x80034 %Byte 0x01 ; SYSTEM.LOCOCR /* LOCO is stopped */ Data.Set 0x803FE %Word 0xA500 ; SYSTEM.PRCR /* Protection ON */ RETURN ; -------------------------------------------------------------------------------- ; -------------------------------------------------------------------------------- ; Get target endianess ENDIANESS: &TargetEndian=Data.Long(D:0xFE7F5D00) ; MDE register IF (&TargetEndian==0xffffffff) ( SYStem.Option BE OFF PRINT "Target: Little Endian" ) ELSE ( SYStem.Option BE ON PRINT "Target: Big Endian" ) RETURN ; --------------------------------------------------------------------------------