ESP32 SPR
来自Jack's Lab
(版本间的差异)
(→R/W SPR) |
(→PRID) |
||
| (未显示1个用户的3个中间版本) | |||
| 第16行: | 第16行: | ||
rsr.prid a2 | rsr.prid a2 | ||
</pre> | </pre> | ||
| + | |||
| + | <br><br> | ||
| + | |||
| + | == 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. | ||
| + | |||
| + | |||
| + | <source lang=cpp> | ||
| + | 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); | ||
| + | } | ||
| + | </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> | ||
| 第21行: | 第66行: | ||
<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);
}