통신(SPI, I2C, SCI, CAN) DSP 교육

SPI
1. SPI란?

- SPI는 Serial Peripheral Interface의 약자로서 직렬 통신의 한 방법 이며 동기식 통신을 한다.(모토로라에서 제안)

- Data 송수신에는 3개의 선이 필요하며 Full-duplex통신이 가능하다

(Full-duplex란 data 송신부와 수신부가 동시에 data전송, 즉 교환이 가능하다는 의미이다. 이와 대비되는 뜻으로는 Half-duplex가 있으며 간단하게 Full-duplex는 전화기, Half-duplex는 무전기로 보면 된다.)

- Single Master 구조를 가지며 Slave는 Multi-slave로 여러 개를 가질 수 있는데 이때는 selection을 위해 선이 더 필요하다.

- 주로 근거리 통신, 즉 chip간 통신에 사용된다.



2. SPI 통신의 구조

- 4개의 SPI통신용 핀

    1) SPISOMI : SPI slave-output/master-input pin

        (slave에서는 전송, master에서는 수신을 하는 pin)

    2) SPISIMO : SPI slave-input/master-output pin

        (slave에서는 수신, master에서는 전송을 하는 pin)

    3) /SPISTE : SPI Slave transmit-enable pin

    4) SPICLK : SPI serial-clock pin ( SPI통신은 동기식 이므로 CLK signal이 필요)

- SPI 동작구조


위의 그림은 SPISTE, 즉 enable pin을 제외한 master와 slave간의 data 송수신 구조만 나타낸 것이다. 옆의 그림에서 ss는 multi-slave에서 slave를 선택하는 pin이다.

그림에서 알 수 있듯이 master와 slave 모두 본인의 MSB부터 전송하며 받은 data는 LSB부터 채워나감을 알 수 있다. 이 때 동작 구조를 선택할 수 있는데

    1) master만 slave로 data전송

        (master가 data전송, dummy 수신)

    2) master와 slave간 상호 전송

        (master와 slave의 data가 교환)

    3) slave만 master로 data전송

        (slave만 data전송, dummy 수신)




3. 28x의 SPI의 특징

- Master/Slave모드 모두 지원

- 자체 분주기로 125가지 통신속도 조절 가능

- 통신 데이터 크기 조절 가능(1~16bit)

- 4가지 방식으로 동기 클럭을 설정

( 1) Rising edge without delay

2) Rising edge with delay

3) Falling edge without delay

4) Falling edge with delay )

- polling 또는 interrupt 방식으로 data 송수신 가능

- 16레벨의 FIFO를 가진다.



I2C

1. I2C란?

- Inter-Integrated Circuit의 약자로 동기식 직렬통신의 한 방식이다.

- 통신에는 2개의 선이 필요하며 Half-duplex 통신이 가능하다.

(Half-duplex는 무전기와 같이 data 동시교환이 불가능하다.)

- Multi-master mode를 지원하기 때문에 여러 개의 주변회로와 연결이 가능하다.

- 이 역시 SPI와 마찬가지로 chip간 근거리 통신에 자주 이용된다.



2. I2C의 동작구조

I2C는 기본적으로 위와 같은 구조이다. Multi-master와 Multi-slave 모두 같은 통신 라인에 연결 되어있다.

1) 라인에 연결된 마스터들 중 하나가 Start신호를 보내면 Bus를 점유

    (만약 마스터들이 동시에 start신호를 보내면 낮은 slave address를 보낸 master가 우선순위를 가진다.)

2) Bus를 점유한 master가 slave address와 Read/Write 정보를 Bus에 전송

3) master가 보낸 address와 일치하는 slave가 ACK신호를 전송

4) ACK신호를 받은 마스터가 slave에 data전송, 전송 후 Bus 점유를 해제

    I2C의 인터럽트로는 7개의 기본 인터럽트와 2개의 FIFO인터럽트가 가 있다. 7개의 기본인터럽트는 여러 개가 한 번에 걸릴 수 
    없고 Arbiter에 의해 한 개가 선택되어 걸린다.

    그리고 FIFO 인터럽트는 기본 인터럽트와는 별개 이므로 기본 인터럽트와 중복되어 걸릴 수 있다.





SCI
1. SCI란?

- SCI는 Serial Communication Interface의 약자로 비동기식 직렬통신의 한 방식

- 일반적으로 UART라고 불리기도 하며 1:1 통신에 특화된 면모를 보인다.

