ST6 및 ST7

ST6 and ST7
ST62E40 마이크로컨트롤러, ST6 아키텍처 기반

ST6ST7STMicroelectronics의 8비트 마이크로 컨트롤러 제품군입니다.그것들은 세탁기와 같은 작은 임베디드 어플리케이션에서 흔히 사용된다.

이들은 비슷한 주변기기를 사용하며 동일한 [1][2]제품 라인의 일부로 판매되지만, 두 아키텍처는 실제로 상당히 다릅니다.

양쪽 모두 대부분의 작업에 사용되는8비트 어큐뮬레이터와 메모리 어드레싱에 사용되는2개의 8비트 인덱스 레지스터(X 및 Y)를 갖추고 있습니다.또, 양쪽 모두 8비트 명령 뒤에 최대 2바이트의 오퍼랜드가 있으며, 양쪽 모두 메모리의 개별 비트에서의 조작과 분기를 지원합니다.

거기서 유사점은 끝이 난다.

ST6는 8비트(256바이트) 데이터 주소 공간과 별도의 12비트(4096바이트) 프로그램 공간을 갖춘 Harvard 아키텍처입니다.피연산자는 항상 1바이트 길이이며, "8비트 즉시 메모리 주소로 8비트 이동"과 같은 두 개의 피연산자를 지원합니다.서브루틴 콜은 별도의 하드웨어 스택을 사용하여 이루어집니다.데이터 레지스터(프로그램 카운터 또는 플래그가 아님)는 메모리 매핑됩니다.

ST6의 어드레싱 모드는 즉시 8비트 절대 메모리 주소와 레지스터 간접 모드(X) 및 (Y)로 제한됩니다.

ST7은 단일 16비트(64kiB) 주소 공간을 가진 von Neumann 아키텍처입니다.RAM의 첫 번째 256바이트(제로 페이지)는 유연성이 뛰어납니다."test bit and branch(테스트 비트와 분기)"를 제외한 2개의 연산자 명령은 없습니다.레지스터는 메모리 매핑되지 않으며 서브루틴 콜에 범용 RAM(및 스택포인터 레지스터)을 사용합니다.

ST7은 base+index 및 double-interdirect 등 다양한 어드레싱 모드를 지원합니다.

ST6 마이크로컨트롤러 패밀리 3종류: ST62E01, ST62E20, ST62E25

ST6 아키텍처

ST6에는 64바이트의 RAM과 4096바이트의 프로그램 ROM이 있습니다. ROM의 낮은 2K 섹션을 뱅크 전환하면 더 많은 양의 RAM에 액세스할 수 있습니다.

RAM 주소 공간은 실제로 256바이트로 다음과 같이 나뉩니다.

  • 0 ~ 63 : 미실장
  • 64~127: 뱅크 전환 가능한 창으로 프로그램 ROM 및 데이터 EPROM에 접속할 수 있습니다.
  • 128~191: 범용 RAM
  • 192 ~ 255 : 페리페럴 제어 레지스터(GPIO 포트, 타이머 등)어큐뮬레이터는 주소 255로 매핑되지만, 보다 일반적으로 암묵적으로 주소가 지정됩니다.

주소 공간에는 12비트 프로그램카운터와 관련된 하드웨어 스택(모델에 따라 4~6레벨)이 매핑되지 않습니다.2개의 상태 비트(carry 0)만 있으며 프로세서 모드에 따라 뱅크되며 일반, 인터럽트 및 마스크 불가능한 인터럽트 동작에 대한 별도의 상태 비트가 있습니다.

처음 4개의 범용 RAM 위치는 X, Y, V 및 W 레지스터라고도 하며, 일부 명령에서는 특수한 쇼트어드레싱 모드를 사용하여 이들 레지스터에 액세스할 수 있습니다.X 및 Y 레지스터는 인덱스 레지스터 역할을 하며 간접 주소 지정 모드를 사용할 수 있습니다.(X)그리고.(Y).

명령어 세트는 1바이트의 opcode로 구성되어 있으며, 그 뒤에 최대 2바이트의 오퍼랜드가 이어집니다.명령 세트는 다음과 같이 요약할 수 있습니다.

