ESP32 SPR

来自Jack's Lab
(版本间的差异)
跳转到: 导航, 搜索
(PRID)
(PRID)
 
第43行: 第43行:
 
</source>
 
</source>
  
 +
<br><br>
 +
 +
== CONFIG ==
 +
 +
<source lang=cpp>
 +
void dump_configid()
 +
{
 +
    uint32_t c0, c1;
 +
 +
    //asm volatile ("rsr %0, CONFIGID0" : "=r" (c0));
 +
    //asm volatile ("rsr %0, CONFIGID1" : "=r" (c1));
 +
    asm volatile ("rsr.configid0 %0" : "=r" (c0));
 +
    asm volatile ("rsr.configid1 %0" : "=r" (c1));
 +
 +
    printf("configid0 = 0x%08X\r\n", c0);
 +
    printf("configid1 = 0x%08X\r\n", c1);
 +
}
 +
</source>
 +
 +
<br><br>
 
<br><br><br><br>
 
<br><br><br><br>
 
<br><br><br><br>
 
<br><br><br><br>
 
<br><br><br><br>
 
<br><br><br><br>
<br><br><br><br>
+
<br><br><br><br>  
<br><br><br><br>
+
 
<br><br>
 
<br><br>

2016年11月22日 (二) 00:03的最后版本

目录

[编辑] 1 Overview

Speical Registers of ESP32 (Xtensa) hold the majority of the state added to the processor.



[编辑] 2 R/W SPR

 rsr.* a2
 wsr.* a2
 xsr.* a2      <--- exchanges the values in a General Register (GPR) and a Special Register (SPR)

For example:

rsr.prid a2



[编辑] 3 PRID

Processor ID

PRID on the ESP108 architecture (ESP32) :

  • 0xCDCD on the PRO processor
  • 0xABAB on the APP CPU


We can distinguish between the two by simply checking bit 1: It's 1 on the APP and 0 on the PRO processor.


void dump_prid()
{
    uint32_t pd;

    //asm volatile ("rsr %0, PRID" : "=r" (pd));
    asm volatile ("rsr.prid %0" : "=r" (pd));
    printf("prid = 0x%08X\r\n", pd);
}



[编辑] 4 CONFIG

void dump_configid()
{
    uint32_t c0, c1;

    //asm volatile ("rsr %0, CONFIGID0" : "=r" (c0));
    //asm volatile ("rsr %0, CONFIGID1" : "=r" (c1));
    asm volatile ("rsr.configid0 %0" : "=r" (c0));
    asm volatile ("rsr.configid1 %0" : "=r" (c1));

    printf("configid0 = 0x%08X\r\n", c0);
    printf("configid1 = 0x%08X\r\n", c1);
}





















个人工具
名字空间

变换
操作
导航
工具箱