- TX, RX 두 개의 선을 사용하며 Full-duplex 통신을 지원한다.

- 주로 장거리 통신(보드 간 통신)에 이용하므로 chip의 신호만으로는 그 강도가 약하기 때문에 별도의 트랜시버를 이용해서 신호를 증폭해 통신한다. (우리가 알고 있는 RS-232C, RS-422 등은 이런 트랜시버에 속한다.)



2. SCI의 동작구조

SCI의 구조는 간단하게 위 그림과 같다. 이 경우 Data 송수신이 별도로 이루어지는데 SCI의 경우는 2개의 Shift register가 있으므로 Data의 상호 교환이 가능하다. SPI와는 달리 SCI는 LSB부터 전송이 되는데 TX shift register의 LSB가 TX핀으로 넘어가고 수신부 RX핀으로 전달된다. 이 전송된 비트는 RX shift register의 MSB로 넘어가게 된다.

SCI의 경우는 비동기식 직렬 통신이기 때문에 통신 속도(Baud rate)를 맞춰줘야 하는데 예를 들어 왼쪽의 SCI이 9600bps(baud per second)의 통신 속도를 가지면 오른쪽의 SCI도 9600bps의 통신 속도를 가져야 한다.



3. SCI의 특징

- 2개의 통신용 핀을 가진다. (SCITXD = TX, SCIRXD = RX)

- 자체 분주기로 65535가지로 통신속도 조절이 가능하다.

- 통신 데이터 크기 조절이 가능하다.

- 4가지 방식의 error detection flag를 가진다.

- NRZ(none return to zero) format을 가진다.

(NRZ란 예를 들어 1101의 data를 보내면 1101 그대로 보내는 것이며 반대로 RZ는 10100010 data사이에 0을 return해 data간 구분이 쉽도록 하는 것이다.)

- polling 방식, interrupt방식 모두로 송 수신이 가능하다.

- 16비트 송수신 FIFO를 가지고 있다.

- 자동 Baud rate 감지 기능을 가진다.(한 쪽의 통신속도를 check해서 자동으로 맞춰준다.)




ECAN

1. eCAN이란?

- Enhanced Controller Area Network의 약자로 비동기식 직렬 통신의 한 방식이다.

- 2개의 선으로 통신하며 SCI와는 달리 Half-duplex 통신이 가능하다.

- 멀티마스터-멀티슬레이브 구조가 가능해 N:N 통신이 가능하다.

- Differential 신호방식을 사용하므로 노이즈에 강하다.

- 주로 중장거리 보드 간 통신에 사용되므로 이 역시 별도의 트랜시버를 필요로 한다.



2. eCAN의 동작 구조

CAN통신은 일반적으로 위와 같은 구조를 가진다. CAN을 나온 data는 트랜시버를 거쳐 CAN H, CAN L로 data가 넘어가게 되는데 이 트랜시버를 거치며 사용하는 신호 방식인 differential 신호 방식이 CAN통신의 특징이다.

트랜시버에는 TX에서 나온 data를 받아서 Inverting을 하는 데 1번 한 것을 CAN H에, 2번 한 것을 CAN L에 전달하고 이 두 신호의 전위차로 원 신호를 파악하게 된다. 좀 더 자세하게 살펴보기 위해 그래프를 살펴본다.

이 그래프는 TX에서 101이 트랜시버를 거쳐서 나왔을 때를 나타낸 것인데 CAN H와 CAN L의 전위차가 작으면 1, 전위차가 크면 0으로 하여 원 신호인 101을 파악할 수 있음을 알 수 있다. 그리고 이러한 신호 방식은 noise가 생기더라고 전위 차이는 바뀌지 않기 때문에 noise에 굉장히 강한 모습을 나타낸다.

그리고 CAN통신에서 실제로 주고 받는 data는 이 Mail box에 저장되고 보내지는데 main box에는 각각의 ID가 있어서 이 ID가 address역할을 하여 특정 mail box의 data를 송수신 할 수 있다.

CAN에서 실제로 전달되는 메시지 구조는 ID, Data를 제외하고 Start, ACK 등 여러 가지가 포함되는데 이는 따로 저장되어 있지 않고 개발자가 설정하면 자동으로 추가되어 전달된다.

data를 주고받는 방식은 SPI와 비슷하게 master에서 ID와 data를 같이 송신하면 slave에서 ID를 check하고 만약 ID가 일치하면 data를 받아들이게 된다.


ADC DSP 교육

ADC

1. ADC의 구조

