본문 바로가기

Hacked Brain/embeddedland.net

2-2-1 레지스터파일

 80C196KC에 어드레스 0000H ~ 01FFH의 256바이트 RAM이 있으며,
00H~FFH의 256바이트 중 특수기능레지스터(SFR)24를 제외한 232바이트가
사용자 레지스터 파일로 되어있다.

사용자가 주로 프로그램을 만드는 부분인 레지스터 파일과 추가 RAM부분은
80C196KC를 사용하려면 잘 알고 있어야 한다.

01FFH

0100H
상위 RAM 윈도우 이용한 직접번지지정 데이터 액세스
00FFH

001AH
레지스터 파일 직접,간접,인덱스번지지정 이용 데이터 액서스
0019H

0018H
Stack Pointer 스택 포인터
0017H

0000H
SFR I/O , 다른 주변 기능 제어
  1. 레지스터 파일(Register File)
    80C196KC에는 레지스터파일이라는 대용량 레지스터를 베이스로 연산처리하는
    Register to register architecture로 구성되어 있다. 이 레지스터 파일은
    232바이트의 RAM(18H~0FFH)으로 사용할수 있고, 232바이트보다 큰 RAM은 윈도우를
    이용해서 이용할 수 있다. 이 레지스터 파일은 RALU가 사용하므로, 232개의 ACC 가 있는것과 같다.
    이 메모리는 파워다운모드에서도 유지된다. 따라서, 칩상태를 알수 있다. 상위 RAM은 SFR의 윈도우를
    이용 0100H~01FFH의 256바이트를 매핑해 RALU에 이용할 수 있다.
  2. 스택포인터
    18,19H는 스택으로 되어있으며, 프로그램 초기화,레지스터파일이나 외부메모리중 지정가능하다.
    초기설정시 제일 높은 번지로 한다. 연산시 감소.
  3. SFR
    모든 I/O 제어. read/write 가능하며, 특수기능의 레지스터들이 구성되어있다.
    포트 3,4 를 제외하고 주변장치는 이 레지스터를 이용한다.
  4. 수평윈도우
    WSR의 0~3비트를 수평, 4~6비트를 수직윈도우라 한다. 수직윈도우는 상위 RAM을 액세스한다.
    WSR=1일경우, 즉 수평윈도우가 1이면 PT_SERVER, PWM, TIMER2, A/D등의 기능을 제어할수 있다.
    WSR=15인경우는 WSR=0인 경우와 반대로, 리드가능한 레지스터와 라이트 가능한 레지스터가 바뀌게된다.
    즉, WSR=0일때 리드 전용이 WSR=15일때 라이트 전용으로 바뀌게 된다.
  5. 수직윈도우
    수직위도우는 레지스터 직접번지지정시 액세스할 수 있는 메모리양을 확장시키는 방법이다.
    196KC에서는 8bit 직접번지지정만 가능하다.
    수직윈도우를 사용하려면
      레지스터파일(00H~FFH)에 블록을 지정
      상위 RAM(0100F~01FFH)에 지정된 블록으로 매핑
      RAM을 직접 번지지어을 이용해 액서스
    여기서 레지스터의 블록을 윈도우라 칭하고, WSR을 이용해 블록을 지정한다.
    수직윈도우 레지스터파일(00H~FFH)에서
      128바이트 블록(80H~FFH) -> 2개 블록 생성
      64바이트 블록(C0H~FFH) -> 4개 블록 생성
      32바이트 블록(E0H~FFH)
    -> 8개 블록 생성
    설정한다.

 32바이트윈도우   64바이트윈도우   128바이트윈도우  
 WSR 베이스
어드레스
WSR 베이스
어드레스
베이스
어드레스
 
 x100 1111 01E0H  x010 0111  01C0H x001 0011  0180H
 x100 1110  01C0H  x010 0110  0180H  x001 0010  0100H
 x100 1101  01A0H  x010 0101  0140H  매핑영역 0080H
 x100 1100  0180H  x010 100  0100H    
 x100 1011  0160H 매핑영역  00C0H    
 x100 1010  0140H        
 x100 1001  0120H        
 x100 1000  0100H        
 매핑영역 00E0H        

WSR 7bit의 경우, 윈도우에는 쓰이지 않고, DMA(메모리 직접 엑서스) 제어에 사용
WSR  4~6bit 가 0일경우에는 0~3bit는 수평윈도우에서 사용함.
사용하지 않을려면 모든 비트를 클리어 하면된다.

수직윈도우 사용방법:
1. 윈도우 크기결정
2. 윈도우될 블록
3. 블록 베이스 어드레스의 상대번지


Ex1) 0180H~01BFH 가 64바이트블록되어 윈도우되어 있을때, 01ACH를 엑세스하는 방법
64바이트 윈도우를 설정하려면 WSR의 6ibt = 0, 5bit = 1로 셋팅
베이스 어드레스가 0180H이기 때문에, WSR = x010 0110 = 26H가 된다.
01ACH는 베이스 어드레스보다 2CH번지 위에 있으므로(01ACH-0180H=2CH)
매칭어드레스는 00C0H + 2CH = ECH가 됨.
  

Ex2) 상위 레지스터 파일 01DCH를 64바이트 윈도우로 접근하려면?
01DCH의 베이스 어드레스는 01C0H가 되고 이때의 WSR = x010 0111 = 27H가 된다.
Offset 은 01DCH - 01C0H = 0010H 이 된다.
즉, 여기서의 레지스터 파일 어드레스는 00C0H + 0010H = 00D0H 가 된다.
결국 레지스터 파일 00C0H~00FFH를 엑세스하면, 메모리 어드레스 01C0H~01FFH를 액세스
하는 것이 된다.



이 글은 스프링노트에서 작성되었습니다.

Daum 블로거뉴스
블로거뉴스에서 이 포스트를 추천해주세요.