shadow ~= Backup
> Register 중 Write 만 가능한 (Read X)것들을 전역변수에 backup
> 언제든 그 값을 볼 수 있게
Register : Bit별로 설정이 가능한 Latch
>
Mask : 내가 원하는 부분만 보겠다
ex) 6번 bit를 보려면
if (reg_data & 0x20 )
> 0x20 : Mask
~= reg_data >>6 & 0x1 == reg_data & ( 1<<6)
+
한번에 2 bit 빼내는법
reg_data >> 6 & 0x3
: bit 6,7, 을 빼오게됨
1100000 >>6 : 0000011 & 11
반대로 넣는법은 OR !
클리어 하는법
다른 bit 는 모두 1 , 원하는 bit 를 0 한뒤에 &
reg_data & = ~(1<<3);
// ~(1<<3) : 3번째 bit : 0 > 11111011
기존 데이터 유지, 원하는 데이터는 초기화
XOR
reg_data ^= (1<<3)
3 번째 bit가 0> 1, 1>0
Data type : bit 단위로 관리
typedef struct
{
int32 flag : 3; /* flag 3 bit */
data_1 : 20 ; /* data_1 : 20 bit */
data_2 : 9 ; /* data_2 : 9 bit */
} REGISTER_SHADOW;
REGISTER_SHADOW R_0; // 이름을 R_0 으로 설정
R_0.flag = 2;
R_0.data_1 = 16;
R_0.data_2 = 22;
>>
data_1 : 20 ) 20bit 짜리 공간(Filed) > 0000 0000 0000 0000 0000
여기에 R_0.data_1 = 16 을 집어넣음 > 0000 0000 0000 0001 0000
'임베디드 > 임베디드 레시피' 카테고리의 다른 글
Synchronous ,Asynchronous (0) | 2025.01.15 |
---|---|
MACRO Technics (0) | 2025.01.14 |
Device Interface의 CS, address 이용 - LCD (0) | 2025.01.14 |
MCU의 외부통신, 컨트롤 (0) | 2025.01.14 |
Memory Device Control (0) | 2025.01.13 |