ADC의 구조는 위의 그림을 통해 개략적으로 알 수 있다. 우선 입력은 16 채널이 존재 하는데 ADCINA0~7이 MUX1과 S/H-A에 연결이 되어 있고, ADCINB0~7이 MUX2과 S/H-B에 연결되어 있다. ADC 인풋 시그널은 12비트 ADC모듈을 거친 후에 Result register에 들어가는데 ADCINA 0이 register 0에 ADCINA 1이 register에 들어가는 듯 무조건 순차적으로 들어가는 것이 아니라 ADCIN 채널 중에 먼저 변환되는 순서대로 들어가게 된다. 즉 채널 연결 순서와 result register의 순서는 상관이 없다.

ADC모듈에는 ACD control register, 즉 sequencer와 동작 신호가 연결이 되어 있으며, sysyem clock을 받아서 분주를하여 사용한다.


2. ADC의 특징

- 입력 허용 전압 : 0V ~ 3V (3.3V가 아님을 주의한다.)

- 두 개의 S/H가 탑재된, 파이프라인 방식의 12 bit ADC

- 최대 12.5 MSPS(Mega Sample per second)

- 16채널 입력 및 저장용 버퍼

- 오토 시퀀서 탑재(16채널의 순서를 임의로 조정할 수 있다.)

- 시퀀서 오버라이드 모드 선택(result register를 순차적으로 사용할지를 결정한다.)

- Sample/Hole 신호획득 조절용 분주회로 탑재

- 다양한 트리거 모드 지원

- 두가지 인터럽트 모드 제공(시퀀서 동작 완료시 마다/ 두 번째 완료시 마다)

- Calibration 기능(현재 상황에 맞게 ADC를 최적화 시킨다.)

- DMA 지원(Direct Memory Access의 약자로 Data가 cpu를 거치지 않고 입출력 장치에서 메로리고 직접 접근하는 방법)



3. 시퀀서란?

시퀀서란 한마디로 말해서 입력 채널을 조작할 때 외부 회로의 도움 없이 채널의 순서등을 바꿀 수 있게 해주는 기능으로 개발자가 필요 채널을 설정 하거나 한 포인트에서 입력을 중복으로 받아 오거나 할 때 사용한다.



4. 시퀀서 응용

시퀀서의 레지스터 설정은 Data sheet의 레지스터를 보면 알 수 있으니 참고 하도록 하고 이번엔 시퀀서를 응용해서 노이즈를 줄이는 방법을 살펴본다.

이 그림은 노이즈가 낀 어떠한 신호를 ADC하여 받아들이는 것을 나타낸다. 옆의 그림에서 보면 첫 번째 Sampling point에서 점이 8개 찍혀 있는것을 볼 수 있다. 이는 시퀀서에서 ADCINA0-> ADCINA0->ADCINA0->ADCINA0->ADCINA0 이렇게 8번 지정하여 한 지점에서의 신호를 8번 가져와 result register에 순서대로 저장한다. 가져온 data 전부를 더한 후 8로 나누면

임을 알 수 있다. 즉, 원신호는 그대로 받고 noise는 1/8이 되어 신뢰도가 향상했다.



※ 주의사항 : interrupt latency

ADC 입력 채널을 통해 들어온 값은 result register에 저장이 되는데 이때 걸리는 interrupt에 의해 이 data가 넘어가게 된다. 문제는 이러한 interrupt가 걸리면 interrupt latency, 즉 인터럽트 지연이 생기게 되는데 이 때 sampling rate을 주의해야 한다. sampling rate 가 높아지면 interrupt latency가 채 끝나기 전에 다음 값이 sampling되어 들어오기 때문에 값을 다 받아오지 못하는 경우가 생긴다. 이로 인해 sampling rate를 조절 해야 하며 또 하나의 방법으로는 매번 result register에 값이 들어 올 때마다 값을 interrupt를 걸어 값을 가져 오는 것이 아니라, 1 sequence(또는 1block) 단위로 interrupt를 걸어 data를 받아 올 수도 있다.(인터럽트를 자제할 필요가 있다.)


ECAP와 EQEP DSP 교육

ECAP

1.ECAP란?

Enhanced capture의 약자로 간단하게 말해서 시간변위의 analog data를 digital로 바꾸는 동작을 의미한다.



