KR20000046572A - 마이크로프로세서의 인터럽트 스택 제어방법 - Google Patents

마이크로프로세서의 인터럽트 스택 제어방법 Download PDF

Info

Publication number
KR20000046572A
KR20000046572A KR1019980063259A KR19980063259A KR20000046572A KR 20000046572 A KR20000046572 A KR 20000046572A KR 1019980063259 A KR1019980063259 A KR 1019980063259A KR 19980063259 A KR19980063259 A KR 19980063259A KR 20000046572 A KR20000046572 A KR 20000046572A
Authority
KR
South Korea
Prior art keywords
interrupt
stack
address
microprocessor
mpc
Prior art date
Application number
KR1019980063259A
Other languages
English (en)
Inventor
유승도
Original Assignee
강병호
대우통신 주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 강병호, 대우통신 주식회사 filed Critical 강병호
Priority to KR1019980063259A priority Critical patent/KR20000046572A/ko
Publication of KR20000046572A publication Critical patent/KR20000046572A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/327Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for interrupts
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked

Abstract

본 발명은 스택 메모리를 갖는 MPC 860 마이크로프로세서에서 인터럽트 스택 제어 방법에 관한 것이다.
통상적인 방식으로 MPC 860 마이크로프로세서에 대하여 인터럽트 서비스 루틴을 처리하게 하면, 스택메모리의 동일 번지에 연속되는 인터럽트의 귀환 번지가 중복기록되어 에러가 발생한다. 따라서, 본 발명에서는 MPC 860 마이크로프로세서가 인터럽트 인에이블된 상태에서, 제 1 인터럽트가 발생되면, 초기 스택 포인터가 가리키는 상기 스택 메모리상의 스택 위치로부터 상기 제 1 인터럽트 발생시점의 프로그램으로의 귀환 번지를 저장하고, 새로운 제 2 인터럽트가 발생되면 상기 스택 메모리의 상기 초기 스택 포인터의 위치를 기설정 위치로 변경시키고 상기 변경된 스택 포인터가 가리키는 스택 메모리상의 스택 위치로부터 상기 제 2 인터럽트 발생시점의 프로그램으로의 귀환 번지를 저장한다.
따라서, MPC 860 마이크로프로세서의 인터럽트 서비스 루틴 수행중 시스템의 부동작과 같은 에러가 방지된다.

Description

