RE: ownload code into on chip flash(rom)

"Dobbin Allan-r11834" <[email protected]>
Newsgroups gmane.comp.hardware.motorola.microcontrollers
Message-ID <4147ED8B92A864498825C07E53594E4A322A0D@az33exm20.fsl.freescale.net>
The code you have attached is pretty much position independent - it
doesn't effect your decision as to what to do with the linker file.

Basically you have two choices - run from RAM or run from FLASH - you
don't need to put your code in FLASH just to see if an interrupt is
working.  Your interrupts can be based at either 0x00000000 or
0xfff00000 depending in MSR[IP] value. For 0xfff00000, you could locate
SRAM there using the chip selects.  There is previous emails in the data
base on this subject plus AN2109 goes into great detail on this subject.

Regards,
Allan

-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf
Of sripathy23
Sent: Tuesday, September 13, 2005 5:31 PM
To: [email protected]
Subject: [MPC500] ownload code into on chip flash(rom)


Dear members

with my earlier mail regarding PIT interrupt, i was able to run the 
interrupt but i am not getting the correct output. what i am trying 
to do is that after programming the PIT interrupt using C only (i am 
using the example from document AN2109 . Instead of using sci i am 
using the PIT interrupt). I was able to fix the errors related to 
illegal pragma  and the warning. I have changed the linker command 
file . I found an example form code warrior for C interrupt handler. 
Now I dont get any error. I need to download my code into ROM to see 
whether the interrupt is working or not. what should i do. should i 
need to set the jumpers and the switches. I would appreciate if 
anyone can help me in this regard.

can anyone look at this code and tell me whether i should change the 
liker command file


here is my main file and the liker command file. Is the 
section .IrqSect defined in the .lcf file write? 

main Program

	#pragma push
	#pragma section code_type".text" code_mode=far_abs
	void PIT_Int(void);
	#pragma section code_type ".IrqSect"
	void Ext_Isr();
	#pragma pop


void init_555()
{
	USIU.SYPCR.R = 0xffffff03;		
	USIU.PLPRCR.B.MF = 0x009;	
	while(USIU.PLPRCR.B.SPLS==0)
	UIMB.UMCR.B.HSPEED = 0;		
}

void init_mios()
{							
	MIOS1.MCPSMSCR.B.PSL = 0x4;		
	MIOS1.MCPSMSCR.B.PREN = 1;			
	MIOS1.MPWMSM2SCR.B.CP = 0xf6;	
	MIOS1.MPWMSM2PERR.R = 2000;		
	MIOS1.MPWMSM2PULR.R = 500;		               
MIOS1.MPWMSM2SCR.B.EN = 1;	
}



void initPIT()
{					
USIU.PITC.B.PITC = 0x7777;		
USIU.PISCR.B.PITF = 0;		
USIU.PISCR.B.PTE  = 1;			
USIU.PISCR.B.PIRQ = 0x80;	
USIU.PISCR.B.PIE = 1; 		
USIU.SIMASK.R = 0x40000000;	
}
   
   
 

void main()

{
	init_555();
	init_mios();		
	initPIT();					
	asm(" mtspr EIE, r0");		
	while (1==1) {
		loopctr++;
	}
}

#pragma interrupt SRR on 

void Ext_Isr()
{

#define LEVEL0 0x40000000
asm (" mtspr EID, r0 "); // Set MSR.RI - now recoverable
if (USIU.SIPEND.R&LEVEL0) // Check if IRQ is level 0
{
PIT_Int(); // Call PIT C interrupt handler
}
else
{
// Just return
}
asm (" mtspr NRI, r0 "); // Clear MSR.RI - now irrecoverable

};
#pragma interrupt off


 void PIT_Int()
{
if(USIU.PISCR.B.PS == 1)
 {
     pitctra1++;					// Increment 
PIT interrupt counter
     if(pitctra1==100)	
     {
     countera1 = countera1+100;
     MIOS1.MPWMSM2PULR.R = 100;		/* Set Duty Cycle to 25%*/
     MIOS1.MPWMSM2SCR.B.EN = 1;		/* Enable output on PWM2 */
	 USIU.PISCR.B.PS = 1;	    // Negate interrupt request
     flag1=1;	
	 pitctra1 = 0;
     }
     else
     {
     	
     }
 }
else
 {
    	
 }
}





LINKER COMMAND FILE


_flash_source	= 0x00c10000;		
MEMORY {
    
	ram : org = 0x00c02000
	rom : org = 0x00000000 
       pit : org = 0x00000500
}
FORCEACTIVE { gInterruptVectorTable, __reset }

SECTIONS {

	.reset : {} > rom
	.init  : {} > rom
	.IrqSect : {}>pit
	GROUP : {
		.text (TEXT) ALIGN(0x1000) : {}
		.rodata (CONST) : {
			*(.rdata)
			*(.rodata)
		}
		.ctors : {}
		.dtors : {}
		extab : {}
		extabindex : {}
	} > rom 	// for ROM images, this can be 'rom' if you 
want to execute in ROM
				// or 'code' if you want to execute 
in RAM
	GROUP : {
		.data : {}
		.sdata : {}
		.sbss : {}
		.sdata2 : {}
		.sbss2 : {}
		.bss : {}
		.PPC.EMB.sdata0 : {} 
		.PPC.EMB.sbss0 : {}		
	} > ram

	.dummy ALIGN(64): {}
	
	_flash_dest = _f_reset;			
	_flash_size = _f_dummy_rom - _flash_dest;

	.fcopy BIND(_flash_source + _flash_size) ALIGN(64) : {
	*(.fcopy)
	}

	.fcopy_data : {} 
	.BINARY : {}
}







-----------------------------------------------------------
To learn more about Freescale Microcontrollers, please visit
http://www.freescale.com/mcu


 
Yahoo! Groups Links



 



------------------------ Yahoo! Groups Sponsor --------------------~--> 
Fair play? Video games influencing politics. Click and talk back!
http://us.click.yahoo.com/T8sf5C/tzNLAA/TtwFAA/dN_tlB/TM
--------------------------------------------------------------------~-> 

-----------------------------------------------------------
To learn more about Freescale Microcontrollers, please visit
http://www.freescale.com/mcu


 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/MPC500/

<*> To unsubscribe from this group, send an email to:
    [email protected]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.