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.

TMS320C6678: 关于Supervisor mode和Uer mode中如何进入User mode

Part Number: TMS320C6678

最近在研究TMS320C6678的Supervisor mode和User mode这两种运行模式,根据指令集文档SPRUGH7 Chapter9的描述,中断或者异常会让处理器进入Supervisor mode。但我在CCS里进行Debug调试的时候,发现TSR寄存器的CXM两位一直是00,也就是一直处于Supervisor mode下。然后我写了一个测试的程序,在这个程序里面读取TSR寄存器中的CXM,然后把这个测试程序固化到Nor flash中,然后上电脱机运行,发现在这种情况下CXM的值还是00,也就说这种情况下处理器也在Supervisor mode下。之前的这两种测试都是不带操作系统的。因此我想询问怎么才能进入User mode,文档中所说的User mode Task到底是什么意思,是否是只能在有操作系统的情况下才会有Supervisor mode和User mode的区分。

  • 这个功能我们不大用,请问您是有什么特殊应用要在裸机下进入user mode吗?User mode Task我的理解是user mode下要完成的任务。

    我看到文档上还要执行B NRP或者B IRP指令,您可以尝试一下。

    Both cases are handled by one of two related procedures:

    • Place the address in NRP, ensure that the NTSR.CXM bit is set to 1, and execute a B NRP instruction to force a context switch to the User mode task.

    • Place the desired address in IRP, ensure that the ITSR.CXM bit is set to 1, and execute a B IRP instruction to force a context switch to the User mode task.

  • 首先感谢您的回复,这样的方式我进行了尝试,发现在运行了 B NRP之后,跳转到响应的地址之后TSR中的CXM的确变为了01,也就是说进入了User mode。只是我个人不太能够理解,我之前的认知是普通情况下处理器的执行状态应该是比较低权限的User mode,Debug因为是使用了仿真器对设备进行调试所以这种情况下是Supervisor mode是可以理解的,所以说我不清楚为什么脱机运行也是Supervisor mode,因为我认为脱机运行程序应该是DSP在实际应用中比较常见的方式。我想要知道的是,怎么在普通状态下运行一个user mode task,这样我就可以在这种状态下进入Supervisor mode做一些测试。

    我之前的猜测是可能这种user mode task指的是在TI提供的SYS/BIOS操作系统下的一个用户程序或者一个任务,这种时候处理器的默认状态是否是User mode,因为我没有使用过SYS/BIOS操作系统进行开发,所以我希望有进行过这种开发情况的专家能进行解惑。

  • 所以说我不清楚为什么脱机运行也是Supervisor mode

    RESET后,默认是进入supervisor模式的。
    Reset forces the CPU to the Supervisor mode. Execution of the reset interrupt service fetch packet (ISFP) begins in Supervisor mode.
    https://www.ti.com/lit/ug/sprugh7/sprugh7.pdf

    因为我没有使用过SYS/BIOS操作系统进行开发

    SYS/BIOS是在supervisor mode下运行的。

  • 好的,那这样看来的话,是否可以理解为正常情况下模式都是Supervisor mode,在C6678的各种应用场景下,默认的运行模式都是Supervisor mode呢。如果说是的话,这和我之前的开发经验有些不同,所以不太能理解。

  • 如果可以的话,我希望能得到一些在User mode 运行的应用场景或者实际案例

  • 这可能是应用层的应用场景,我们的案例都是底层的。您可以参考下面的帖子,sys/bios是基于supervisor mode的。
    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/121862/c6748-supervisor-privileged-mode

  • 您好,我现在的理解是这样的:SYS/BIOS操作系统是运行在Supervisor mode下的,这一点我是可以理解的,我想知道在SYS/BIOS中进行开发,创建了用户任务或者用户程序,这些用户程序是否是运行在User mode 下的。因为之前有过ARM的开发经验,它就是运行的linux操作系统,linux的权限是属于特权级别的,而在linux下写一个用户程序,用户程序的权限是普通级别的,我认为同样是带操作系统的嵌入式处理器,情形应该是相似的。

    我最近在查找相关资料,并没有发现一些在User mode下进行开发的实际案例,在CorePac 文档下有这么一段话,我不太知道具体的含义:

    这里说User线程的例子是vocoders和end application我不太理解,希望能有一些实际的案例,最好是CCS工程。