微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > 硬件电路设计讨论 > 为什么这用了shadow register ?

为什么这用了shadow register ?

时间:10-02 整理:3721RD 点击:

C-Source Code Generated Assembly
Memory Instruction
// Enable only 2801 Peripheral Clocks
union PclkCR0_reg shadowPCLKCR0;
EALLOW; 3F82A7 EALLOW
shadowPCLKCR0.bit.rsvd1 = 0; 3F82A8 MOV @AL,#0x47D8
shadowPCLKCR0.bit.TBCLKSYNC = 0; 3F82AA MOVW DP,#0x01C0
shadowPCLKCR0.bit.ADCENCLK = 1; // ADC 3F82AC MOV @28,AL
shadowPCLKCR0.bit.I2CAENCLK = 1; // I2C 3F82AD EDIS
shadowPCLKCR0.bit.rsvd2 = 0;
shadowPCLKCR0.bit.SpicENCLK = 1; // SPI-C
shadowPCLKCR0.bit.SPIDENCLK = 1; // SPI-D
shadowPCLKCR0.bit.SPIAENCLK = 1; // SPI-A
shadowPCLKCR0.bit.SPIBENCLK = 1; // SPI-B
shadowPCLKCR0.bit.SCIAENCLK = 1; // SCI-A
shadowPCLKCR0.bit.SCIBENCLK = 0; // SCI-B
shadowPCLKCR0.bit.rsvd3 = 0;
shadowPCLKCR0.bit.ECANAENCLK= 1; // eCAN-A
shadowPCLKCR0.bit.ECANBENCLK= 0; // eCAN-B
SysctrlRegs.PCLKCR0.all = shadowPCLKCR0.all;
EDIS;

什么16位的PCLKCR0 也用了shadow register ?有什么好处啊?


shadow register 这个坦白说是第一次听到,百度了一下,查到了这个:Shadow register 影子寄存器
是PIC单片机词汇
比如linux中,ES,CS,SS等段寄存器存放的是段选择子,每个都有对应的影子寄存器用来存放段描述符,cpu会根据段寄存器内容自动装载对应的影子寄存器,所以访问同一个段的时候不用总是访问内存来读段描述符来确定段基址,也有些别的用途

shadow register是一种保护机制。
有一些寄存器不能随时改写,随时改写会影响硬件的时序或者带来其他问题,只有在特定时刻可以改写。
采用shadow register允许任意时刻的修写寄存器的内容,先暂存在shadow寄存器里面,合适的时刻再把s影子寄存器的内容搬到相应的功能寄存器里面。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top