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 |