Hi,
How to enter into supervisor mode and user mode in MPC5675K and how to access CPU special function registers such as MSR(Machine State Register)?
Regards,
Mohammed Shibin
Solved! Go to Solution.
Access to MSR and SPR register must be done indirectly with using of mtmsr/mfmsr and mtmsr/mfmsr. Sometimes I am using macros below where ‘address’ points to variable where data are being written from/are read to. Or you can use pure assembler code.
/************** macro for MSR WRITE **************/
// param 'address' is a variable name (thus its address)
#define WRITE_TO_MSR(address) \
asm (lis r30, (address)@h); \
asm (ori r30, r30, (address)@l); \
asm (lwz r31, 0x0(r30)); \
asm (mtmsr r31);
/************** macro for MSR READ **************/
// param 'address' is a variable name (thus its address)
#define READ_FROM_MSR(address) \
asm (lis r30, (address)@h); \
asm (ori r30, r30, (address)@l); \
asm (mfmsr r31); \
asm (stw r31, 0(r30));
Access to MSR and SPR register must be done indirectly with using of mtmsr/mfmsr and mtmsr/mfmsr. Sometimes I am using macros below where ‘address’ points to variable where data are being written from/are read to. Or you can use pure assembler code.
/************** macro for MSR WRITE **************/
// param 'address' is a variable name (thus its address)
#define WRITE_TO_MSR(address) \
asm (lis r30, (address)@h); \
asm (ori r30, r30, (address)@l); \
asm (lwz r31, 0x0(r30)); \
asm (mtmsr r31);
/************** macro for MSR READ **************/
// param 'address' is a variable name (thus its address)
#define READ_FROM_MSR(address) \
asm (lis r30, (address)@h); \
asm (ori r30, r30, (address)@l); \
asm (mfmsr r31); \
asm (stw r31, 0(r30));