마이크로프로세서의 인터럽트 스택 제어방법(INTERRUPT STACK CONTROL METHOD FOR USE IN A MICROPROCESSOR)
본 발명은 마이크로세서의 인터럽트에 관한 것으로, 더욱 상세하게는, 마이크로프로세서의 인터럽트 스택 제어 방법에 관한 것이다.
퍼스널 컴퓨터(personal computer), 텔레비젼(television), 비디오 카세트 레코더(VCR : video cassette recoder) 등과 같은 가정용 전자 장치 및 전자 교환기 등과 같은 산업용 등 근래에 제조되는 거의 모든 전자 제품 들에는, 시스템의 전자 제어를 위해서, 중앙 처리 장치(CPU : central processing unit)를 포함하는 디지탈 시스템이 장착되는 추세이다.
디지탈 시스템에 채용되는 CPU로는 예를 들어, 8088, 80286, 80386, 80486…등과 같이 미국 인텔(Intel) 사에서 제조된 칩과 68000, 68020, 68030, … 등과 같이 모토롤라(Motorola) 사에서 제조된 칩 등을 들 수 있다.
이와 같은 디지탈 시스템에서는 기억 장치의 임의 장소에 기억되어 있는 값을 지우거나 또는 중앙 처리 장치를 비롯하여 시스템 전체를 초기 상태로 세트(set) 시키기 위하여 인터럽트를 이용한 리셋(reset) 동작을 수행한다. 일반적인 인터럽트 사이클은 프로그램 카운터(PC : program counter)에 미리 지정된 분기 번지를 싣고, 스택(stack)에다 현재 진행중이던 주 프로그램의 번지를 지정하고 있는 PC의 값을 저장한다. 스택에 저장된 PC의 값은 주프로그램의 귀환 번지를 가리키며, 스택 포인터(SP : stack pointer)에 의해 지정된다.
한편, 최근들어 모토롤라에서 제조된 MPC 860 CPU를 이용한 PBA들이 많이 개발되고 있다. MPC 860 CPU는 통신 시스템에서 사용하는데 적합하도록 통신 모듈(CPM : Communication Processor Module)이 내장되어 있어 다양한 시리얼 통신 프로토콜에 응용가능하다. 현재 MPC 860 CPU는 초고속 국가망 대형 국설 교환기의 여러 보드에 적용되고 있다.
현재 사용되고 있는 MPC 860 CPU용 버그(bug) 프로그램은 상용 OS를 위한 버그 프로그램으로서 전체적으로 완전하게 공개되어 있지 않으며, 상용 OS와 연결되는 부분의 소스도 공개되어 있지 않다. 또한 MPC 860 칩 메이커로부터 상용 OS의 소스를 구입할 수 있지만 매우 고가이다. MPC 860 CPU의 버그 프로그램이나 소스 코드가 공개되거나 알려져 있지 않기 때문에, MPC 860 칩의 구입자가 버그 프로그램에 어떤 기능을 삽입하거나 응용할 수 없다. 따라서, MPC 860 칩의 구입자는 칩 메이커가 제공하는 버그 프로그램을 그대로 구입하거나, 또는 자신의 시스템 분석에 의하여 원하는 기능을 추가하거나 변경하여야한다.
예를 들면, MPC 860 칩의 구입자가 기존의 68000 시리즈에서 실행하던 방식대로 버그 프로그램을 작성하여 인터럽트 서비스 루틴을 수행시키려고 하는 경우, MPC 860 칩이 동작하지 않는 알지못하는 에러가 발생하게 된다. 이러한 에러의 해결책은 구입자의 몫으로 돌아갈 수 밖에 없다.
그러므로, 본 발명은 상술한 문제를 해결하고자 안출된 것으로, 본 발명은 MPC 860 CPU의 서비스 인터럽트 루틴 처리를 위한 인터럽트 스택 제어방법을 제공하는 것을 그 목적으로 한다.
상술한 목적을 달성하기 위해서, 본 발명에서는 최초 인터럽트 이후 새로운 인터럽트가 발생되면, 스택 메모리의 스택 포인터의 위치를 강제적으로 최초 위치로부터 기설정 번지만큼 변경시켜줌으로써 인터럽트 에러를 해결한다.
도 1은 본 발명에 따른 마이크로프로세서의 인터럽트 스택 제어 방법을 설명하는 스택 메모리의 구성도,
도 2는 본 발명에 따른 마이크로프로세서에서 인터럽트 스택 제어 방법을 설명하는 플로우차트.
〈도면의 주요부분에 대한 부호의 설명〉
100 : 마이크로프로세서 200 : 스택메모리
이하 본 발명은 첨부된 도면을 참조하여 다음과 같이 상세히 설명될 것이다.
도 1는 본 발명에 따른 마이크로프로세서, 즉 MPC 860 CPU의 인터럽트 스택 제어를 위한 스택 메모리의 구성을 도시한다. 도 1에서 스택 메모리의 번지를 가리키는 참조부호는 단지 본 발명의 설명을 위하여 사용된 것이며, 실질적으로 스택 메모리 번지가 도 1에 예시된 방식대로 구성되어 있다는 것을 의미하지는 않다는 사실을 알아야 할 것이다.
스택(100)은 프로그램의 실행중에 일시적으로 보존하고 싶은 데이터를 차례로 겹쳐 쌓듯이 수납해 가는 다수개의 레지스터로 구성되는 기억장치로서, MPC 680 CPU(200)에 내장된 RAM으로 구현될 수 있다.
먼저, 본 발명의 설명에 앞서 통신 시스템에 적용되는 CPU의 버그 프로그램에 대하여 설명하면 다음과 같다. 일반적으로, CPU와 같은 마이크로프로세서는 초기화시에 ROM(도시안됨)을 제일 먼저 억세스한다. 이 ROM에는 CPU가 앞으로 어떻게 동작할 것인지 어떤 모드로 동작해야 할것인지를 결정 짓기 위해 각각의 특별한 목적의 레지스터들을 세팅하는 함수를 수행하게 되는데 이 함수들은 일반적으로 어셈블리로 되어 있다. 이 과정이 끝나면 베이스 레지스터(base register)와 옵션 레지스터(option register)들을 이용하여 CPU에서 칩 선택(chip select)신호들을 셋팅한다. 베이스 레지스터의 주요기능은 시작주소를 지정하는 것이며, 옵션 레지스터의 기능은 어드레스와 마스크(mask)하는데 필요로하는 값과 메모리에 데이터를 읽거나 쓸 때 내부에서 ACK 신호(승인 신호)를 보낼 것인지 또는 외부에서 받을 것인지 등에 대하여 설정해 놓는다. 이와 같은 CPU 자체의 초기화 과정이 종료되면 RS-232C를 이용한 시리얼 통신을 통하여 필요한 각각의 레지스터들을 셋팅하여 CPU와 사용자간에 SMC(Serial Management Controller)를 통하여 UART 모드를 구현한다. 이러한 시리얼 통신을 통하여 사용자로부터 임의의 문자를 받게된다. 연속하여 엔터(Enter)가 입력될 때 까지 스트링을 받아들여 명령어 테이블에 등록되어 있는 명령어인지 아닌지를 판단하고 명령어 테이블에 없으면 프롬프트를 띄우고 명령어 테이블에 있으면 해당 기능(function)을 호출한 후 프롬프트를 띄운다.
상술한 바와 마찬가지로, MPC 860 CPU(200)도 초기화되며, 마지막 단계로서 도 1에 도시된 바와 같은 스택 메모리(100)내 각각의 레지스터들을 초기화함으로써 인터럽트를 받아들일 수 있는 인터럽트 인에이블 상태가 된다.
MPC 860 CPU 시스템의 초기화 상태에서, 작성된 버그 프로그램을 콤파일(compile)하여 MPC 860 CPU에 점프등과 같은 인터럽트를 발생시키면, 도 1에 예시된 바와 같이, 초기 스택 포인터(110)가 가리키는 위치에서 4 바이트용량을 제외한 스택 번지로부터 현재 프로그램의 진행중에 관련한 상태값과 귀환번지를 가지고 있는 프로그램 카운터(PC) 값이 차례로 저장된다. 보다 상세히 말해서, 먼저, 각각의 스택 번지(0011, 0012, 0013)의 레지스터(R0 Register, CTR, XER)와 스택 번지(0015, . . . , 0024)의 레지스터들(R3, . . . , R12 Register)에 현재 프로그램 진행중에 관련한 상태값을 저장하고, 스택번지(0014)의 링크 레지스터(Link Register)에 현재 진행중이던 프로그램으로의 귀환 번지를 가지고 있는 PC의 값을 저장한다. 이와 같이, 스택(100)에 상태값과 귀환 번지를 저장한 다음, 인터럽트 서비스 루틴이 지정하는 인터럽트 루틴을 수행하게된다.
이후, 인터럽트 루틴을 수행하는 중에 또 다른 인터럽트가 발생되면, 스택번지(0009)를 가리키는 최초 스택 포인터(SP)위치로부터 진행중이던 인터럽트 서브루틴과 관련한 상태값과 PC 값이 스택번지(0011)부터 스택번지(0014)에 중복기록(overwrite)된다. 이러한 경우, 새로운 인터럽트에 대한 서브루틴을 종료한 이후, 최초의 인터럽트 루틴으로 돌아갈 귀환 번지는 스택번지(0014)의 링크 레지스터(Link Register)에 저장되어 있지만, 주 프로그램으로의 귀환 번지는 스택번지(0014)의 링크 레지스터(Link Register)에서 중복기록되었기 때문에, 주 프로그램으로의 귀환이 불가능해진다. 따라서, 인터럽트 서비스 루틴을 수행함에 있어서, 오류가 발생하게된다.
본 발명은 상술한 문제점을 해결하기 위하여, 최초 인터럽트가 발생한 이후 또 다른 인터럽트가 새로이 발생되면, 스택 메모리(100)의 스택 포인터(SP)를 강제적으로 이동시켜 스택 포인터(SP)를 변경시키고, 변경된 스택 포인터(SP)가 가리키는 스택번지에서부터 인터럽트 루틴과 관련하여 진행중인 상태와 귀환 번지를 저장하도록 제어한다.
다시 말해서, 상술한 바와 마찬가지로, MPC 860 CPU 시스템의 초기화 상태에서, 버그 프로그램을 콤파일하여 MPC 860 CPU에 인터럽트를 발생시키면, 도 1에 예시된 바와 같이, 초기 스택 포인터가 가리키는 스택 번지(0009)에서 4 바이트용량을 제외한 스택번지(0010)로부터 주 프로그램의 진행중에 관련한 상태값과 프로그램 카운터(PC) 값을 각각의 스택 번지(0011 내지 0024)에 저장한다.
이후, 인터럽트 서비스 루틴에서 지정되는 인터럽트 루틴을 수행하는 중에 새로운 인터럽트가 발생되면, 스택번지(0009)를 가리키고 있는 최초 스택 포인터(SP)를 기설정된 번지 만큼, 예로 8 번지 만큼 점프하여, 스택 포인터(SP)를 점프된 스택번지(0000)으로 변경시킨다. 그 다음, 변경된 스택 포인터(SP)가 가리키는 스택번지(0000)에서부터 4번지 아래의 스택번지(0004)부터 스택번지(0006)까지 서브루틴의 상태를 세 개의 레지스터(R29 Register, R30 Register, R31 Register)에 기록하고, 스택번지(0006)번지로부터 2번지 아래의 스택번지(0009)에는 서브루틴과 관련한 귀환 번지를 링크 레지스터(Link Register)에 저장한다.
따라서, 상술한 스택 제어 방식에 의해 MPC 860 CPU의 버그 프로그램과 관련한 인터럽트 서비스 루틴을 수행할 때 MPC 860 CPU의 동작하지 않는 등의 에러가 방지된다.
상술한 구성을 갖는 본 발명에 따른 MPC 860 마이크로프로세서에서 인터럽트 스택 제어 방법은 첨부된 도 2를 참조하여 다음과 같이 설명된다.
도 2a는 MPC 860 마이크로프로세서의 초기화 과정을 설명하는 흐름도로서, 단계(210)는 MPC 860 마이크로프로세서(200)를 초기화하는 과정으로, 다음과 같은 과정을 포함한다. 먼저 외부 인터럽트 발생시 실행할 소스를 스택 메모리(100)의 기설정 번지, 예를 들면 0x500 번지에 가져다 놓는다. 그 다음 과정은 인터럽트가 발생할 수 있도록 MPC 860 마이크로프로세서(200)의 각 레지스터들을 초기화한다. 그 다음 과정은 MPC 860 마이크로프로세서(200)가 인터럽트를 받아들일 수 있도록 MSR(Machine Status Register)의 비트를 세팅함으로써, MPC 860 마이크로프로세서(200)를 인터럽드 인에이블 상태로 만든다.
이후, 단계(220)에서와 같이 외부 인터럽트가 발생하는 지를 판단하여 인터럽트가 발생하면, 다음 단계(230)로 진행한다.
단계(230)에서는 초기화시에 형성된 인터럽트 벡터 테이블의 외부 인터럽트 위치로 점프하여 인터럽트 서비스 루틴을 실행시킨다. 이 단계(230)에서 본 발명의 스택 제어방법은 도 2b를 참조하여 설명된다.
도 2b를 참조하면, 단계(232)에서, 도 2a의 단계(220)에서와 같은 인터럽트가 발생되면, 스택 메모리(100)의 각 번지에 설정되어 있는 레지스터들의 값들이 새로운 값으로 중복기록되는 것을 방지하기 위하여, 스택 포인터(SP)의 위치를 8 번지 만큼 점프하여, 점프된 스택번지(0000)으로 스택 포인터(SP)를 변경시키고, 변경된 스택 포인터(SP)가 가리키는 스택번지(0000)에서부터 4번지 아래의 스택번지(0004)부터 스택번지(0006)까지 서브루틴의 상태를 세 개의 레지스터(R29 Register, R30 Register, R31 Register)에 기록하고, 스택번지(0006)번지로부터 2번지 아래의 스택번지(0009)에는 서브루틴과 관련한 귀환 번지를 링크 레지스터(Link Register)에 저장한다.
그 다음 단계(234)에서는 인터럽트 발생시 실제로 수행하여야 할 절대번지로 브랜치하여 인터럽트 서브루틴을 실행하고, 단계(236)에서와 같이 스택 포인터(SP)를 초기 위치, 즉 스택 메모리(100)의 번지(0009) 위치로 이동시킨다.
이후, 인터럽트 서브 루틴이 종료되면, 도 2a의 단계(240)로 진행하여 MPC 860 마이크로프로세서(200)는 새로운 외부 인터럽트가 발생될 때 까지 인터럽트 인에이블 상태를 유지한다.
그러므로, 본 발명에 따라서, MPC 860 CPU로 버그 프로그램을 작성하면서 인터럽트 서비스 루틴을 만들 때, 스택 포인터를 강제적으로 옮김으로써 동일 스택번지에 연속하는 서브루틴으로의 귀환 번지가 중복기록되는 것이 방지되어, MPC 860 CPU의 인터럽트 에러를 극복할 수 있다.