2. ECAP 모듈의 특징

    - 32bit 타이머를 기반으로 한다. (Overflow없이 42.9sec 신호타이밍 검출 가능)

    - 4개의 32bit Time stamp 레지스터를 가지고 있다.

    - 입력 신호의 prescaling이 가능하다.

    - 2가지 동작모드(Absolute Time-Stamp mode, Time Difference Mode)

    - APWM Mode(Auxilary PWM)

       (Capture를 사용하지 않을 때는 eCAP모듈을 PWM모듈과 같이 사용하는 것을 말한다.)



3. Absolute Time-stamp Mode

- 이 모드에서는 PWM 입력신호의 Rinsing edge를 검출 하는데 첫 번째 Rising edge를 첫 번째 Time-stamp에 저장, 두 번째 Rising edge의 time을 두 번째 Time-stamp에 저장하는 이런 방식으로 계속 신호를 받아서 기록하고 Timer는 계속 증가하는데 이 경우 Timer가 신호가 끝나기 전까지 reset되지 않기 때문에 overflow가 발생할 수 있다.



4.Time Difference Mode

- 이 모드에서는 PWM 입력신호에서 Rising edge와 그 다음 Rising edge 사이의 시간을 저장하는데 edge가 detect되면 자동을 Timer가 reset이 되기 때문에 overflow가 거의 발생하지 않는다. 그리고 두 edge간에 시간은 Time-stamp에 기록되는 값을 읽으면 된다.



5. Auxilary PWM Mode

- Capture mode가 필요하지 않다면 mode를 바꿔서 PWM 채널로 확장이 가능하다. 이 모드에서는 phase shift기능과 ePWM모듈과 동기화 기능은 제공을 하지만 ePWM의 다른 기능들은 사용 할 수 없다.




EQEP란?

- Enhanced Quadrature Encoder Pulse의 약자로 엔코더의 신호를 입력 받아, Pulse stream과 Direction Flag로 가공한다. (Encoder로부터 QEP A, QEP B, QEP I 신호를 받아 가공하는데 QEP A, B는 두 개의 pulse로 위치 정보를 파악하고 QEP I는 영점을 맞추는 역할을 한다.)

- 가공된 Pulse Stream과 Direction Flag / Timer를 이용해서 위치 및 회전방향 정보를 획득 한다.


PWM DSP 교육



PWM

1. PWM이란?













PWM은 Pulse Width Modulation의 약자로서 일정한 주기를 가지는 신호에서 t_high와 t_low비율로 평균 전압, 또는 신호의 평균 값을 구하는 방법, 또는 표현법




2. PWM의 장점

    - 디지털 시스템에서 구현이 쉽다

      (디지털 PWM의 경우 타이머 및 compare 레지스터의 값 비교로 쉽게 구현이 된다.)

    - 전력 손실이 적다.

    - 노이즈에 강하다.

    - 대전류 구동에 적합하다.




3.PWM의 생성원리

1) 비대칭형 PWM(Asymmetric)

옆의 그림은 기본적으로 타이머가 Up-count mode일 때를 나타낸 것이다. 타이머는 연결된 clock signal에 따라서 증가를 하고 주기 레지스터의 값에 도달하면 다시 0으로 clear가 된다. 0에서 시작해서 다시 0으로 클리어가 될 때 까지를 1주기라고 하며 옆의 그림에서의 빨간 줄이 PWM의 duty를 결정하는 비교 레지스터이다. 타이머 값이 이 비교 레지스터의 값과 일치하면 PWM 값을 set 또는 clear를 하게 되는데 이는 동작 모드에 따라 조절이 가능하며 위 PWM 신호를 inverting하여 신호를 보낼 수도 있다.

이러한 비 대치형 PWM에는 단점이 존재 하는데, 이는 타이머가 0으로 clear되는 순간 PWM 신호도 falling한다는 것이다. 이는 같은 주기를 가지는 PWM 신호가 외부 스위치를 조작 할 때 타이머가 clear 되는 시점이 같으므로 외부 스위치의 스위칭 타이밍이 같아지게 되며 아날로그 회로에 대한 스위칭 노이즈의 영향이 증대되는 문제가 발생한다.

2) 대칭형 PWM(Symmetric)