ST6 패밀리 명령[3] 집합
7 6 5 4 3 2 1 0 b2 b3 니모닉 C Z 묘사
오프셋 동작 0 조건부 브랜치(5비트 PC 상대)
오프셋 0 0 0 JRNZ 주소 Z == 0인 경우 PC + simm5로 이동합니다.
오프셋 1 0 0 JRZ 주소 Z == 1인 경우 PC + simm5로 이동합니다.
오프셋 0 1 0 JRNC 주소 C == 0인 경우 PC + simm5로 이동합니다.
오프셋 1 1 0 JRC 주소 C == 1인 경우 PC + simm5로 이동합니다.
imm4 c 0 0 1 imm8 무조건 브랜치(12비트 절대)
imm4 0 0 0 1 imm8 문의 imm12 PC를 푸시하여 12비트 주소로 이동
imm4 1 0 0 1 imm8 JPimm12 12비트 주소로 점프
0 0 1 0 1 (표준)
조정하다 c 1 c 1 0 1 레지스터 조작(X, Y, V 또는 W)
조정하다 0 1 0 1 0 1 INC 레지스트 Z 레지스터를 늘립니다.Z는 설정되지만 C는 설정되지 않습니다.
조정하다 1 1 0 1 0 1 LD A,reg Z A : = {X, Y, V 또는 W}
조정하다 0 1 1 1 0 1 DEC 레지스트 Z 감소 레지스터Z는 설정되지만 C는 설정되지 않습니다.
조정하다 1 1 1 1 0 1 LD reg,A Z {X, Y, V 또는 W} : = A
동작 코드 0 1 1 0 1 기타 작업
0 0 0 0 1 1 0 1 주소 imm8 LDI 주소,imm8 RAM을 8비트 즉시 값으로 설정
1 0 0 0 1 1 0 1 (표준)
0 1 0 0 1 1 0 1 재시도 인터럽트에서 돌아오다.PC를 팝하고 플래그를 복원합니다.
1 1 0 0 1 1 0 1 리트 서브루틴에서 돌아오다하드웨어 스택에서 PC를 팝합니다.
0 0 1 0 1 1 0 1 COM A Z C 보완: C : = msbit (A), A : = ~A
1 0 1 0 1 1 0 1 RLC A C A : = A + A + C
0 1 1 0 1 1 0 1 이제 그만 다음 인터럽트가 발생할 때까지 프로세서, 클럭, 대부분의 주변기기 정지
1 1 1 0 1 1 0 1 잠깐만요. 다음 인터럽트가 발생할 때까지 프로세서를 정지합니다.클럭은 계속됩니다.
조금 동작 0 1 1 주소. ? 비트 연산(절대 주소만)
조금 0 0 0 1 1 src 심8 JRR 비트, src, 주소 C C : = src.bit. 재설정되면 PC+simm8로 점프합니다(지우기).
조금 1 0 0 1 1 src 심8 JRS 비트, src, 주소 C C : = src.bit. 설정된 경우 PC+simm8로 이동합니다.
조금 0 1 0 1 1 dst RES 비트, dst dst.bit 리셋(0으로 설정)
조금 1 1 0 1 1 dst SET 비트, dst dst.bit를 (1로) 설정합니다.
동작 코드 데이터. 1 1 1 ? RAM 또는 즉시 ALU 조작
동작 코드 0 0 1 1 1 (X) 피연산자는 (X)
동작 코드 0 1 1 1 1 (Y) 오퍼랜드가 (Y)
동작 코드 1 0 1 1 1 imm8 imm8 피연산자는 8비트 즉시(소스만)
동작 코드 1 1 1 1 1 주소 주소 오퍼랜드는 8비트 RAM 주소입니다.
0 0 0 src 1 1 1 ? LD A, src Z A : = src
1 0 0 dst 1 1 1 ? LD dst,A Z dst : = A (금지)
0 1 0 src 1 1 1 ? ADD A, src Z C A : = A + src
1 1 0 src 1 1 1 ? 서브 A, src Z C. A : = A - src
0 0 1 src 1 1 1 ? CP A, src Z C. A − src
1 0 1 src 1 1 1 ? AND A, src Z A : = A & src
0 1 1 dst 1 1 1 ? INC dst Z dst : = dst + 1 (금지)
1 1 1 dst 1 1 1 ? DEC dst Z dst : = dst - 1 (금지)

