We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
1. Programming Boot Loader in External FLASH for execution in External RAM: Running Code From Internal RAM My company has developed a powerline adapter prototype. This prototype is based on the C161U microcontroller and we are using the uVision v4.27 product. We would like to program a "Boot Loader" in order to start the execution in an external FLASH and then to copy our "Application" from external FLASH to external RAM, where the program will be executed. Please, can anybody provide me any technical information concerning to the execution problem form Internal RAM that we have detected and it is explained below with detail?. The solution of this problem is VERY PRIORITY for us. 2. Execution Problems from IRAM We use only one uVision project which include the "Boot Loader" files and the "Application" files which external memory map is: RAM: start: 0x0000 size: 0x10000 ROM: start 0x10000 size:0x10000 CS definition: CS0: 0x0000 - 0x20000 (connected to an external FLASH of 128 Kbytes) CS1: 0x40000 - 0x60000 (connected to an external RAM is 128Kwords, only A17-A1 lines are used for addressing this memory) When the code copy from external FLASH to external RAM is finished we write three instructions in internal RAM positions (0xF200-0xF20B) in order to modify the definition of CS1 and then to jump to the function main of our Application . For the execution of the Application we redefine CS1 for the address range 0x0000 - 0x20000 . MOV ADDRSEL1, #0x005 For the writing and execution from IRAM we have used the information provided from your technical support page http://www.keil.com/support/docs/209.htm, but I think there is some important detail that additionally it is necessary to specify . 3. Simple Example for the Evaluation Board EASY UTAH including the C161U. We have executed a simple example (please see uVision attached) using the Keil monitor (through the serial port) and running the program in External RAM in order to check if the programming internal RAM and code execution from Internal RAM is correct. We have executed this example in the evaluation board EASY UTAH and also in our prototype including C161U. In both cases the problem is the same. PROBLEM: We have observed that when we execute the instruction in Internal RAM, that is when we change the definition for the generation of CS1 MOV ADDRSEL1, #0x005 the program execution is stopped and it is broken the communication to the monitor. Additionally, the CS1 goes high and CS0 does down. The writting code of the IRAM is the following:
MOV R6,#0F200H ; destination in on-chip RAM MOV R5,#0CE6H MOV ADDRSEL1, MOV [R6],R5 ADD R6,#02H MOV R5,#0005H ;...0x5 MOV [R6],R5 ADD R6,#02H MOV R5,#0CCH ; Opcode: NOP MOV [R6],R5 ADD R6,#02H ; JMPS to the @main MOV R5,#01FAH ;JMPS = FA MOV [R6],R5 ADD R6,#02h MOV R5,#00A2h MOV [R6],R5