KR20170122758A - 듀얼 모드 인터럽트를 갖는 마이크로컨트롤러 또는 마이크로프로세서 - Google Patents

듀얼 모드 인터럽트를 갖는 마이크로컨트롤러 또는 마이크로프로세서 Download PDF

Info

Publication number
KR20170122758A
KR20170122758A KR1020177024324A KR20177024324A KR20170122758A KR 20170122758 A KR20170122758 A KR 20170122758A KR 1020177024324 A KR1020177024324 A KR 1020177024324A KR 20177024324 A KR20177024324 A KR 20177024324A KR 20170122758 A KR20170122758 A KR 20170122758A
Authority
KR
South Korea
Prior art keywords
interrupt
processing unit
central processing
register
service routine
Prior art date
Application number
KR1020177024324A
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 마이크로칩 테크놀로지 인코포레이티드
Publication of KR20170122758A publication Critical patent/KR20170122758A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/24Handling requests for interconnection or transfer for access to input/output bus using interrupt
    • G06F13/26Handling requests for interconnection or transfer for access to input/output bus using interrupt with priority control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/24Handling requests for interconnection or transfer for access to input/output bus using interrupt
    • 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/22Microcontrol or microprogram arrangements
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • Microcomputers (AREA)
  • Bus Control (AREA)

Abstract

마이크로컨트롤러는: 인터럽트 컨트롤러와 결합된 적어도 하나의 인터럽트 입력부를 구비한 CPU; 복수의 주변기기들; 및 상기 마이크로컨트롤러의 동작 모드를 제어하는 적어도 하나의 비트를 포함하는 모드 레지스터를 가진다. 상기 마이크로컨트롤러는 제 1 동작 모드에서, 상기 마이크로컨트롤러의 주변기기에 의한 인터럽트의 어서트(assertion)시, 상기 인터럽트 컨트롤러는 인터럽트 신호를 상기 CPU로 포워딩하고, 상기 주변기기는 관련 인터럽트 플래그를 설정하고, 여기서 상기 인터럽트에 의해 상기 CPU는 상기 인터럽트 입력과 관련된 소정 인터럽트 어드레스로 분기하도록 구성된다. 제 2 동작 모드에서는 상기 마이크로컨트롤러의 주변기기에 의한 인터럽트의 어서트시, 상기 인터럽트 컨트롤러는 인터럽트 신호를 상기 CPU로 포워딩하고 상기 CPU는 상기 인터럽트를 생성한 상기 주변기기로부터 추가 인터럽트 정보를 수신하고, 여기서 상기 추가 인터럽트 정보는 벡터 어드레스를 생성하는데 사용된다.

Description

