• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1601
  • Last Modified:

How to diab 4.2b powerpc family asm macros work?

My Embedded Application runs on Motorola PowerPC MPC555 Microcontroller.  The cross compiler is Diab 4.2b.   Following is a macro for raising and restroing interrupts in MPC555.

asm unsigned int iplm_raise(void)
{
! "r3"

    mfmsr       r3
    mtspr       81,r1
}

asm void iplm_restore(const unsigned int mask)
{
%reg mask ;
! "r12"

    mfmsr       r12
    rlwimi      r12,mask,0,16,16
    mtmsr       r12
}

The calls to these asm macros are as follows:

unsigned_32 mask;

RAISE_IPLM(mask) ;

/* critical section of code */

RESTORE_IPLM(mask) ;

Following are links:

1) Link to MPC555 Manual - pages of interest are 3-20 to 3-23
http://www.freescale.com/files/microcontrollers/doc/user_guide/MPC555UM.pdf?fsrch=1

2) Link to MPC555 Instruction Set - Section 9 is of interest
http://www.freescale.com/files/microcontrollers/doc/ref_manual/RCPURM.pdf?fsrch=1

3)  I could not find a link to Diab 4.2b Target User's Manual for PowerPC Family. However, I have soft copy
of this manual.  How can I attach it?  This manual explains asm macros.

Please explain above two macro in detail, line by line.  Thanks.



0
naseeam
Asked:
naseeam
1 Solution
 
naseeamAuthor Commented:
Diab Target User's Manual for Power PC Family should be at www.windriver.com.  A registration will be required in order to access the document.
0
 
Anthony2000Commented:
asm unsigned int iplm_raise(void)  // assembler macro iplm_raise returning a value of type unsigned int
{
! "r3"                          //   register list is an optional list of scratch regs, enables the compiler to generate more efficient code

    mfmsr       r3          //  contents of the MSR are placed into R3
    mtspr       81,r1      //  I didn't exactly understand what this instruction actually does, I would need more time to study the micro's details
                                  // if R1 contains the return value, then this is what the caller will get for the unsigned int value
}

asm void iplm_restore(const unsigned int mask)
{
%reg mask ;      // describes the parameter mask, specifying "%reg in front of mask means that the parameter is in a non-scratch register.
! "r12"               // optional list of scratch registers, enables the compiler to generate more efficient code.

    mfmsr       r12
    rlwimi      r12,mask,0,16,16
    mtmsr       r12
}

Generally these macros look like they disable/enable interrupts? Is this what you want or do you not understand the actual assembly language instructions?
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Cloud Class® Course: Certified Penetration Testing

This CPTE Certified Penetration Testing Engineer course covers everything you need to know about becoming a Certified Penetration Testing Engineer. Career Path: Professional roles include Ethical Hackers, Security Consultants, System Administrators, and Chief Security Officers.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now