Project/Balancing Robot2014. 7. 23. 13:40

void DSP_Init()
{

 InitSysCtrl();

 Init_GPIO() ;

 

 DINT;

 

 InitPieCtrl();

 

 IER = 0x0000;
 IFR = 0x0000;

 

 InitPieVectTable();

 

 EALLOW;

 

 PieVectTable.TINT0 = &cpu_timer0_isr;

 PieVectTable.RXAINT = &RXA_ISR ;
 PieVectTable.RXBINT = &RXB_ISR ;
 PieVectTable.TXBINT = &TXB_ISR ;

 

 EDIS;

 

 Init_Timer0() ;

 Init_EVA() ;
 Init_EVB() ;
 Init_SCIA() ;
 Init_SCIB() ;
 Init_SPI() ;
 Init_ADC() ;

 

 PieCtrlRegs.PIECRTL.bit.ENPIE = 1 ;
 PieCtrlRegs.PIEIER9.bit.INTx1 = 1 ;
 PieCtrlRegs.PIEIER9.bit.INTx3 = 1 ;
 PieCtrlRegs.PIEIER9.bit.INTx4 = 1 ;
 PieCtrlRegs.PIEIER1.bit.INTx4 = 1 ;
 PieCtrlRegs.PIEIER1.bit.INTx6 = 1 ;
 PieCtrlRegs.PIEIER1.bit.INTx7 = 1 ;

 

 IER |= M_INT1;
 IER |= M_INT9 ;

 

 EINT; 
 ERTM;

}

 

<명령>

DINT : 전역 인터럽트 해제

EINT : 전역 인터럽트 가동

ERTM : 리얼타임 전역 인터럽트 가동

EALLOW : MRR 보호영역 해제

EDIS : MRR 보호

 

InitSysCtrl() : 시스템 설정

GpioCtrlRegs : GPIO컨트롤 레지스터

PieVectTable

PieCtrlRegs

----------------------------------------------------------------------------------------------------------

<설명1>

 

1.InitSysCtrl()

DSP281x_SysCtrl 헤더 및 C파일에 있는 함수로써 내용은 아래와 같다.

 

void InitSysCtrl(void)
{
   // Disable the watchdog
   DisableDog();

   // Initialize the PLLCR to 0xA
   InitPll(0xA);

   // Initialize the peripheral clocks
   InitPeripheralClocks();
}

 

와치독을 정지시키고 PLLCR을 초기화, peripheral clocks를 초기화 시킨다. 자세한 의미는 필요할 때 다시 알아보자.

 

----------------------------------------------------------------------------------------------------------

<설명2>

GpioCtrlRegs

 

PieVectTable

PieCtrlRegs

 

 PIE(Peripheral Interrupt Expansion) : 퍼리퍼럴 인터럽트 확장

 

위에서 보면 PIE vector table은 EALLOW에 의해서 보호되고 있다. 따라서 벡터테이블을 수정하려면 EALLOW를 사용하여 보호를 해제한 후 수정하고 다시 보호해준다. 수정내용을 살펴보면

 

 PieVectTable.TINT0 = &cpu_timer0_isr;

 PieVectTable.RXAINT = &RXA_ISR ;
 PieVectTable.RXBINT = &RXB_ISR ;
 PieVectTable.TXBINT = &TXB_ISR ;

 

나중에 나오겠지만 cpu_timer0_isr, RXA_SIR 등등은 사용자가 만들어 놓은 함수이다. 타이머 관련 함수 및 SCIA와 SCIB와 관련된 통신함수이다. 즉 이 함수에 대한 인터럽트 설정으로 보인다. 자세한 내용은 차후 확인한 후 수정한다.

 

이후 각종 초기화 함수들을 실행한 후 아래와 같이 입력하였다.

 PieCtrlRegs.PIECRTL.bit.ENPIE = 1 ;
 PieCtrlRegs.PIEIER9.bit.INTx1 = 1 ;
 PieCtrlRegs.PIEIER9.bit.INTx3 = 1 ;
 PieCtrlRegs.PIEIER9.bit.INTx4 = 1 ;
 PieCtrlRegs.PIEIER1.bit.INTx4 = 1 ;
 PieCtrlRegs.PIEIER1.bit.INTx6 = 1 ;
 PieCtrlRegs.PIEIER1.bit.INTx7 = 1 ;

INTx1,x3,x4는 각각 SCI A RX와 B RX, B TX를 Enable 시킨것이다

x6 및 x7은 각각 ADC 및 Timer를 Enable 시킨것이다.

자세한 내용은 차후 확인한 후 수정한다.

 

아래는 PIE관련 표와 그림이다.

 

 

 IER |= M_INT1;
 IER |= M_INT9 ;

 

위를 통해 CPU Intterupt1과 9를 Enable 시켰다.

----------------------------------------------------------------------------------------------------------

<나머지 주석처리했던 내용>

 

PieVectTable.TXAINT = &TXA_ISR ;
PieVectTable.XINT1 = &Xint1_isr ;
PieVectTable.ADCINT = &adc_isr;

 

Init_XINT() ;

'Project > Balancing Robot' 카테고리의 다른 글

[초기화5] Init_SPI()  (0) 2014.07.23
[초기화4] Init_SCIA(), Init_SCIB()  (0) 2014.07.23
[초기화3] Init_EVA(), Init_EVB()  (0) 2014.07.23
[초기화2] Init_GPIO()  (0) 2014.07.23
들어가면서  (0) 2014.07.23
Posted by 십자성군