듀얼 모드 인터럽트를 갖는 마이크로컨트롤러 또는 마이크로프로세서
관련 출원에 대한 상호 참조
본 출원은, 2015년 3월 6일 출원된 동일 출원인에 의한 미국 가출원 번호 62/129,481 호의 우선이익을 주장하며, 상기 미국 가출원은 모든 목적들을 위해 본 출원에 참조로 통합된다.
기술 분야
본 개시는 마이크로프로세서 또는 마이크로컨트롤러에 관한 것이다.
마이크로컨트롤러들은 중앙 처리 유닛(CPU), 메모리, I/O 인터페이스들, 및 직렬 인터페이스들, 아날로그-디지털 컨버터들, PWM 변조기들, 타이머들 등과 같은 복수의 서로 다른 주변 디바이스들을 포함하는 단일 칩의 시스템 온 칩이다. 일반적으로 많은 애플리케이션들은 많은 처리 전력을 필요로 하지 않는다. 따라서, 비용을 저렴하게 하기 위해, 제한된 양의 프로그램 메모리와 데이터 메모리를 가진 8-비트 마이크로컨트롤러들과 같은 특정 마이크로컨트롤러들은 종종 어떤 유형의 외부 또는 내부 인터럽트 없이 구현되거나, 또는 그러한 인터럽트 로직이 다이 상에서 상당한 공간(real estate)을 필요로 한다는 사실 때문에 제한된 수의 인터럽트로 구현된다. 예를 들어 제조업체의 기본 마이크로컨트롤러 제품군에는 인터럽트 기능을 전혀 포함하지 않거나 또는 단일 인터럽트만을 포함하는 디바이스들이 포함될 수 있다. 중간급의(mid-range) 제품군은 단일 인터럽트, 및 복수의 인터럽트들을 수신하고 CPU의 단일 인터럽트 입력부에 공급되는 출력 신호를 생성하는 관련된 인터럽트 컨트롤러를 가능케 하도록 설계될 수 있다. 이 마이크로컨트롤러 유형들 둘 다는 단일 인터럽트 입력부를 갖는 CPU를 포함할 수 있으며, 여기서 어서트(assert)될 때에는, 프로그램 실행으로 하여금 현재 계류중인 명령을 종료하게 한 다음, 정의된 어드레스(인터럽트 벡터)(예컨대, 어드레스 0004h)로 분기(branch)하게 한다. 제조업체의 마이크로컨트롤러 상위 제품군에는, 2개의 인터럽트 입력부들(하나는 낮은 우선 순위에 할당되고 하나는 높은 우선 순위에 할당됨)을 갖는 CPU를 비롯하여, 다양한 소스들로부터의 인터럽트들을 상기 CPU의 이들 2개의 인터럽트 입력부들에 분배하기 위한 인터럽트 컨트롤러를 구비한 디바이스들이 포함될 수 있다.
따라서, 본 출원은 제한된 개수의 인터럽트들, 예컨대 단일 또는 2개의 인터럽트 입력들 및 제한된 인터럽트 기능을 가진 관련 인터럽트 컨트롤러를 갖는 중앙 처리 유닛을 포함하는 마이크로컨트롤러들에 촛점이 맞추어져 있다. 많은 애플리케이션들에서 이것은 여전히 충분하지 않을 수 있으며, 예를 들어 16-비트 또는 32-비트 마이크로컨트롤러와 같은 상위 디바이스가 선택되어야 하는데, 그 이유는 8-비트 마이크로컨트롤러들의 인터럽트 기능들이 너무 제한적이기 때문이다. 또한, 이러한 마이크로컨트롤러들이 증가된 개수의 주변기기들을 갖도록 의도되면, 중앙 처리 유닛은 제한된 인터럽트 기능성으로 인해 관련 인터럽트 기능을 지원할 수 없을 수도 있다.
따라서, 개선된 또는 보다 유연한 인터럽트 처리를 할 수 있는 마이크로컨트롤러가 필요하다.
일 실시예에 따르면, 마이크로컨트롤러는: 적어도 하나의 인터럽트 입력부를 포함하는 중앙 처리 유닛; 적어도 하나의 인터럽트 신호를 상기 중앙 처리 유닛의 상기 적어도 하나의 인터럽트 입력부에 제공하도록 구성된 인터럽트 컨트롤러; 상기 중앙 처리 유닛 및 상기 인터럽트 컨트롤러와 결합된 복수의 주변기기들; 및 상기 마이크로컨트롤러의 동작 모드를 제어하는 적어도 하나의 비트를 포함하는 모드 레지스터를 포함할 수 있고, 여기서 상기 마이크로컨트롤러는 제 1 모드와 제 2 모드로 동작하도록 구성되고, 상기 제 1 동작 모드에서 상기 마이크로컨트롤러의 주변기기에 의한 인터럽트의 어서트(assertion)시, 상기 인터럽트 컨트롤러는 인터럽트 신호를 상기 중앙 처리 유닛으로 포워딩하고, 상기 주변기기는 관련 인터럽트 플래그를 설정하고, 상기 인터럽트에 의해 상기 중앙 처리 유닛은 상기 인터럽트 입력부와 관련된 소정 인터럽트 어드레스로 분기하고; 그리고 상기 제 2 동작 모드에서 상기 마이크로컨트롤러의 주변기기에 의한 인터럽트의 어서트시, 상기 인터럽트 컨트롤러는 인터럽트 신호를 상기 중앙 처리 유닛으로 포워딩하고 상기 중앙 처리 유닛은 상기 인터럽트를 생성한 상기 주변기기로부터 추가 인터럽트 정보를 수신하고, 상기 추가 인터럽트 정보는 벡터 어드레스를 생성하는데 사용된다.
추가 실시예에 따르면, 상기 제 2 동작 모드에서, 인터럽트를 수신한 후, 상기 중앙 처리 유닛은 서비스 루틴에 들어가기 전에 컨텍스트 세이브(context save)를 수행하도록 구성될 수 있고, 상기 중앙 처리 유닛의 레지스터는 상기 컨텍스트 세이브 후에 인터럽트 소스를 식별하도록 구성된 데이터를 수신한다. 추가 실시예에 따르면, 상기 레지스터는 산술 로직 유닛의 워킹(working) 레지스터일 수 있다. 추가 실시예에 따르면, 상기 인터럽트를 생성한 주변기기에 의해 제공된 상기 추가 정보는 상수 값을 시프트하는데 사용될 수 있고, 상기 시프트된 상수 값은 상기 레지스터로 이동된다. 추가 실시예에 따르면, 상기 추가 정보는 상기 CPU의 워킹 레지스터에 직접 저장되는 인터럽트 번호일 수 있다. 추가 실시예에 따르면, 상기 제 2 동작 모드에서, 베이스(base) 어드레스를 저장하는 베이스 레지스터가 제공될 수 있고, 인터럽트 소스에 의존하는 오프셋 어드레스가 상기 중앙 처리 유닛으로 포워딩되고, 여기서 인터럽트 벡터는 상기 베이스 레지스터에 저장된 상기 베이스 어드레스에 상기 벡터 어드레스를 추가함에 의해 생성된다. 추가 실시예에 따르면, 상기 제 2 모드에서 상기 마이크로컨트롤러는 상기 인터럽트를 생성한 인터럽트 소스와 관련된 각각의 서비스 루틴으로 분기하기 위해 상기 워킹 레지스터의 콘텐츠를 평가하는 인터럽트 서비스 루틴을 제공하도록 프로그램될 수 있다. 추가 실시예에 따르면, 상기 제 1 모드에서 상기 마이크로컨트롤러는 상기 인터럽트를 생성한 인터럽트 소스를 결정하기 위해 특수 기능 레지스터 내의 인터럽트 플래그를 폴링(polling)하는 인터럽트 서비스 루틴을 제공하도록 프로그램될 수 있다. 추가 실시예에 따르면, 상기 중앙 처리 유닛은 단지 하나의 인터럽트 입력부를 포함할 수 있다. 추가 실시예에 따르면, 상기 중앙 처리 유닛은 제 1 인터럽트 입력부와 제 2 인터럽트 입력부만을 포함할 수 있고, 여기서 상기 제 1 인터럽트 입력부는 상기 제 2 인터럽트 입력부보다 높은 우선순위를 갖는다. 추가 실시예에 따르면, 상위의 우선순위 인터럽트가 하위의 우선순위 서비스 루틴을 인터럽트할 때, 상기 상위의 우선순위 인터럽트는 하위의 우선순위 인터럽트를 클리어하도록 구성될 수 있고, 관련 서비스 루틴은 상기 하위의 우선순위 서비스 루틴을 통해 복귀하지 않고 메인 코드로 직접 복귀한다. 추가 실시예에 따르면, 상위의 우선순위 인터럽트가 하위의 우선순위 서비스 루틴을 인터럽트할 때, 상기 상위의 우선순위 인터럽트는 메인 코드로 복귀하지 않고 상기 하위의 우선순위 인터럽트 서비스 루틴으로 직접 복귀하도록 구성될 수 있다. 추가 실시예에 따르면, 인터럽트 컨트롤러는 상기 주변기기들로부터 수신된 인터럽트들을 인에이블하도록 제어 가능한 로직을 포함할 수 있다.
또 하나의 실시예에 따르면, 적어도 하나의 인터럽트 입력부를 포함하는 중앙 처리 유닛, 및 적어도 하나의 인터럽트 신호를 상기 중앙 처리 유닛의 상기 적어도 하나의 인터럽트 입력부에 제공하도록 구성된 인터럽트 컨트롤러를 포함하는 마이크로컨트롤러 내에 인터럽트 기능을 제공하기 위한 방법은: 제 1 동작 모드 또는 제 2 동작 모드를 설정하는 단계; 상기 인터럽트 컨트롤러에 의해 인터럽트를 수신하는 단계; 상기 제 1 동작 모드로 동작할 때, 상기 인터럽트 컨트롤러에 의해 인터럽트 신호를 상기 중앙 처리 유닛에 포워딩하고 관련 인터럽트 플래그를 설정하는 단계 - 상기 인터럽트에 의해 상기 중앙 처리 유닛은 상기 인터럽트 입력과 관련된 소정 인터럽트 어드레스로 분기함 -; 및 상기 제 2 동작 모드로 동작할 때, 상기 인터럽트 컨트롤러에 의해 인터럽트 신호를 상기 중앙 처리 유닛에 포워딩하고, 상기 중앙 처리 유닛에 의해 상기 인터럽트를 생성한 주변기기로부터 추가 인터럽트 정보를 수신하는 단계 - 상기 추가 인터럽트 정보는 벡터 어드레스를 생성하는데 사용됨 - 를 포함할 수 있다.
상기 방법의 추가 실시예에 따르면, 상기 제 2 동작 모드에서, 인터럽트를 수신한 후, 상기 방법은 컨텍스트 세이브를 수행할 수 있고 상기 컨텍스트 세이브 후에 인터럽트 소스를 식별하도록 구성된 상기 중앙 처리 유닛이 서비스 루틴에 들어가서 추가 정보를 수신하고 그리고 상기 추가 정보 또는 상기 추가 정보로부터 유도된 데이터를 레지스터에 저장한다. 상기 방법의 추가 실시예에 따르면, 상기 추가 정보는 상기 CPU의 워킹 레지스터에 직접 저장되는 인터럽트 번호일 수 있다. 상기 방법의 추가 실시예에 따르면, 상기 방법은 상기 서비스 루틴에 들어간 후에 상기 데이터를 이용하여 어드레스를 계산하고, 상기 인터럽트를 서비스하기 위해 상기 어드레스로 분기하는 단계를 더 포함할 수 있다. 상기 방법의 추가 실시예에 따르면, 상기 데이터는 상수 값을 시프트하는데 사용될 수 있고, 상기 시프트된 상수 값은 상기 레지스터로 이동된다. 상기 방법의 추가 실시예에 따르면, 상기 방법은 상기 인터럽트를 서비스하기 위한 어드레스로 분기하기 위해 상기 시프트된 값을 오프셋 어드레스로서 사용하는 단계를 더 포함할 수 있다. 상기 방법의 추가 실시예에 따르면, 상기 제 2 동작 모드에서, 베이스 어드레스를 저장하는 베이스 레지스터가 제공될 수 있고, 인터럽트 소스에 의존하는 오프셋 어드레스가 상기 중앙 처리 유닛으로 포워딩되고, 그리고 상기 베이스 레지스터에 저장된 상기 베이스 어드레스에 상기 벡터 어드레스를 추가함으로써 인터럽트 벡터를 생성한다. 상기 방법의 추가 실시예에 따르면, 상기 제 2 동작 모드에서, 인터럽트 서비스 루틴은 상기 인터럽트를 생성한 인터럽트 소스와 관련된 명령어들을 제공하는 각각의 어드레스로 분기하기 위해 상기 워킹 레지스터의 콘텐츠를 평가할 수 있다. 상기 방법의 추가 실시예에 따르면, 상기 제 1 동작 모드에서, 인터럽트 서비스 루틴은 상기 인터럽트를 생성한 인터럽트 소스를 결정하기 위해 특수 기능 레지스터 내의 인터럽트 플래그를 폴링할 수 있다. 상기 방법의 추가 실시예에 따르면, 상기 중앙 처리 유닛은 단지 하나의 인터럽트 입력부를 포함할 수 있다. 상기 방법의 추가 실시예에 따르면, 상기 중앙 처리 유닛은 제 1 인터럽트 입력부와 제 2 인터럽트 입력부만을 포함할 수 있고, 상기 제 1 인터럽트 입력부는 상기 제 2 인터럽트 입력부보다 높은 우선순위를 갖는다. 상기 방법의 추가 실시예에 따르면, 상위의 우선순위 인터럽트가 하위의 우선순위 서비스 루틴을 인터럽트할 때, 상기 상위의 우선순위 인터럽트는 하위의 우선순위 인터럽트를 클리어하도록 구성될 수 있고, 관련 서비스 루틴은 상기 하위의 우선순위 서비스 루틴을 통해 복귀하지 않고 메인 코드로 직접 복귀할 수 있다. 상기 방법의 추가 실시예에 따르면, 상위의 우선순위 인터럽트가 하위의 우선순위 서비스 루틴을 인터럽트할 때, 상기 상위의 우선순위 인터럽트는 메인 코드로 복귀하지 않고 상기 하위의 우선순위 인터럽트 서비스 루틴으로 직접 복귀하도록 구성될 수 있다.
다른 또 하나의 실시예에 따르면, 마이크로컨트롤러는: 적어도 하나의 인터럽트 입력부 및 산술 로직 유닛과 결합된 레지스터를 포함하는 중앙 처리 유닛; 적어도 하나의 인터럽트 신호를 상기 중앙 처리 유닛의 상기 적어도 하나의 인터럽트 입력부에 제공하도록 구성된 인터럽트 컨트롤러; 및 상기 중앙 처리 유닛 및 상기 인터럽트 컨트롤러와 결합된 복수의 주변기기들을 포함할 수 있고, 여기서 상기 마이크로컨트롤러의 주변기기에 의한 인터럽트의 어서트시, 상기 인터럽트 컨트롤러는 인터럽트 신호를 상기 중앙 처리 유닛으로 포워딩하고, 상기 중앙 처리 유닛은 상기 인터럽트를 생성한 상기 주변기기로부터 추가 인터럽트 정보를 수신하고, 상기 추가 인터럽트 정보 또는 상기 추가 정보로부터 유도된 데이터는 상기 레지스터에 저장된다.
상기 마이크로컨트롤러의 추가 실시예에 따르면, 인터럽트를 수신한 후, 상기 중앙 처리 유닛은 서비스 루틴에 들어가기 전에 컨텍스트 세이브를 수행하도록 구성될 수 있고, 상기 레지스터는 상기 컨텍스트 세이브 후에 상기 추가 인터럽트 정보를 수신할 수 있다. 상기 마이크로컨트롤러의 추가 실시예에 따르면, 상기 추가 정보는 상수 값을 시프트하는데 사용될 수 있고, 상기 시프트된 상수 값은 상기 레지스터로 이동된다. 상기 마이크로컨트롤러의 추가 실시예에 따르면, 상기 추가 정보는 상기 CPU의 워킹 레지스터에 직접 저장되는 인터럽트 번호일 수 있다. 상기 마이크로컨트롤러의 추가 실시예에 따르면, 상기 마이크로컨트롤러는, 상기 인터럽트를 생성한 인터럽트 소스와 관련된 각각의 서비스 루틴으로 분기하기 위해 상기 워킹 레지스터의 콘텐츠를 평가하는 인터럽트 서비스 루틴을 제공하도록 프로그램될 수 있다.
도 1은 일 실시예에 따른 마이크로컨트롤러의 블록도이다.
도 2는 인터럽트 컨트롤러 로직의 실시예를 도시한 도면이다.
도 3은 벡터 어드레스가 생성될 수 있는 방법의 실시예를 도시한 도면이다.
도 4는 벡터 어드레스가 워킹 레지스터(working register)로 이동될 수 있는 방법의 실시예를 도시한 도면이다.
도 5는 추가 인터럽트 정보가 레지스터로 이동되는 마이크로컨트롤러의 실시예를 도시한 도면이다.
도 6은 높은 우선 순위 및 낮은 우선 순위 인터럽트들을 사용하는 시스템의 상태 다이어그램을 도시한 도면이다.
도 7은 추가 인터럽트 정보가 레지스터로 이동되는 마이크로컨트롤러의 또 하나의 실시예를 도시한 도면이다.
도 8은 인터럽트 컨트롤러 로직의 또 하나의 실시예를 도시한 도면이다.
다양한 실시예들에 따르면, 마이크로컨트롤러들의 기존 설계와 호환 가능한 벡터 인터럽트 시스템을 만들 수 있다. 이하에서 논의되는 특징들은 8-비트 마이크로컨트롤러에만 국한되지 않으며, 이러한 디바이스들이 불충분한 인터럽트 제어 아키텍처를 포함하는 경우에는 16-비트 또는 32-비트 마이크로컨트롤러에도 적용될 수 있다. 다양한 실시예들에 따르면, 기존의 인터럽트 처리가 유지되고 그리고 제 2 동작 모드가 제공된다. 제 1 동작 모드에서, 단일 인터럽트 입력부를 갖는 이러한 마이크로컨트롤러는 본래 설계된 대로 동작할 수 있는데, 예를 들면, 단일의 소정 인터럽트 벡터, 예컨대 어드레스(0004h)로 분기한다. 제 2 동작 모드에서, 마이크로컨트롤러는 단일 인터럽트 입력과 관련된 복수의 인터럽트 벡터들을 사용할 수 있다.
비-벡터화된(non-vectored) 마이크로컨트롤러 시스템들의 기존 설계들은 새로운 코어 아키텍처 설계들에 의해 가능해질 수 있는 확장된 수의 주변기기들에 대해서는 충분하지 않을 수 있다. 벡터화된 인터럽트 시스템은 개개의 인터럽트 기능과 관련하여 이러한 주변기기들을 통합시킬 수 있다.
특히, PIC10/12/16 제품군의 마이크로컨트롤러들과 같은 본 출원의 양수인에 의해 제조된 마이크로컨트롤러들은 모두 프로그램 메모리 내의 위치 0004x에서 단일 인터럽트 벡터를 사용한다. PIC18 제품군의 보다 진보된 마이크로컨트롤러들은 듀얼 우선 순위 벡터 시스템을 사용한다.
마이크로컨트롤러의 양수인의 PIC16 제품군은 벡터를 제공하지 않는다. 보다 진보된 PIC18 제품군에는 소프트웨어 솔루션이 없으며 감독 인터럽트 제어 기능이 없다. 또한, PIC16 제품군뿐만 아니라 보다 진보된 PIC18 제품군은 특히 일부 마이크로컨트롤러들에 인터럽트 소스들의 수(sheer number) 때문에 대기 시간을 트리밍해야 한다. PIC16/18 제품군 둘 다는 로더(loader) 구현들을 부팅하는 블록들을 가지고 있다.
기존의 종래의 PIC18 벡터 인터럽트 시스템은, 벡터 테이블의 이동으로 하여금 부트 로더들을 지원할 수 있게 하는 베이스(base) 어드레스 레지스터를 갖는 다양한 실시예들에 따라 확장된다.
일 실시예에 따르면, 예를 들어, 높은 인터럽트가 또 하나의 계류 중인 높은 인터럽트로 천이하고, 낮은 인터럽트가 또 하나의 계류 중인 낮은 인터럽트로 천이하고 그리고 높은 인터럽트가 낮은 인터럽트로 천이하므로, 주 명령어들로의 복귀를 제거함으로써, 대기 시간을 없앨(trim) 수 있다. 즉, 인터럽트 명령으로부터의 복귀가 제거될 수 있고, 시스템은 다음의 계류중인 인터럽트 루틴으로 직접 점프한다.
높은 우선 순위 인터럽트와 낮은 우선 순위 인터럽트 둘 다에 대한 컨텍스트는 RTOS 지원을 위해 액세스 가능하게 만들어질 수 있다.
다른 실시예들에 따르면, 낮은 우선 순위 통신 주변기기들을 워치 독(watch dog)하기 위해 높은 우선 순위 타이머 인터럽트들을 사용하는 시스템들에 대해, 글로벌 인터럽트 인에이블 비트(GIE)를 사용하지 않으면서 인터럽트된 낮은 우선 순위 인터럽트들을 소거하는 능력이 제공된다. 다양한 실시예들에 따르면, POP 명령어는 낮은 우선 순위 인터럽트로부터 각각의 리턴 벡터를 제거하기 위해 이미 존재하지 않는다면 코어에 추가될 수 있다.
다른 또 하나의 실시예에 따르면, 낮은 우선 순위 인터럽트와 높은 우선 순위 인터럽트 둘 다에 대한 컨텍스트 세이브는 컨텍스트 레지스터들을 통해 볼 수 있다. 레지스터 공간은 낮은 액세스와 높은 액세스 사이의 토글링을 가능케 하는 컨텍스트 제어 레지스터를 통해 보존된다. 개선된 마이크로컨트롤러들은 워치 독 기능들을 지원하기 위해 명령에 관한 낮은 컨텍스트를 소거할 수 있는 기능을 구비한다.
일부 실시예들에 따른 해결책은 위치(0004x)로 인터럽트하기 위한 레거시(legacy) 모드 옵션과 역 호환 가능하다. 상기 모드는 0004x로의 분기 이전에 W 레지스터에 인터럽트 번호를 로딩하는 기능을 추가하여 확장된다.
일부 실시예들에 따르면, 이러한 듀얼 모드 벡터 인터럽트는 소프트웨어 기반 시스템들에 대해 직선 벡터 테이블과 벡터 번호 둘 다를 사용하는 2가지 레벨들의 우선 순위로 구현될 수 있다.
도 1은 단일 인터럽트 입력부를 갖는 CPU(110)를 구비한 마이크로컨트롤러(100)의 블록도를 도시한다. CPU(110)는 시스템 버스(160)를 통해 복수의 주변기기들(130a..130n)과 결합된다. CPU(110)는 별도의 데이터 메모리(140)와 프로그램 메모리(150)를 갖는 도시된 바와 같은 하버드(Harvard) 아키텍처에 따라 설계될 수 있다. 그러나, 상기 아키텍처는 또한 통합 메모리 공간을 갖는 폰 노이만(von Neumann) 아키텍처를 사용할 수도 있다.
데이터 메모리(140)는 시스템 버스를 통해 액세스 가능할 수 있고, 프로그램 메모리(150)는 자체 버스를 가질 수 있다. 그러나, 다른 설계들이 선택될 수 있다. 주변기기들(130a 내지 130n) 중 일부 또는 전부는 인터럽트 컨트롤러(120)에 공급되는 인터럽트 신호를 생성할 수 있다. 인터럽트 컨트롤러는 CPU(110)의 각각의 입력부에 공급되는 단일 인터럽트 신호를 생성할 수 있다.
도 2는 제 1 모드로 동작하는 인터럽트 컨트롤러(120)에 대한 가능한 구현의 블록도를 도시한다. 도 2의 좌측에 도시된 바와 같이, 복수의 인터럽트들 중 하나를 개별적으로 인에이블 또는 디스에이블하고 마이크로컨트롤러의 다양한 주변기기들에 의해 생성될 수 있는 관련 인터럽트 플래그들을 저장할 수 있게 하는 복수의 특수 기능 레지스터들이 제공될 수 있다. 도 2의 우측은, 예를 들어 글로벌 인터럽트 인에이블 비트(GIE)를 통해, 일반적으로 모든 인터럽트를 인에이블 또는 디스에이블하는 것을 가능케 하는 추가 인터럽트 제어 레지스터 비트를 보여준다. 인터럽트 제어 레지스터는 도 2의 중앙에 도시된 바와 같이 시스템 인터럽트들을 제어하기 위한 추가 비트들을 포함할 수 있다. 모든 주변기기 인터럽트들에 대한 별도의 인에이블/디스에이블 제어는 PEIE 비트에 의해 처리된다. 외부 인터럽트는 인에이블 비트(INTE) 및 관련 플래그(INTF)에 의해 제어된다. 또한, 외부 포트 변경 감지 제어는 RB 포트 변경 인터럽트 인에이블 비트 및 관련 플래그(RBIF)에 의해 제공된다. 이 기능은 다른 실시예들에 따라 다른 포트들로 확장될 수 있다. 마지막으로 타이머 0 오버플로 인터럽트가 이 레벨에서 처리될 수 있다. 이 실시예에서, INTE/INTF, RBIE/RBIF 및 T0IE/T0IF는 "시스템 인터럽트들"이지만, 다른 실시예들에 따르면, 모든 인터럽트들은 특정 PEIE 인에이블 비트없는 주변기기 인터럽트들로서 취급될 수 있다. 이 인터럽트 아키텍처들은 CPU의 단일 인터럽트 입력부를 사용하여 복수의 인터럽트들을 가능케 한다. 이를 달성하기 위해, 인터럽트 루틴은 다양한 소스들을 구별하기 위해 각각의 플래그들을 쿼리(query)해야 한다. CPU에서는 단일 인터럽트 입력부만이 제공되기 때문에 모든 인터럽트가 동일하게 보인다. 그러나 각각의 인터럽트 소스는 인터럽트를 생성할 때 관련 플래그를 설정할 수 있다. 따라서, 인터럽트 처리기 소프트웨어는 누가 인터럽트를 어서트했는지를 결정하기 위해 인터럽트 처리 루틴에서 이들 플래그를 확인해야 한다. 또한, 인터럽트가 처리되었으면, 서비스 루틴은 일반적으로 각각의 플래그를 리셋한다. 단일 인터럽트 입력부로 여러 인터럽트 소스들을 처리할 수 있도록 다른 로직이 사용될 수 있다. 도 2는 그것이 본 출원의 양수인에 의해 제조된 다수의 중간급의(mid-range) 마이크로컨트롤러들에서 구현될 때 단지 하나의 가능한 해결책을 보여준다.
벡터 시스템이 도 3에 도시되어 있다. 각 인터럽트는 서로 다른 벡터를 제공하며, 적절한 인터럽트 벡터를 선택하기 위해 인터럽트의 소스가 베이스(base) 레지스터에 추가된다. 따라서, 단지 하나의 인터럽트 벡터, 예를 들어 벡터(0004h)가 생성되는 전술한 인터럽트 처리와는 달리, 이러한 시스템은 인터럽트 신호가 생성될 때 추가 정보, 예를 들어 벡터 오프셋이 생성되는 것을 필요로 한다. CPU에서는 여전히 하나의 인터럽트 입력부만이 사용되지만, CPU는 이제 CPU에 제공되는 추가 정보에 따라 서로 다른 인터럽트 벡터들로 분기할 것이다. 임의의 플래그를 폴링(polling)하지 않고 분기를 달성하기 위해 이러한 추가 정보를 사용하는 서로 다른 기술들이 이하에서 보다 상세히 설명될 것이다. CPU는 고정 단일 인터럽트 벡터를 대체하는 각각의 벡터를 직접 생성하거나 또는 고정 단일 인터럽트 벡터를 사용하고 그리고 하드웨어 지원이 있거나 없이 소프트웨어 분기를 제공할 수 있다. 그러나, 이러한 제 2 동작 모드에서는 필요한 인터럽트 플래그들의 폴링이 전혀 없으며, 이것은 소프트웨어 오버헤드를 상당히 줄일 수 있다.
도 1에 도시된 바와 같이, 인터럽트 컨트롤러 및 CPU가 단일 인터럽트 신호만이 생성되고 소프트웨어가 인터럽트 플래그들을 폴링해야 하는 제 1 모드(호환성 모드)로 동작할 수 있게 하는 모드 제어 레지스터(170)가 제공될 수 있다. 다양한 실시예들에 따르면, 이제 도 1에 도시된 바와 같은 추가 데이터 라인들(180)을 통해 인터럽트 정보를 포워딩하는 제 2 모드가 제공된다. 인터럽트 정보는 예를 들어 벡터 오프셋 또는 실제 인터럽트 번호 또는 인터럽트 벡터 시스템의 구현을 가능케 하는 임의의 다른 정보일 수 있다. 예를 들어 인터럽트 번호와 같은 인터럽트 정보는 주변기기(130a..n)에 의해 제공될 수 있다. 따라서, 예를 들어 도 1에 도시된 바와 같이, 주변기기(130a..n)와 인터럽트 컨트롤러(120) 사이의 각각의 커플링은 인터럽트 번호와 같은 인터럽트 정보를 제공하는 추가 라인들을 포함할 수 있다. 대안적으로, 이러한 정보는 시스템 버스(160)를 통해 인터럽트 컨트롤러(120)로 포워딩되거나 또는 CPU(110)로 직접 포워딩될 수 있다. 일 실시예에서, 벡터 오프셋은 자동으로 단일 고정 인터럽트 벡터 어드레스에 추가된다. 따라서 상기 시스템은 각 인터럽트에 대해 서로 다른 진입 점(entry point)들을 갖는다. 오프셋은 관련된 서비스 루틴들로 분기하기 위해 두 개의 인접한 인터럽트 번호들 사이에 충분한 명령어가 배치될 수 있도록 설정될 수 있다. 대안적으로 인터럽트 정보는 레지스터, 예를 들면 특수 기능 레지스터 또는 산술 로직 유닛의 워킹(working) 레지스터에 직접 로딩된다. 이 해결책은, 이하에서 보다 상세히 설명되는 바와 같이, 고정 인터럽트 벡터 어드레스에서의 서비스 루틴에 들어간 직후에 수행되는 소프트웨어 분기에서 이 데이터를 사용할 수 있게 한다.
도 4는 일 실시예에 따른 제 2 모드를 나타내며, 이 모드에서는 일반적인 인터럽트 벡터는 전통적인 위치(예를 들어, 어드레스(0004h))에 있지만, 인터럽트 번호는 컨텍스트 세이브(context save) 이후에 CPU의 워킹 레지스터(W)로 전송되어, 이전 버전과 호환 가능한 해결책 외에도 소프트웨어 기반 해결책을 구축할 수 있는 기능을 제공한다. 인터럽트 번호와 같은 추가 정보가 워킹 레지스터와 같은 다른 루틴들에 의해 사용되는 정보를 전달하는 레지스터로 전송되면, 컨텍스트 세이브는 추가 정보 전송 전에 있을 것이 다만 요구된다. 워킹 레지스터는 덮어 쓰기될 것이고, 따라서 워킹 레지스터는 다른 특수 기능 레지스터들 중에서 인터럽트 서비스 루틴에 들어갈 때 세이브되어야 하는 컨텍스트의 일부이다. 따라서, 인터럽트 서비스 루틴으로 진입한 후, 워킹 레지스터는 다음 서비스 루틴이 그 특정 소스에 대한 정확한 서비스 명령들로 분기하는 것을 가능케 하는 인터럽트의 소스를 포함한다. 이것은 인터럽트 번호로부터 계산되는 벡터에 의해, 또는 단순히 워킹 레지스터를 쿼리(query)하고 각각의 루틴으로 분기함으로써 달성될 수 있다. 벡터 인터럽트 시스템의 이 특정 해결책은 양수인에 의해 제조된 마이크로컨트롤러들의 기존 인터럽트 시스템과 호환되는 이점이 있다. 대안적으로 이 정보는 나중에 먼저 모든 할당된 인터럽트들에 공통인 명령어들을 실행한 다음 개별 루틴들로 분기하는 공통 인터럽트 서비스 루틴에서 사용될 수 있다. 다른 소프트웨어 솔루션들은 레지스터에 저장된 정보를 사용하여 가능하다.
도 5는 2개의 인터럽트 입력부들(125a 및 125b)을 갖는 마이크로컨트롤러를 도시한다. 제 1 입력(125a)에는 높은 우선 순위가 할당될 수 있고 제 2 입력(125b)에는 낮은 우선 순위가 할당될 수 있다. 따라서, 입력(125a)의 우선 순위가 높은 인터럽트는 계류중인 낮은 우선 순위 인터럽트 루틴을 인터럽트할 수 있는 반면, 입력(125b)의 우선 순위가 낮은 인터럽트는 계류중인 높은 우선 순위 인터럽트 루틴을 인터럽트할 수 없다. 동일한 우선 순위 또는 상위의 계류중인 인터럽트들이 있는 경우에 시스템은 인터럽트 상태를 유지할 수도 있다. 다양한 실시예들에 따르면, 이러한 시스템은 제 2 모드로 동작할 때, 각각의 인터럽트 입력이 라인(들)(180)을 통해 추가 정보, 예를 들어 인터럽트 번호를 수신할 수도 있게 함으로써 상술한 것과 동일한 방식으로 향상될 수 있다. 따라서, 상술된 향상은 단일 인터럽트 입력부를 구비한 CPU를 갖는 시스템으로 제한되는 것이 아니라 하나보다 많은 인터럽트를 갖는 CPU와 함께 사용될 수 있고, 여기서 각각의 인터럽트 또는 그것들 중 적어도 하나는 전술한 바와 같이 향상된다.
일 실시예에 따르면, 상기 향상은 상술한 바와 같이 제 2 모드만을 사용하는 단일 인터럽트 모드에 또한 사용될 수 있다. 이 실시예는 하드웨어 솔루션의 감소를 가능케 한다. 이 실시예에 따르면, 상기 추가 정보는 CPU의 레지스터, 바람직하게는 ALU의 워킹 레지스터에 직접 로딩된다. 이 해결책은, 정보를 디코딩하고 각각의 인터럽트 벡터를 자동으로 설정해야 하는 하드웨어를 필요로 하지 않고 벡터 인터럽트 시스템의 유연성을 제공한다.
도 6의 상태 다이어그램은 이러한 2개의 우선순위 시스템에서 가능한 다양한 천이들을 보여준다. 이러한 시스템은, 하위의 우선 순위 인터럽트를 클리어하고 그리고 낮은 우선 순위를 통해 복귀하지 않고 메인 코드로 직접 복귀하는 상위의 우선 순위 인터럽트의 능력을 가질 수도 있다.
도 5는 추가 정보가 CPU 내의 산술 로직 유닛(ALU)의 워킹 레지스터(115)에 직접 로딩됨을 나타낸다. 이러한 전송은 일 실시예에 따라 워킹 레지스터의 내용을 세이브하는 컨텍스트 세이프(context safe)가 만들어진 직후에 이루어질 수 있다. 컨텍스트 세이프는 소프트웨어 오버헤드 없이 특정 레지스터들의 내용을 스택이나 섀도우 레지스터들에 자동으로 전송한다. 다른 실시예들에 따르면, 다른 레지스터, 예를 들면 달리 사용되지 않는 전용 레지스터로의 전송은 컨텍스트 세이프와 병렬로 이루어질 수 있다. 따라서, 추가 정보는 워킹 레지스터로 전송될 필요가 없지만, 다른 구현들에 따른 또 하나의 전용 특수 기능 레지스터로 전송될 수도 있다. 그러나 워킹 레지스터를 사용하면, 이러한 레지스터가 어드레스를 조작하는데 직접 사용될 수 있으므로 이점이 있다. 임의의 다른 CPU 레지스터에 대해서도 동일하게 설명되고, 따라서 CPU 아키텍처에 의존한다.
도 7은 단일 동작 모드, 또는 2개의 모드를 갖는 동작 모드의 다른 또 하나의 실시예를 도시한다. 여기서, 인터럽트 번호와 같은 추가 정보는, 예를 들어 0001h 또는 0002h 또는 임의의 다른 적절한 오프셋 번호로 프리셋된 시프트 레지스터(185)를 제어하고, 시프트된 결과는 이후에 워킹 레지스터로 직접 이동된다. 이 해결책은 인터럽트 서비스 루틴 내에서 어드레스 계산 명령들을 추가로 실행할 필요없이 점프 테이블에 액세스하는데 직접 사용할 수 있는 오프셋 값을 제공한다. 도 7에 도시된 바와 같이, 단지 하나의 인터럽트 입력(Int 0)만이 제공된다. 그러나, 이 구성은 하나보다 많은 인터럽트 입력부를 구비한 CPU에도 적용될 수 있다.
상술한 바와 같이, 2개의 동작 모드들의 다른 구현예들에 따르면, 벡터는 인터럽트 서비스 루틴 내의 소프트웨어에 의해 계산될 필요가 없다. 이러한 해결책은 이전 버전과의 호환성을 제공하지만, 다른 아키텍처들에서는 인터럽트가 수신될 때 직접 적용되는 벡터의 하드웨어 계산이 가능하므로, 이에 따라, 제공된 벡터 어드레스에 의존하는 다양한 벡터 어드레스들로 직접 점프할 수 있다.
상기 시스템은 8-비트 아키텍처, 특히 본 출원의 양수인에 의해 설계된 아키텍처들 내에서 동작하도록 설계된다. 그러나, 제안된 구현들은 다른 8-비트 시스템들뿐만 아니라 해당 인터럽트 로직을 이용하는 16-비트 또는 32-비트 시스템들에도 적용될 수 있다.

