查看: 11043|回复: 12

[MPC] MPC55xx/MPC56xx如何进入和退出临界区?

[复制链接]

该用户从未签到

8

主题

52

帖子

0

中级会员

Rank: 3Rank: 3

积分
240
最后登录
2016-10-20
发表于 2014-12-16 11:27:34 | 显示全部楼层 |阅读模式
如题所示,使能外部中断是asm(" wrteei 1");  
求解,如何进入和退出临界区?
我知道答案 目前已有12人回答
回复

使用道具 举报

该用户从未签到

24

主题

666

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1072
最后登录
2023-4-10
发表于 2014-12-16 15:34:39 | 显示全部楼层
plabghhahacong1 发表于 2014-12-16 15:30
懂了,我傻擦了!
谢谢,想了半天了。
到处在看指令集,还以为是机器自动处理的这个动作!

亲,如果你的问题解决了,请给个5分好评哦
回复 支持 1 反对 0

使用道具 举报

该用户从未签到

24

主题

666

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1072
最后登录
2023-4-10
发表于 2014-12-16 11:51:01 | 显示全部楼层
移植系统吧
回复 支持 反对

使用道具 举报

该用户从未签到

24

主题

666

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1072
最后登录
2023-4-10
发表于 2014-12-16 11:54:21 | 显示全部楼层
#define  OS_CRITICAL_METHOD    3u

#if                 OS_CRITICAL_METHOD == 3
#define  OS_ENTER_CRITICAL()   do{ cpu_sr = OS_CPU_SR_Save();}while (0) //Disable Interrupts
#define  OS_EXIT_CRITICAL()    do{ OS_CPU_SR_Restore(cpu_sr);}while (0)   //Enable  Interrupts
#endif

OS_CPU_SR_Save()和OS_CPU_SR_Restore(cpu_sr)用汇编实现!
OS_CPU_SR_Save:
            mfmsr   r3
            wrteei  0
            se_blr

OS_CPU_SR_Restore:
            mtmsr   r3
            se_blr
回复 支持 反对

使用道具 举报

该用户从未签到

24

主题

666

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1072
最后登录
2023-4-10
发表于 2014-12-16 11:55:15 | 显示全部楼层
嗯,应该是这样子滴先试试吧!
回复 支持 反对

使用道具 举报

该用户从未签到

8

主题

52

帖子

0

中级会员

Rank: 3Rank: 3

积分
240
最后登录
2016-10-20
 楼主| 发表于 2014-12-16 14:27:32 | 显示全部楼层
霹雳小猪 发表于 2014-12-16 11:55
嗯,应该是这样子滴先试试吧!

顶,你太吊了!
真是移植系统用的,谢谢。
我试试,先!
回复 支持 反对

使用道具 举报

该用户从未签到

24

主题

666

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1072
最后登录
2023-4-10
发表于 2014-12-16 14:29:34 | 显示全部楼层
plabghhahacong1 发表于 2014-12-16 14:27
顶,你太吊了!
真是移植系统用的,谢谢。
我试试,先!

是移植uCOS-ii么?
回复 支持 反对

使用道具 举报

该用户从未签到

8

主题

52

帖子

0

中级会员

Rank: 3Rank: 3

积分
240
最后登录
2016-10-20
 楼主| 发表于 2014-12-16 15:07:23 | 显示全部楼层

是的。
以前只是在移植s12(x)系列的,移植没有进行过powerPC的移植。
另外,我多问一句,在进入临界区时,关了中断(wrteei 0)。
但是在出临界区时,只是将r3寄存器中的数据写入了msr寄存器中,但是并未执行开中断的操作(wrteei 1),此时在退出临界区以后,系统是什么时候执行的开中断操作?
回复 支持 反对

使用道具 举报

该用户从未签到

24

主题

666

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1072
最后登录
2023-4-10
发表于 2014-12-16 15:27:55 | 显示全部楼层
plabghhahacong1 发表于 2014-12-16 15:07
是的。
以前只是在移植s12(x)系列的,移植没有进行过powerPC的移植。
另外,我多问一句,在进入临界区时 ...

你想想为什么关中断前要存储msr寄存器的值?
因为msr寄存器中就有中断标记位,关中断前已近将msr保存了。出临界区时,只要恢复msr寄存器就可以了,这时中断的状态和进临界区之前的状态时一致的。
明白否?
回复 支持 反对

使用道具 举报

该用户从未签到

24

主题

666

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1072
最后登录
2023-4-10
发表于 2014-12-16 15:30:14 | 显示全部楼层
plabghhahacong1 发表于 2014-12-16 15:07
是的。
以前只是在移植s12(x)系列的,移植没有进行过powerPC的移植。
另外,我多问一句,在进入临界区时 ...

还有就是建议你去uCOS官网下载例程,里面有几个移植好的例程,但不一定正好有你想要的控制器型号的。大致相同,改改即可!
回复 支持 反对

使用道具 举报

该用户从未签到

8

主题

52

帖子

0

中级会员

Rank: 3Rank: 3

积分
240
最后登录
2016-10-20
 楼主| 发表于 2014-12-16 15:30:31 | 显示全部楼层
霹雳小猪 发表于 2014-12-16 15:27
你想想为什么关中断前要存储msr寄存器的值?
因为msr寄存器中就有中断标记位,关中断前已近将msr保存了。 ...

懂了,我傻擦了!
谢谢,想了半天了。
到处在看指令集,还以为是机器自动处理的这个动作!
谢谢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-20 14:01 , Processed in 0.111705 second(s), 31 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表