Claims (1)

  1. 스택 메모리를 갖는 마이크로프로세서의 인터럽트 스택 제어 방법에 있어서,
    상기 마이크로프로세서의 인터럽트 인에이블 상태에서, 제 1 인터럽트 발생시 초기 스택 포인터가 가리키는 상기 스택 메모리상의 스택 위치로부터 상기 제 1 인터럽트의 발생시점의 프로그램으로의 귀환 번지를 저장하는 단계;
    상기 제 1 인터럽트와 관련한 제 1 인터럽트 루틴을 수행하는 단계;
    상기 제 1 인터럽트 루틴 수행중 새로운 제 2 인터럽트의 발생시 상기 스택 메모리의 상기 초기 스택포인터의 위치를 기설정 위치로 변경시키는 단계;
    상기 변경된 스택 포인터가 가리키는 스택 위치로부터 상기 제 2 인터럽트 발생시점의 귀환 번지를 저장하고 제 2 인터럽트 루틴을 실행하는 단계를 포함하는 것을 특징으로 하는 마이크로프로세서의 인터럽트 스택 제어 방법.
KR1019980063259A 1998-12-31 1998-12-31 마이크로프로세서의 인터럽트 스택 제어방법 KR20000046572A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1019980063259A KR20000046572A (ko) 1998-12-31 1998-12-31 마이크로프로세서의 인터럽트 스택 제어방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1019980063259A KR20000046572A (ko) 1998-12-31 1998-12-31 마이크로프로세서의 인터럽트 스택 제어방법