Claims (31)

  1. 마이크로컨트롤러로서,
    적어도 하나의 인터럽트 입력부를 포함하는 중앙 처리 유닛;
    적어도 하나의 인터럽트 신호를 상기 중앙 처리 유닛의 상기 적어도 하나의 인터럽트 입력부에 제공하도록 구성된 인터럽트 컨트롤러;
    상기 중앙 처리 유닛 및 상기 인터럽트 컨트롤러와 결합된 복수의 주변기기들; 및
    상기 마이크로컨트롤러의 동작 모드를 제어하는 적어도 하나의 비트를 포함하는 모드 레지스터를 포함하고,
    상기 마이크로컨트롤러는 제 1 모드와 제 2 모드로 동작하도록 구성되고,
    상기 제 1 동작 모드에서 상기 마이크로컨트롤러의 주변기기에 의한 인터럽트의 어서트(assertion)시, 상기 인터럽트 컨트롤러는 인터럽트 신호를 상기 중앙 처리 유닛으로 포워딩하고, 상기 주변기기는 관련 인터럽트 플래그를 설정하고, 상기 인터럽트에 의해 상기 중앙 처리 유닛은 상기 인터럽트 입력부와 관련된 소정 인터럽트 어드레스로 분기하고; 그리고
    상기 제 2 동작 모드에서 상기 마이크로컨트롤러의 주변기기에 의한 인터럽트의 어서트시, 상기 인터럽트 컨트롤러는 인터럽트 신호를 상기 중앙 처리 유닛으로 포워딩하고 상기 중앙 처리 유닛은 상기 인터럽트를 생성한 상기 주변기기로부터 추가 인터럽트 정보를 수신하고, 상기 추가 인터럽트 정보는 벡터 어드레스를 생성하는데 사용되는, 마이크로컨트롤러.
  2. 제 1 항에 있어서,
    상기 제 2 동작 모드에서, 인터럽트를 수신한 후, 상기 중앙 처리 유닛은 서비스 루틴에 들어가기 전에 컨텍스트 세이브(context save)를 수행하도록 구성되고, 상기 중앙 처리 유닛의 레지스터는 상기 컨텍스트 세이브 후에 인터럽트 소스를 식별하도록 구성된 데이터를 수신하는, 마이크로컨트롤러.
  3. 제 1 항 또는 제 2 항에 있어서,
    상기 레지스터는 산술 로직 유닛의 워킹(working) 레지스터인, 마이크로컨트롤러.
  4. 제 1 항 내지 제 3 항 중 어느 한 항에 있어서,
    상기 인터럽트를 생성한 주변기기에 의해 제공된 상기 추가 정보는 상수 값을 시프트하는데 사용되고, 상기 시프트된 상수 값은 상기 레지스터로 이동되는, 마이크로컨트롤러.
  5. 제 1 항 내지 제 4 항 중 어느 한 항에 있어서,
    상기 추가 정보는 상기 CPU의 워킹 레지스터에 직접 저장되는 인터럽트 번호인, 마이크로컨트롤러.
  6. 제 1 항 내지 제 5 항 중 어느 한 항에 있어서,
    상기 제 2 동작 모드에서, 베이스(base) 어드레스를 저장하는 베이스 레지스터가 제공되고, 인터럽트 소스에 의존하는 오프셋 어드레스가 상기 중앙 처리 유닛으로 포워딩되고, 인터럽트 벡터는 상기 베이스 레지스터에 저장된 상기 베이스 어드레스에 상기 벡터 어드레스를 추가함에 의해 생성되는, 마이크로컨트롤러.
  7. 제 1 항 내지 제 6 항 중 어느 한 항에 있어서,
    상기 제 2 모드에서 상기 마이크로컨트롤러는 상기 인터럽트를 생성한 인터럽트 소스와 관련된 각각의 서비스 루틴으로 분기하기 위해 상기 워킹 레지스터의 콘텐츠를 평가하는 인터럽트 서비스 루틴을 제공하도록 프로그램되는, 마이크로컨트롤러.
  8. 제 1 항 내지 제 7 항 중 어느 한 항에 있어서,
    상기 제 1 모드에서 상기 마이크로컨트롤러는 상기 인터럽트를 생성한 인터럽트 소스를 결정하기 위해 특수 기능 레지스터 내의 인터럽트 플래그를 폴링(polling)하는 인터럽트 서비스 루틴을 제공하도록 프로그램되는, 마이크로컨트롤러.
  9. 제 1 항 내지 제 8 항 중 어느 한 항에 있어서,
    상기 중앙 처리 유닛은 단지 하나의 인터럽트 입력부를 포함하는, 마이크로컨트롤러.
  10. 제 1 항 내지 제 9 항 중 어느 한 항에 있어서,
    상기 중앙 처리 유닛은 제 1 인터럽트 입력부와 제 2 인터럽트 입력부만을 포함하고, 상기 제 1 인터럽트 입력부는 상기 제 2 인터럽트 입력부보다 높은 우선순위를 갖는, 마이크로컨트롤러.
  11. 제 10 항에 있어서,
    상위의 우선순위 인터럽트가 하위의 우선순위 서비스 루틴을 인터럽트할 때, 상기 상위의 우선순위 인터럽트는 하위의 우선순위 인터럽트를 클리어하도록 구성되고, 관련 서비스 루틴은 상기 하위의 우선순위 서비스 루틴을 통해 복귀하지 않고 메인 코드로 직접 복귀하는, 마이크로컨트롤러.
  12. 제 10 항에 있어서,
    상위의 우선순위 인터럽트가 하위의 우선순위 서비스 루틴을 인터럽트할 때, 상기 상위의 우선순위 인터럽트는 메인 코드로 복귀하지 않고 상기 하위의 우선순위 인터럽트 서비스 루틴으로 직접 복귀하도록 구성되는, 마이크로컨트롤러.
  13. 제 1 항 내지 제 12 항 중 어느 한 항에 있어서,
    인터럽트 컨트롤러는 상기 주변기기들로부터 수신된 인터럽트들을 인에이블하도록 제어 가능한 로직을 포함하는, 마이크로컨트롤러.
  14. 적어도 하나의 인터럽트 입력부를 포함하는 중앙 처리 유닛, 및 적어도 하나의 인터럽트 신호를 상기 중앙 처리 유닛의 상기 적어도 하나의 인터럽트 입력부에 제공하도록 구성된 인터럽트 컨트롤러를 포함하는 마이크로컨트롤러 내에 인터럽트 기능을 제공하기 위한 방법으로서,
    제 1 동작 모드 또는 제 2 동작 모드를 설정하는 것;
    상기 인터럽트 컨트롤러에 의해 인터럽트를 수신하는 것;
    상기 제 1 동작 모드로 동작할 때, 상기 인터럽트 컨트롤러에 의해 인터럽트 신호를 상기 중앙 처리 유닛에 포워딩하고 관련 인터럽트 플래그를 설정하는 것 - 상기 인터럽트에 의해 상기 중앙 처리 유닛은 상기 인터럽트 입력과 관련된 소정 인터럽트 어드레스로 분기함 -; 그리고
    상기 제 2 동작 모드로 동작할 때, 상기 인터럽트 컨트롤러에 의해 인터럽트 신호를 상기 중앙 처리 유닛에 포워딩하고, 상기 중앙 처리 유닛에 의해 상기 인터럽트를 생성한 주변기기로부터 추가 인터럽트 정보를 수신하는 것 - 상기 추가 인터럽트 정보는 벡터 어드레스를 생성하는데 사용됨 - 을 포함하는, 방법.
  15. 제 14 항에 있어서,
    상기 제 2 동작 모드에서, 인터럽트를 수신한 후, 컨텍스트 세이브를 수행하고 상기 컨텍스트 세이브 후에 인터럽트 소스를 식별하도록 구성된 상기 중앙 처리 유닛이 서비스 루틴에 들어가서 추가 정보를 수신하고 그리고 상기 추가 정보 또는 상기 추가 정보로부터 유도된 데이터를 레지스터에 저장하는 방법.
  16. 제 15 항에 있어서,
    상기 추가 정보는 상기 CPU의 워킹 레지스터에 직접 저장되는 인터럽트 번호인, 방법.
  17. 제 15 항 또는 제 16 항에 있어서,
    상기 서비스 루틴에 들어간 후에 상기 데이터를 이용하여 어드레스를 계산하고, 상기 인터럽트를 서비스하기 위해 상기 어드레스로 분기하는 것을 더 포함하는 방법.
  18. 제 15 항 내지 제 17 항 중 어느 한 항에 있어서,
    상기 데이터는 상수 값을 시프트하는데 사용되고, 상기 시프트된 상수 값은 상기 레지스터로 이동되는, 방법.
  19. 제 18 항에 있어서,
    상기 인터럽트를 서비스하기 위한 어드레스로 분기하기 위해 상기 시프트된 값을 오프셋 어드레스로서 사용하는 것을 더 포함하는 방법.
  20. 제 14 항 내지 제 19 항 중 어느 한 항에 있어서,
    상기 제 2 동작 모드에서, 베이스 어드레스를 저장하는 베이스 레지스터가 제공되고, 인터럽트 소스에 의존하는 오프셋 어드레스가 상기 중앙 처리 유닛으로 포워딩되고, 그리고 상기 베이스 레지스터에 저장된 상기 베이스 어드레스에 상기 벡터 어드레스를 추가함으로써 인터럽트 벡터를 생성하는 방법.
  21. 제 16 항 내지 제 20 항 중 어느 한 항에 있어서,
    상기 제 2 동작 모드에서, 인터럽트 서비스 루틴은 상기 인터럽트를 생성한 인터럽트 소스와 관련된 명령어들을 제공하는 각각의 어드레스로 분기하기 위해 상기 워킹 레지스터의 콘텐츠를 평가하는, 방법.
  22. 제 14 항 내지 제 21 항 중 어느 한 항에 있어서,
    상기 제 1 동작 모드에서, 인터럽트 서비스 루틴은 상기 인터럽트를 생성한 인터럽트 소스를 결정하기 위해 특수 기능 레지스터 내의 인터럽트 플래그를 폴링하는, 방법.
  23. 제 14 항 내지 제 22 항 중 어느 한 항에 있어서,
    상기 중앙 처리 유닛은 단지 하나의 인터럽트 입력부를 포함하는, 방법.
  24. 제 14 항 내지 제 22 항 중 어느 한 항에 있어서,
    상기 중앙 처리 유닛은 제 1 인터럽트 입력부와 제 2 인터럽트 입력부만을 포함하고, 상기 제 1 인터럽트 입력부는 상기 제 2 인터럽트 입력부보다 높은 우선순위를 갖는, 방법.
  25. 제 24 항에 있어서,
    상위의 우선순위 인터럽트가 하위의 우선순위 서비스 루틴을 인터럽트할 때, 상기 상위의 우선순위 인터럽트는 하위의 우선순위 인터럽트를 클리어하도록 구성되고, 관련 서비스 루틴은 상기 하위의 우선순위 서비스 루틴을 통해 복귀하지 않고 메인 코드로 직접 복귀하는, 방법.
  26. 제 24 항에 있어서,
    상위의 우선순위 인터럽트가 하위의 우선순위 서비스 루틴을 인터럽트할 때, 상기 상위의 우선순위 인터럽트는 메인 코드로 복귀하지 않고 상기 하위의 우선순위 인터럽트 서비스 루틴으로 직접 복귀하도록 구성되는, 방법.
  27. 마이크로컨트롤러로서,
    적어도 하나의 인터럽트 입력부 및 산술 로직 유닛과 결합된 레지스터를 포함하는 중앙 처리 유닛;
    적어도 하나의 인터럽트 신호를 상기 중앙 처리 유닛의 상기 적어도 하나의 인터럽트 입력부에 제공하도록 구성된 인터럽트 컨트롤러; 및
    상기 중앙 처리 유닛 및 상기 인터럽트 컨트롤러와 결합된 복수의 주변기기들을 포함하고,
    상기 마이크로컨트롤러의 주변기기에 의한 인터럽트의 어서트시, 상기 인터럽트 컨트롤러는 인터럽트 신호를 상기 중앙 처리 유닛으로 포워딩하고, 상기 중앙 처리 유닛은 상기 인터럽트를 생성한 상기 주변기기로부터 추가 인터럽트 정보를 수신하고, 상기 추가 인터럽트 정보 또는 상기 추가 정보로부터 유도된 데이터는 상기 레지스터에 저장되는, 마이크로컨트롤러.
  28. 제 27 항에 있어서,
    인터럽트를 수신한 후, 상기 중앙 처리 유닛은 서비스 루틴에 들어가기 전에 컨텍스트 세이브를 수행하도록 구성되고, 상기 레지스터는 상기 컨텍스트 세이브 후에 상기 추가 인터럽트 정보를 수신하는, 마이크로컨트롤러.
  29. 제 27 항 또는 제 28 항에 있어서,
    상기 추가 정보는 상수 값을 시프트하는데 사용되고, 상기 시프트된 상수 값은 상기 레지스터로 이동되는, 마이크로컨트롤러.
  30. 제 27 항 또는 제 28 항에 있어서,
    상기 추가 정보는 상기 CPU의 워킹 레지스터에 직접 저장되는 인터럽트 번호인, 마이크로컨트롤러.
  31. 제 27 항 내지 제 30 항 중 어느 한 항에 있어서,
    상기 마이크로컨트롤러는, 상기 인터럽트를 생성한 인터럽트 소스와 관련된 각각의 서비스 루틴으로 분기하기 위해 상기 워킹 레지스터의 콘텐츠를 평가하는 인터럽트 서비스 루틴을 제공하도록 프로그램되는, 마이크로컨트롤러.