대칭형 PWM의 경우는 일반적으로 옆의 그림과 같은 모양을 나타낸다. 이 경우 PWM의 주기는 타이머가 주기 레지스터와 같은 값이 되도록 up-count했다가 아시 doun-count해서 0이 되는 순간이 주기이므로 비 대칭형일 때의 2배이고 듀티비는 역시 비교 레지스터의 값과 같아지는 시점으로 듀티를 잡는다. 타이머가 up-count나 down-count에서 비교 레지스터의 값이 될 때 PWM신호가 set이나 clear가 되는 지는 설정에 따라 조절 할 수 있으며, 이 경우는 PWM의 rising time이나 falling time이 다르기 때문에 외부 스위치가 여러 개 연결 되어 있다고 하더라고 스위칭 타이밍을 다양하게 운용할 수 있다. 그리고 비교 레지스터를 운용하면 PWM이 set되는 타이밍이나 clear되는 타이밍을 독립적으로 조절 할 수 있다.





4. ePWM의 모듈의 특징

    - 1개의 16bit 타이머를 기반으로 한다.

    - 모듈당 A, B 두 개의 핀을 보유하고 있으며 두 개의 비교 레지스터(Compare register)로 독립적인 듀티 제어가 가능하다. 
       ( 하지만 이 경우 동일 타이머를 기반으로 하기 때문에 주기는 같게 된다.)

    - 모든 이벤트 들은 인터럽트로 활용 가능하며, ADC의 SOC(Start of conversion) 신호로도 사용 할 수 있다.

    - 이벤트 prescale 기능이 있다. (매번 발생하는 event마다 인터럽트를 발생할 필요가 없을 경우 prescale기능을 이용하여 
      몇 번의 event마다 인터럽트가 발생할 지를 설정할 수 있다.)

    - 데드밴드 유닛을 보유하고 있다.( 밑에서 설명)

    - 트립 유닛을 보유하고 있다.

    - Chopper유닛을 보유하고 있다.

    - 고분해능 (High resulution) PWM호로를 가지고 있다.(EPWMxA 채널만 해당한다.)




5.위상 동기화 기능

PWM 모듈에는 각각 1개의 phase register가 존재하며 SYNCI, SYNCO 핀을 가지고 있다. 이는 모듈 간 위상 동기화를 위해 존재하는 것인데 1개의 모듈이 master가 되고, 나머지 모듈이 slave가 되어 동작한다. Master인 모듈에서는 SYNCO 핀을 통해 동기 신호를 전달하고 Slave모듈에서는 SYNCI을 통해 들어온 이 신호가 phase register에 phase register에 설정한대로 위상이 맞춰지게 된다. 이는 삼상 시스템에서 위상차를 줄 때 가장 강력하게 사용 될 수 있다.





ePWM의 서브모듈

ePWM 모듈에는 총 7개의 서브 모듈을 가지고 있는데 순서대로 보면 TB -> CC -> AQ -> DB -> PC -> TZ -> EPWMxA, B out 이러한 순서로 신호가 넘어가게 된다. 그리고 모든 이벤트 들은 ET모듈로 전달된다.


1) Time-Base(TB) 서브 모듈

- PWM carrier 신호를 생성하는 16bit 타이머를 기반으로 한다.

- 2개의 prescaler를 이용해서 system clock를 분주해서 사용한다.

- TBPRD register는 shadow register를 보유하고 있다.

2) Counter-Compare(CC) 서브모듈

- PWM의 duty-ratio를 결정짓은 비교 레지스터와 컨트롤 레지스터로 구성

- TB 모듈에서 타이머 값을 받고, 설정된 비교 레지스터와 타이머 값을 비교, CMPA,B이벤트를 생성하여 AQ. ET 서브 모듈에 전달한다.


3) Action-Qualifier(AQ) 서브모듈

- TB, CC 서브모듈의 이벤트들을 입력 받아서 해당 이벤트들의 PWM 로직 상태를 정한다.(set/clear/toggle/do nothing) 이 4가지 동작을 지원한다.

- AQ를 거치고 출력 핀은 EPWMxA,B 두 가지 출력이 나온다.


4) Dead-band(DB) 서브 모듈

- 스위칭 소자의 On/Off 시간차로 발생하는 소손을 방지한다.

(PWM의 rising edge와 falling edge에 data time을 준다.)

- TBCLK를 기반으로 동작하는 10bit 타이머를 2개 보유한다.

- 동작, 입력소스는 반전설정, by pass가 있다.

모듈 내부에 존재하는 10bit 타이머 2개는 Rising edge delay와, Falling edge delay를 줘서 옆의 그림에 표시된 영역과 같은 dead band를 준다.







5) PWM-Chopper(PC) 서브 모듈

- PWM 신호를 쪼개는 역할을 하는 서브 모듈

- Chopper 신호의 첫 번째 펄스 폭은 별도로 조절이 가능하고 두 번째 부터의 신호들은 일괄적으로 같은 듀티를 가진다.(by pass로 쪼개지 않고 전달할 수도 있다.


6) Trip-Zone 서브모듈

