본문 바로가기

연구&개발/DSP28335

DSP28335 - SCI -A,B,C 인터럽트 동작허용시 주의할점.

DSP 28335는 SCI 인터페이스를 A, B, C 3가지를 가지고 있으며 다음과 같이 크게 3가지의 기능으로 나눌 수 있다.

1. 인터럽트 방식의 송수신 방법

2. 폴링 방식의 송수신 방법

3. FIFO를 이용한 인터럽트 방식의 송수신 방법


필자는 센서 3개 (가속도, 자이로, GPS)를 이용하여 INS 를 구현하여야하기 때문에 , SCI A,B,C를 모두 사용하게 되었다.


이때 설정 소스중 


EALLOW; // This is needed to write to EALLOW protected registers

PieVectTable.SCIRXINTA = &sciaRxFifoIsr; // 시리얼 A 수신인터럽트 설정

PieVectTable.SCIRXINTB = &scibRxFifoIsr; // 시리얼 B 수신인터럽트 설정

PieVectTable.SCIRXINTC = &scicRxFifoIsr; // 시리얼 C 수신인터럽트 설정


EDIS;   // This is needed to disable write to EALLOW protected registers



// Step 5. User specific code:


// Enable interrupts required for this example

PieCtrlRegs.PIEIER8.bit.INTx5 = 1; // PIE Group 8, INT5 SCI C RX

PieCtrlRegs.PIEIER8.bit.INTx6 = 1; // PIE Group 8, INT5 SCI C RX

PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block

PieCtrlRegs.PIEIER9.bit.INTx1 = 1; // PIE Group 9, int1 SCI A RX

//PieCtrlRegs.PIEIER9.bit.INTx2 = 1;     // PIE Group 9, INT2 SCI A TX

PieCtrlRegs.PIEIER9.bit.INTx3 = 1; // PIE Group 9, INT3 SCI B RX

//PieCtrlRegs.PIEIER9.bit.INTx4 = 1;     // PIE Group 9, INT4 SCI B TX


//PieCtrlRegs.PIEIER8.bit.INTx6 = 1;     // PIE Group 8, INT6 SCI C TX


IER = 0x0080; // Enable CPU INT 8

IER |= M_INT9; // Enable CPU INT 9

EINT;


노란색 음영 처리 된 부분이 SCI-C 송수신 인터럽트 허용 레지스터리이다. 

근데 내가 처음이라 실수한 부분이 IER 레지스터리를 놓친것이다 .  SCI A,B가 있는 인터럽트 9만 설정하고, SCI C가 있는 인터

럽트 8을 설정하지 않은것이다.

AVR과는 다르게 DSP는 많은 인터럽트를 크게 1~x 까지 번호로 나누었고 다시 세분화하여 1.1 , 1.2 ~  8.5, 8.6 9.4, 9.5 

이런식으로 나누었던 것을 생각하면 IER (interrupt enable register)에서 다시 세부적으로, 인터럽트 1,2,3,4,5,6,7,8 ... 을

세부적으로 설정을 해야한다.


다시 한번 명심하자.


'연구&개발 > DSP28335' 카테고리의 다른 글

DSP sprintf 문제시  (0) 2012.11.20
DSP28335 - ILLEGAL_ISR 에러  (1) 2012.10.25
DSP28335 float to string 문제해결  (0) 2012.10.25