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