KR1020177024324A 2015-03-06 2016-03-04 듀얼 모드 인터럽트를 갖는 마이크로컨트롤러 또는 마이크로프로세서 KR20170122758A (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201562129481P 2015-03-06 2015-03-06
US62/129,481 2015-03-06
US15/060,553 US10067892B2 (en) 2015-03-06 2016-03-03 Microcontroller or microprocessor with dual mode interrupt
US15/060,553 2016-03-03
PCT/US2016/020942 WO2016144777A1 (en) 2015-03-06 2016-03-04 Microcontroller or microprocessor with dual mode interrupt

Publications (1)

Publication Number Publication Date
KR20170122758A true KR20170122758A (ko) 2017-11-06

Family

ID=56849888

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177024324A KR20170122758A (ko) 2015-03-06 2016-03-04 듀얼 모드 인터럽트를 갖는 마이크로컨트롤러 또는 마이크로프로세서

Country Status (6)

Country Link
US (1) US10067892B2 (ko)
EP (1) EP3265921B1 (ko)
KR (1) KR20170122758A (ko)
CN (1) CN107251001B (ko)
TW (1) TW201638770A (ko)
WO (1) WO2016144777A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230069927A (ko) * 2020-09-11 2023-05-19 애플 인크. 스케일러블 인터럽트들

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109426528A (zh) * 2017-09-05 2019-03-05 东软集团股份有限公司 实现软件版本选择的方法、装置及存储介质、程序产品
US10439626B2 (en) * 2017-12-15 2019-10-08 Microchip Technology Incorporated Analog-to-digital converter with autonomous gain stage and auto scaling, and related systems and methods
CN110554979A (zh) * 2018-05-31 2019-12-10 瑞昱半导体股份有限公司 计时装置及其运行方法
CN111045730B (zh) * 2019-12-12 2023-07-21 南京沁恒微电子股份有限公司 一种用于risc-v架构的硬件快速中断处理系统及其方法

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0212432A (ja) * 1988-06-30 1990-01-17 Nec Corp データ処理装置
US5440747A (en) * 1993-09-27 1995-08-08 Hitachi America, Ltd. Data processor with control logic for storing operation mode status and associated method
US6202104B1 (en) 1998-07-28 2001-03-13 Siemens Aktiengesellschaft Processor having a clock driven CPU with static design
JP3778246B2 (ja) * 1999-03-23 2006-05-24 セイコーエプソン株式会社 割り込みコントローラ、asic、及び電子機器
US7793025B2 (en) * 2008-03-28 2010-09-07 Freescale Semiconductor, Inc. Hardware managed context sensitive interrupt priority level control
US8972642B2 (en) * 2011-10-04 2015-03-03 Qualcomm Incorporated Low latency two-level interrupt controller interface to multi-threaded processor
CN103544125B (zh) * 2012-07-12 2017-02-22 深圳市中兴微电子技术有限公司 中断的控制方法、中断的处理方法、中断控制器和处理器
JP6266239B2 (ja) * 2013-07-11 2018-01-24 ルネサスエレクトロニクス株式会社 マイクロコンピュータ

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230069927A (ko) * 2020-09-11 2023-05-19 애플 인크. 스케일러블 인터럽트들
US12007920B2 (en) 2020-09-11 2024-06-11 Apple Inc. Scalable interrupts

Also Published As

Publication number Publication date
CN107251001B (zh) 2020-08-04
WO2016144777A1 (en) 2016-09-15
EP3265921A1 (en) 2018-01-10
US20160259741A1 (en) 2016-09-08
CN107251001A (zh) 2017-10-13
TW201638770A (zh) 2016-11-01
EP3265921B1 (en) 2020-04-29
US10067892B2 (en) 2018-09-04

Similar Documents

Publication Publication Date Title
KR20170122758A (ko) 듀얼 모드 인터럽트를 갖는 마이크로컨트롤러 또는 마이크로프로세서
US9892069B2 (en) Posting interrupts to virtual processors
US5812868A (en) Method and apparatus for selecting a register file in a data processing system
US8191085B2 (en) Method and apparatus for loading or storing multiple registers in a data processing system
US8032681B2 (en) Processor selection for an interrupt based on willingness to accept the interrupt and on priority
US20130124823A1 (en) Methods, apparatus, and instructions for processing vector data
US10628351B2 (en) Sharing message-signaled interrupt vectors in multi-processor computer systems
JP2006502470A (ja) 複数のレジスタ・コンテキストを有するデータ処理システムおよび該システムのための方法
WO1999038074A1 (en) Method and apparatus for handling multiple level-triggered and edge-triggered interrupts
US6889279B2 (en) Pre-stored vector interrupt handling system and method
US20120151189A1 (en) Data processing with variable operand size
US7376762B2 (en) Systems and methods for direct memory access
AU747974B2 (en) Method for improved interrupt handling within a microprocessor
WO2019143749A1 (en) Direct memory access adapter
US20030097543A1 (en) Immediate operands
US20140195709A1 (en) Delivering real time interrupts with an advanced programmable interrupt controller
US11451241B2 (en) Setting values of portions of registers based on bit values
US8966149B2 (en) Emulation of an input/output advanced programmable interrupt controller
US7107478B2 (en) Data processing system having a Cartesian Controller
CN112540789A (zh) 一种指令处理装置、处理器及其处理方法
US6922760B2 (en) Distributed result system for high-performance wide-issue superscalar processor
US11816486B2 (en) Efficient inter-thread communication between hardware processing threads of a hardware multithreaded processor by selective aliasing of register blocks
CN113806025B (zh) 数据处理方法、系统、电子装置及存储介质
WO2009004628A2 (en) Multi-core cpu
JPS61121154A (ja) マルチプロセサシステムにおける制御方法