This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] UCD3138A:UCD3138A 软件中断问题

Guru**** 2340020 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/612223/ucd3138a-ucd3138a-software-interrupt-question

器件型号:UCD3138A

尊敬的兰先生

 我的问题是关于软件中断。

Q1:swi_number 的范围为0到13 (第2号除外), 为什么没有 case2?

#pragma INTERRUPT (software_interrupt、SWI)
空 software_interrupt (uint32 arg1、uint32 arg2、uint32 arg3、uint8 swi_number)

Q2:调用 这些编译为软件中断的函数  必须在特权模式下完成, 当这些函数完成后,它应该进入用户模式?  

      我找不到有关返回 用户模式的相关代码?

例如:  

案例12://清除完整性字。

寄存器 uint32 * program_index =(uint32 *) program_area;//存储程序的目标地址
寄存器 uint32 * source_index =(uint32 *) zero_out_integration_word_start;//用于 pflash 的源地址;
寄存器 uint32计数器;

for (counter=0;counter < 32;counter++)//将程序从 pflash 复制到 RAM

*(program_index++)=*(source_index++);

zero_out_integration_word ();
返回;

Q3: 案例12://清除完整性字。

       对于(counter=0;counter < 32counter++)//将程序从 pflash 复制到 RAM、

如何确定   pflash 中函数 zero_out_integration_word 的长度 为 32?  如果 PFLAS 中的 zero_out_integration_word.obj 的长度超过32个、会发生什么情况?  

同样、关于案例14的问题是什么?

案例14://擦除整个程序闪存

寄存器 uint32 * program_index =(uint32 *) program_area;//存储程序的目标地址
寄存器 uint32 * source_index =(uint32 *) clear_program_flash_start;//用于 pflash 的源地址;
寄存器 uint32计数器;

for (counter=0;counter < 32;counter++)//将程序从 pflash 复制到 RAM

*(program_index++)=*(source_index++);

clear_program_flash();
返回;

祝你一切顺利

Lei

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对于其中的许多问题、我建议阅读 ARM 架构参考手册的前几章。 您可以在此处找到它:

    www.scss.tcd.i/.../arm_arm.pdf

    以及其他地方。

    没有案例2、因为我们已将其删除。 分配案例是非常任意的

    实际上、当我们处于用户模式时、我们调用软件中断、而该调用会将我们置于特权模式。
    这是软件中断的主要原因-以有限和受控的方式执行危险的特权操作。

    当我们调用软件中断时、包含处理器模式以及其他内容的处理器状态寄存器保存在 spsr (保存的处理器状态寄存器)中。 当软件中断返回时、spsr 值被放置在 CPSR (当前处理器状态寄存器)中、这就是我们返回用户模式的方式。 但在某些情况下会改变 spsr 中的值。

    如果复制到 RAM 中的程序时间更长、它们可能无法正常工作。 在某些较新版本的代码中、我们对 RAM 使用 UNION 和特殊段、以使事情更加稳定和安全。 在这些版本中、如果代码过大、您将收到一条错误消息。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 LAN 先生:

    非常感谢 您的回复。

    心搏愿望

    Lei