②: ^분명히 ST6 패밀리의 모델마다 감산 후의 반송 비트 값에 대해 다른 규약을 사용합니다.ST60 프로세서는 감산이 부족할 경우 [3]: 21–22,42 비트를 클리어하는 "carry" 규칙을 사용하는 반면 ST62 및 ST63 프로세서는 비트를 설정하는 "borrow" 규칙을 사용합니다.

ST7 아키텍처

ST7에는 어큐뮬레이터, X 및 Y 인덱스 레지스터, 스택 포인터, 프로그램 카운터 및 상태 코드 레지스터의 6개의 레지스터가 있습니다.또, 이중 간접 어드레싱에 의해, RAM 의 제로 페이지가 추가 레지스터로서 기능할 수 있습니다.드물지만 유용한 기능은 인터럽트가 이들 레지스터 중4개를 스택(A와 X 및 통상의 PC와 CC)에 푸시하고 인터럽트 반환이 이들 레지스터를 복원하는 것입니다.

ALU 명령어는 2개의 오퍼랜드와 1개의 오퍼랜드의 2개의 카테고리로 분류됩니다.

2-operand 명령에서는 첫 번째 소스로 어큐뮬레이터를 사용합니다.어드레싱 모드에서는, 다음의 2번째의 송신원을 지정합니다.

  • 8비트 즉시 지원
  • 8비트 절대주소
  • 16비트 절대 주소
  • 색인화(X)
  • 인덱스 + 8비트 오프셋(주소 8,X)
  • 인덱스 + 16비트 오프셋(주소 16,X)

대상은 보통 어큐뮬레이터이지만 몇 가지 명령에 의해 두 번째 소스가 수정됩니다.(이 경우 즉시 오퍼랜드는 금지됩니다.)

1 오퍼랜드명령에서는, 송신원과 수신처의 양쪽 모두에 대해서 지정된 오퍼랜드를 사용합니다.오퍼랜드는 다음과 같습니다.

  • 어큐뮬레이터 A
  • X 레지스터
  • 8비트 절대주소
  • 색인화(X)
  • 인덱스 + 8비트 오프셋(주소 8,X)

Register + offset은 전폭 합계를 계산하므로 8비트 형식은 최대 255+255 = 510의 메모리를 주소 지정할 수 있습니다.

위의 명령어 외에 3개의 프리픽스바이트가 있습니다.이것들은, 어느 명령어에나 부가할 수 있습니다.

  • PDY(0x90)는 X 레지스터에 대한 모든 참조를 Y로 변경합니다.이것에 의해, (Y), (address 8, Y) 및 (address 16, Y) 어드레싱 모드가 가능하게 됩니다.이는 암묵적인 피연산자에도 영향을 미치므로 "load X" 명령은 "load Y"가 됩니다.그 결과 로드 X는 X 상대 어드레싱 모드만 사용할 수 있고 로드 Y는 Y 상대 어드레싱 모드만 사용할 수 있습니다.
  • PIX(0x92)는 명령에 간접 스텝을 추가합니다.opcode 바이트 뒤의 8비트 또는 16비트주소는 8비트 또는 16비트주소를 유지하는 메모리 위치의 8비트주소로 대체됩니다(후자는 빅엔디안 순서).그 후, 이것은 통상대로 X 레지스터에 의해 색인화 될 수 있습니다.이것에 의해, (address8), (address16), ([address8], X) 및 ([address8.w], X) 어드레싱 모드가 가능하게 됩니다.
  • PIY(0x91)는 위의 효과를 조합합니다.이것에 의해, ([address8]),Y) 및 ([address 8.w], Y) 어드레싱 모드.('로드 Y' 및 '스토어 Y' 명령의 일부로 다른 모드와 함께 사용할 수도 있습니다).
