head.s分析(10):转入中断15

本文解析了ADSP BF561 DSP在启动过程中的关键代码段,阐述了如何通过设置EVT15中断并利用软中断保持处理器在超级用户模式下运行,同时允许处理较低优先级的事件。

 

快乐虾

http://blog.youkuaiyun.com/lights_joy/

lights@hb165.com

  

本文适用于

ADI bf561 DSP

uclinux-2008r1.5-rc3 (移植到vdsp5)

Visual DSP++ 5.0(update 5)

  

欢迎转载,但请保留作者信息

 

 

       /* This section keeps the processor in supervisor mode

        * during kernel boot.  Switches to user mode at end of boot.

        * See page 3-9 of Hardware Reference manual for documentation.

        */

 

       /* EVT15 = _real_start */

 

       p0.l = lo(EVT15);

       p0.h = hi(EVT15);

       p1.l = _real_start;

       p1.h = _real_start;

       [p0] = p1;

       csync;

 

       p0.l = lo(IMASK);

       p0.h = hi(IMASK);

       p1.l = IMASK_IVG15;

       p1.h = 0x0;

       [p0] = p1;

       csync;

 

       raise 15;

       p0.l = .LWAIT_HERE;

       p0.h = .LWAIT_HERE;

       reti = p0;

#if ANOMALY_05000281

       nop; nop; nop;

#endif

       rti;

 

.LWAIT_HERE:

       jump .LWAIT_HERE;

ENDPROC(__start)

这段代码设置了EVT15的入口,打开中断15的掩码,然后直接使用一个软中断,这样在rti之后将跳转到_real_start开始执行。这么做的原因在Hardware Reference manual中说明,看看到底是么回事:

For non-OS environments, application code should remain in Supervisor mode so that it can access all core and system resources. When RESET is de-asserted, the processor initiates operation by servicing the reset event. Emulation is the only event that can pre-empt this activity. Therefore, lower priority events cannot be processed.

One way of keeping the processor in Supervisor mode and still allowing lower priority events to be processed is to set up and force the lowest priority interrupt (IVG15). Events and interrupts are described further in "Events and Sequencing" on another page. After the low priority interrupt has been forced using the RAISE 15 instruction, RETI can be loaded with a return address that points to user code that can execute until IVG15 is issued. After RETI has been loaded, the RTI instruction can be issued to return from the reset event.

The interrupt handler for IVG15 can be set to jump to the application code starting address. An additional RTI is not required. As a result, the processor remains in Supervisor mode because IPEND[15] remains set. At this point, the processor is servicing the lowest priority interrupt. This ensures that higher priority interrupts can be processed.

要理解这段话,先得理解561内核的几种模式及其转换:

bf561模式转换图

 

 

dsp复位后,实际处于RESET的状态,所执行的第一行代码实际是做为reset中断服务例程来运行的,因此在最后使用了一个rti语句结束此中断服务程序,此时将进入user模式,由于在rti之前设置了reti寄存器的值,pc将进入.LWAIT_HERE的这个死循环。又由于之前使用了raise 15触发了一个软中断,因此进入中断15的服务程序,即_real_start

在使用u-boot引导的时候,由于同样的原因,u-boot的主循环一直是在中断15的服务程序中的,引导内核时同样处于这种状态,此时rti退出的将是u-boot的那个中断服务。

 

 

  

 

1       参考资料

head.s分析(1):保存u-boot传递过来的指针(2009-1-19)

head.s分析(2)SYSCFG配置(2009-1-19)

head.s分析(3):数据及指针寄存器清0(2009-1-19)

head.s分析(4):关闭CACHE(2009-01-19)

head.s分析(5):关闭串口(2009-01-19)

head.s分析(6):栈指针初始化(2009-01-19)

head.s分析(7)init_early_exception_vectors(2009-1-19)

head.s分析(8):配置PLLSDRAM(2009-01-20)

head.s分析(9)EBIU配置(2009-01-20)

 

系统支持前后端分离架构,涵盖微信、支付宝、百度、头条等主流平台的小程序、APP及公众号,内置多种常见支付方式,具备完善的订单处理机制,界面设计美观,是一款功能完备的商城开源平台。毕业设计是高校教育中的一项关键实践性任务,用于评估学生在专业领域内的知识掌握程度、实践能力和创新思维。该任务通常要求学生结合所学理论,针对某一具体问题提出可行的解决方案或开展一项具有实际价值的研究项目。 在选题阶段,学生需根据个人兴趣、专业方向及现实需求进行选择,并在导师指导下明确研究目标与核心问题,制定研究计划与实施方案。整个过程通常包含资料查阅、需求分析、系统设计、开发实现及测试优化等多个环节,确保研究的完整性与科学性。 在研究过程中,学生需具备较强的自主分析与问题解决能力,可能通过实验、调研、案例研究等方式收集数据并验证假设,从而提升专业技能与实际操作能力。撰写毕业设计报告是核心环节之一,需详细记录研究过程、方法、结果及结论,以全面展示研究成果。同时,这一过程也有助于提升学生的学术表达能力与逻辑思维水平。 最终,毕业设计成果将由导师及相关专家进行评审,评价标准涵盖创新性、应用价值、研究方法的合理性及论文撰写质量等方面。毕业设计的成绩将作为学生学业评估的重要依据,直接影响其毕业资格与学位授予。 总体而言,毕业设计是高校教学体系中的重要组成部分,不仅有助于学生深化专业知识,还能锻炼其独立研究与实践能力,为未来职业发展奠定良好基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌云阁主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值