Publications (1)

Publication Number Publication Date
KR20000046572A true KR20000046572A (ko) 2000-07-25

Family

ID=19569864

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019980063259A KR20000046572A (ko) 1998-12-31 1998-12-31 마이크로프로세서의 인터럽트 스택 제어방법

Country Status (1)

Country Link
KR (1) KR20000046572A (ko)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4807185A (en) * 1986-03-28 1989-02-21 Kabushiki Kaisha Toshiba Stack pointer control circuit
JPH0259933A (ja) * 1988-08-26 1990-02-28 Nec Corp マイクロプロセッサ
JPH03163630A (ja) * 1989-11-21 1991-07-15 Mitsubishi Electric Corp プロセッサのスタック制御方法
JPH04162135A (ja) * 1990-10-26 1992-06-05 Nec Corp データ処理装置
JPH0546407A (ja) * 1991-08-12 1993-02-26 Toshiba Corp スタツク管理システム
KR940015817A (ko) * 1992-12-31 1994-07-21 김주용 인터럽트 우선순위가 없는 cpu에서의 인터럽트 우선순위 부여 방법

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4807185A (en) * 1986-03-28 1989-02-21 Kabushiki Kaisha Toshiba Stack pointer control circuit
JPH0259933A (ja) * 1988-08-26 1990-02-28 Nec Corp マイクロプロセッサ
JPH03163630A (ja) * 1989-11-21 1991-07-15 Mitsubishi Electric Corp プロセッサのスタック制御方法
JPH04162135A (ja) * 1990-10-26 1992-06-05 Nec Corp データ処理装置
JPH0546407A (ja) * 1991-08-12 1993-02-26 Toshiba Corp スタツク管理システム
KR940015817A (ko) * 1992-12-31 1994-07-21 김주용 인터럽트 우선순위가 없는 cpu에서의 인터럽트 우선순위 부여 방법