- 어떤 에러나 경고 상황에 대해 PWM 로직 상황을 강제로 변동 시키는 모듈이다.

- One shot과 continuous, 이 두 가지 동작 모드를 지원하는데 one shot mode는 에러를 감지해 PWM핀 상태가 바뀌면 개발자가 다시 바꿀 때 까지는 해당하는 PWM logic을 유지하는 것으로 주로 short나 과전류를 체크하는데 사용된다. continuous mode는 cycle에 따라 해당 에러가 바뀌기 전 까지는 계속 trip이 걸렸다가 풀렸다가를 반복하는데 이는 주로 current limiting에 사용된다.


7) Event-trigger(ET) 서브 모듈

- TB, CC 모듈이 생성하는 이벤트들을 입력 받아, 인터럽트나 ADC 시작 신호(SOC)를 생성하는 역할을 한다.

- event prescale 기능으로 몇 번의 이벤트들마다 인터럽트 신호를 생성하는지 설정할 수 있다.


인터럽트(Interrupt) DSP 교육

1. Interrupt의 사용

C28x에서는 non-maskable인 RS와 NMI를 제외하고 INT1~INT14의 14개의 인터럽트를 사용할 수 있는데 이 가지 수가 작기 때문에 PIE(Peripheral Interrupt Expansion) 인터럽트 확장회로를 통해 INT개수를 늘린다. 즉 주변 회로의 인터럽트를 처리하도록 interrupt line을 늘리는 것이며 INT1~INT12까지 12개의 LINE이 8개로 다시 쪼개지게 된다.




2. CPU에서 Interrupt 처리과정

Core Interrupt(INTx) -> IFR -> IER -> INTM -> Core

CPU에서는 위의 순서를 거쳐 Interrupt Signal이 전달되는데 IFR은 Interrupt Flag Register이며 Interrupt Signal이 들어오면 자동으로 1로 set이 된다. IER은 Interrupt Enable Register을 의미하며 일종의 스위치로 해당 인터럽트의 사용여부를 결정하며 INTM은 주 스위치로써 전체 인터럽트의 사용 여부를 결정한다.




3. PIE회로에서 Interrupt 처리과정

한 개의 코어 인터럽트 Signal은 8개의 하위 Signal로 쪼개지는데 INTx.1~INTx.8로 표현하며 PIE회로에서도 PIEIFRx, PIEIERx Register가 존재한다. 그러므로 인터럽트를 사용하는데 설정해야 하는 총 스위치의 개수는 PIEIERx, IER, INTM 이렇게 3개이다.




※ PIE Interrupt Acknowledge Register(PIEACK)의 기능

이 레지스터는 PIE회로에서 나온 인터럽트 Signal이 IFR로 넘어가는 것을 관장하는데 이 레지스터의 값과 PIE 인터럽트의 값이 gate로 연결이 되어있어 이 signal을 enable 되어 있어야 signal이 넘어간다. 그리고 이 register은 flag와는 다르게 자동으로 disable되지 않기 때문에 코드 상에서 disable을 시켜줘야 한다.



※ 다중 인터럽트에서 우선 순위는?

PIE그룹 내에서 숫자가 낮은 순서, CPU그룹 내에서 숫자가 낮은 순서로 우선 순위가 높다. 즉 INT1.1이 가장 우선순위가 높다.

인터럽트 지원 소스코드

    1) DefaultISR.h

        기본적인 인터럽트 서비스 루틴이 설정되어 있으며 TI사에서 미리 서비스루틴을 짜놓았다.(물론 내용은 없다.)

    2) PieCtrl.c

        PIE 레지스터, 즉 스위치 및 플래그를 초기화 하는 역할을 한다.

    3) PieVect.c

        PIE 벡터 기록을 담당하고 있는 레지스터로서 인터럽트가 걸리면 개발자가 원하는 인터럽트 서비스 수틴으로 jump 하기
        위해 인터럽트 벡터를 저장하는 곳이다.



※Context Save

인터럽트를 실행하게 되면 원래 main에서 실행되고 있던 명령을 중지하고 넘어가게 된다. 이 경우 인터럽트를 종료하고 다시 돌아올 때 원래의 명령을 이어서 실행을 해야 하므로 기존에 사용하던 flag나 register값들을 저장해 놓아야 하는데 이러한 과정을 Context save라고 한다.


1 2