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 |