ST7 패밀리 명령[4] 집합
7 6 5 4 3 2 1 0 b2 b3 니모닉 묘사
0 0 0 c 조금 v 주소. ? 비트 조작
0 0 0 0 조금 0 주소 8 흐느껴 울다 BTJT 주소 8, #bit, 라벨 소스 비트가 True인 경우 PC + soff8로 점프합니다(설정).
0 0 0 0 조금 1 주소 8 흐느껴 울다 BTJF 주소8, #bit, 라벨 소스 비트가 false인 경우 PC + soff8로 점프합니다(클리어).
0 0 0 1 조금 0 주소 8 BSET 주소 8, #bit 지정된 비트를 1로 설정
0 0 0 1 조금 1 주소 8 BREES 주소 8, #bit 지정된 비트를 0으로 재설정(지우기)
0 0 1 0 조건. 흐느껴 울다 조건부 분기(8비트 상대 오프셋)
0 0 1 0 0 0 0 0 흐느껴 울다 JRA 라벨 브랜치 상시(참)
0 0 1 0 0 0 0 1 흐느껴 울다 JRF 라벨 브랜치 없음(false)
0 0 1 0 0 0 1 0 흐느껴 울다 JRUGT 라벨 부호 없는 경우 분기(C=0 및 Z=0)보다 큼
0 0 1 0 0 0 1 1 흐느껴 울다 JRULE 라벨 부호 없는 경우 분기(C=1 또는 Z=1)보다 작거나 같을 경우 분기
0 0 1 0 0 1 0 0 흐느껴 울다 JRNC 라벨 캐리 없는 경우 분기(C=0)
0 0 1 0 0 1 0 1 흐느껴 울다 JRC 라벨 분기(C=1)
0 0 1 0 0 1 1 0 흐느껴 울다 JRNE 라벨 동일하지 않은 경우 분기(Z=0)
0 0 1 0 0 1 1 1 흐느껴 울다 JREQ 라벨 분기(같으면) (Z=1)
0 0 1 0 1 0 0 0 흐느껴 울다 JRNH 라벨 하프 캐리가 아닌 경우 분기(H=0)
0 0 1 0 1 0 0 1 흐느껴 울다 JRH 라벨 하프캐리일 경우 분기(half-carry)
0 0 1 0 1 0 1 0 흐느껴 울다 JRPL 라벨 분기 if 플러스(N=0)
0 0 1 0 1 0 1 1 흐느껴 울다 JRMI 라벨 마이너스인 경우 분기(N=1)
0 0 1 0 1 1 0 0 흐느껴 울다 JRNM 라벨 인터럽트 마스크가 아닌 경우 분기(M=0)
0 0 1 0 1 1 0 1 흐느껴 울다 JRM 라벨 인터럽트가 마스크된 경우 분기(M=1)
0 0 1 0 1 1 1 0 흐느껴 울다 JRIL 라벨 인터럽트 회선이 낮은 경우 분기
0 0 1 0 1 1 1 1 흐느껴 울다 JRIH 라벨 인터럽트 회선이 높은 경우 분기
0 모드 동작 코드 ? 원오퍼랜드 명령
0 0 1 1 동작 코드 주소 8 OP 주소 8 8비트 절대주소
0 1 0 0 동작 코드 오퍼 A 어큐뮬레이터
0 1 0 1 동작 코드 오퍼 X X 레지스터(프리픽스가 있는 Y 레지스터)
0 1 1 0 동작 코드 주소 8 OP(주소 8,X) 8비트 주소 + X
0 1 1 1 동작 코드 OP(X) 오프셋 없이 인덱싱됨
0 모드 0 0 0 0 ? NEG 오퍼랜드 2의 만족도가 부정이다.
0 모드 0 0 0 1 ? (표준)
0 모드 0 0 1 0 ? (표준)
0 1 0 0 0 0 1 0 MUL X,A X:A : = X × A (MUL Y, A 프리픽스 포함)
0 모드 0 0 1 1 ? CPL 오퍼랜드 자신의 보완물, 논리적이지 않음
0 모드 0 1 0 0 ? SRL 오퍼랜드 논리적으로 오른쪽으로 이동합니다.Msbit 클리어, lsbit 전송.
0 모드 0 1 0 1 ? (표준)
0 모드 0 1 1 0 ? RRC 오퍼랜드 캐리(carry)를 통해 오른쪽으로 회전합니다(operand:C) : = (C: 오퍼랜드)
0 모드 0 1 1 1 ? SRA 오퍼랜드 오른쪽 산술로 전환합니다.Msbit가 보존되어 있어 운반할 수 있습니다.
0 모드 1 0 0 0 ? SLL 오퍼랜드 왼쪽으로 이동.운반할 Msbit.
0 모드 1 0 0 1 ? RLC 오퍼랜드 캐리를 통해 좌측으로 회전합니다.
0 모드 1 0 1 0 ? DEC 오퍼랜드 감소(N 및 Z 설정, 영향을 받지 않음)
0 모드 1 0 1 1 ? (표준)
0 모드 1 1 0 0 ? INC 오퍼랜드 증가(N 및 Z 설정, 영향 없음)
0 모드 1 1 0 1 ? TNZ 오퍼랜드 0이 아닌 테스트.오퍼랜드를 기준으로 N과 Z를 설정합니다.
0 모드 1 1 1 0 ? SWAP 오퍼랜드 오퍼랜드의 절반을 교환합니다(4비트 회전).
0 모드 1 1 1 1 ? CLR 오퍼랜드 오퍼랜드를 0으로 설정하고 N과 Z를 fixed values.operand로 설정합니다.
1 0 0 동작 코드 기타 지시사항없음은 조건 코드를 암묵적으로 설정합니다.
1 0 0 0 0 0 0 0 IRET 인터럽트에서 복귀(팝 CC, A, X, PC)
1 0 0 0 0 0 0 1 리트 서브루틴에서 복귀(팝 PC)
1 0 0 0 0 0 1 0 트랩 강제 트랩 인터럽트
1 0 0 0 0 0 1 1 (표준)
1 0 0 0 0 1 0 0 POP A 스택에서 A 팝
1 0 0 0 0 1 0 1 POP X 스택에서 X 팝
1 0 0 0 0 1 1 0 POP CC 스택에서 조건 코드를 팝합니다.
1 0 0 0 0 1 1 1 (표준)
1 0 0 0 1 0 0 0 푸시 A A를 스택에 푸시합니다.
1 0 0 0 1 0 0 1 푸시 X X를 스택에 푸시
1 0 0 0 1 0 1 0 푸시 CC 상태 코드를 스택에 푸시합니다.
1 0 0 0 1 0 1 1 (표준)
1 0 0 0 1 1 0 (표준)
1 0 0 0 1 1 1 0 정지하다 프로세서와 클럭을 정지
1 0 0 0 1 1 1 1 와이파이 인터럽트를 기다려 프로세서를 정지하지만 클럭은 정지하지 않습니다.
1 0 0 1 0 0 0 0 PDY 명령 접두사. 다음 명령에서 X와 Y를 스왑합니다.
1 0 0 1 0 0 0 1 PIY 명령 프리픽스: PDY + PIX
1 0 0 1 0 0 1 0 PIX 명령 접두사. 오퍼랜드에 간접 8비트 메모리 사용
1 0 0 1 0 0 1 1 LD X,Y X : = Y. PDY를 사용하면 "LD Y,X"를 수행합니다.
1 0 0 1 0 1 0 0 LD S,X S : = X. 스택 포인터를 로드합니다.
1 0 0 1 0 1 0 1 LD S,A S : = A. 스택 포인터를 로드합니다.
1 0 0 1 0 1 1 0 LD X,S X : = S.
1 0 0 1 0 1 1 1 LD X,A X : = A.
1 0 0 1 1 0 0 0 RCF 반송 플래그 재설정(지우기)
1 0 0 1 1 0 0 1 SCF 반송 플래그 설정
1 0 0 1 1 0 1 0 인터럽트 마스크 리셋(인터럽트 활성화)
1 0 0 1 1 0 1 1 SIM 인터럽트 마스크 설정(인터럽트 비활성화)
1 0 0 1 1 1 0 0 RSP 스택 포인터를 리셋(RAM 상단으로)
1 0 0 1 1 1 0 1 NOP 조작 없음.(=LD A,A)
1 0 0 1 1 1 1 0 LD A, S A : = S
1 0 0 1 1 1 1 1 LD A, X A : = X 。
1 모드 동작 코드 가치 ? 2-operand 명령 A :=operand
1 0 1 0 동작 코드 imm8 OP #imm8 8비트 즉시 오퍼랜드(수신처로 지정)
1 0 1 1 동작 코드 주소 8 OP 주소 8 8비트 절대주소
1 1 0 0 동작 코드 주소 주소 OP 주소 16 16비트 절대 주소
1 1 0 1 동작 코드 주소 주소 OP(주소 16,X) 16비트 오프셋으로 색인화
1 1 1 0 동작 코드 주소 8 OP(주소 8,X) 8비트 오프셋으로 색인화
1 1 1 1 동작 코드 OP(X) 오프셋 없이 인덱싱됨
1 모드 0 0 0 0 가치 ? SUB A, 오퍼랜드 A : = A - 오퍼랜드
1 모드 0 0 0 1 가치 ? CP A, 오퍼랜드 A - 피연산자 비교
1 모드 0 0 1 0 가치 ? SBC A, 오퍼랜드 A : = A - 피연산자 - C를 차용하여 빼기
1 모드 0 0 1 1 가치 ? CP X, 오퍼랜드 X 비교 - 피연산자
1 모드 0 1 0 0 가치 ? AND, 오퍼랜드 A : = A & 오퍼랜드, 비트 단위 및
1 모드 0 1 0 1 가치 ? BCP A, 오퍼랜드 비트 테스트 A & 오퍼랜드
1 모드 0 1 1 0 가치 ? LD A, 오퍼랜드 A : = 피연산자 로드
1 0 1 0 0 1 1 1 imm8 (표준, =LD #im8,A)
1 모드 0 1 1 1 가치 ? LD 오퍼랜드,a 스토어 오퍼랜드 : = A
1 모드 1 0 0 0 가치 ? XOR A, 오퍼랜드 A : = A ^ 오퍼랜드, 배타적 또는
1 모드 1 0 0 1 가치 ? ADC A, 오퍼랜드 A : = A + 피연산자 + C, 캐리 추가
1 모드 1 0 1 0 가치 ? 또는 A, 오퍼랜드 A : = 오퍼랜드(포함) 또는
1 모드 1 0 1 1 가치 ? ADD X, 연산자 A : = A + 오퍼랜드
1 0 1 0 1 1 0 0 imm8 x (수직, =수직 #imm8)
1 모드 1 1 0 0 가치 ? JP 오퍼랜드 PC : = 피연산자, 무조건 점프
1 0 1 0 1 1 0 1 흐느껴 울다 CALLR 라벨 PUSH PC, PC : = PC + 오퍼랜드
1 모드 1 1 0 1 가치 ? 오퍼랜드 PC 푸시, PC : = 피연산자
1 모드 1 1 1 0 가치 ? LD X, 오퍼랜드 로드 X : = 피연산자
1 0 1 0 1 1 1 1 imm8 (표준, =LD #imm8,X)
1 모드 1 1 1 1 가치 ? LD 오퍼랜드,X 스토어 오퍼랜드 : = X

레퍼런스

  1. ^ 데이터 시트: 1998년부터 ST62T00C/T01C
  2. ^ "2006 EDN Microcontroller/Microprocessor directory, 8-bit microprocessors sorted by Instruction Set Architecture" (PDF). p. 26. 100616 edn.com
  3. ^ a b "ST6 Family Programming Manual" (PDF). Revision 2.0. STMicroelectronics. October 2004. Retrieved 2017-02-28.
  4. ^ "ST7 Family Programming Manual" (PDF). Revision 2. STMicroelectronics. November 2005. Retrieved 2017-02-28.