Similar Documents

Publication Publication Date Title
US10977014B2 (en) Web-based programming environment for embedded devices
EP0814404B1 (en) Debugging apparatus for debugging a program
US6075941A (en) Microcomputer
CN100504810C (zh) 嵌入式系统的调试方法
CN100386743C (zh) 一种嵌入式系统的调试方法及其系统
US20070118725A1 (en) CPU life-extension apparatus and method
CN102364430B (zh) 支持一次性可编程存储器多次编程的微控制器和编程方法
JPH04213116A (ja) マイクロプロセッサを備えるメモリカード読取機にアプリケーションプログラムをロードする方法及びこの方法を実施するためのシステム
CN101183330A (zh) 嵌入式系统的在线调试系统及其调试方法
US9542113B2 (en) Apparatuses for securing program code stored in a non-volatile memory
US20060184924A1 (en) Intelligent platform management interface firmware architecture and method of building the same
JP2005532622A (ja) 特にスマートカードにおけるダウンロードしたアプリケーションの機密保護化
US5956480A (en) Terminal and online system for tracking version of data and program
CN100375029C (zh) 存储器配置系统与方法
US7296187B1 (en) Hardware debug device having script-based host interface
KR20000046572A (ko) 마이크로프로세서의 인터럽트 스택 제어방법
US5964890A (en) System call issue method and debug system
US20040015876A1 (en) Method and structure of implementing a safe pointer
KR100303307B1 (ko) 실시간 오퍼레이팅 시스템에서 디버깅동작을 위한 다운로드장치 및 방법
KR100952762B1 (ko) 디지털 시그널 프로세서의 실시간 디버깅 방법
US7191443B2 (en) Digital device, task management method and program therefor
US20010049794A1 (en) Write protection software for programmable chip
WO2001097039A1 (en) Remote debugging in an embedded system environment
CN111124416B (zh) 向内联汇编传递参数的方法、装置、设备以及存储介质
CN100385421C (zh) 可编程芯片软件防写保护的方法

Legal Events

Date Code Title Description
A201 Request for examination
N231 Notification of change of applicant
E902 Notification of reason for refusal
E601 Decision to refuse application