[TOC]
# 初始化講解
- 一開始的 #ifdef 區段是給run flash時使用的
- 後續筆記會更了解這些初始化的用途
- 進入while前的初始化大致分成三部分
- InitSysCtrl
- 設置時鐘相關暫存器
- InitPie
- 關閉中斷,避免後續初始化時因為中斷發生使得初始化不穩定、失敗
- 初始化中斷向量表
- <font color="red">在進入while前要把中斷總開關打開</font>
- 其他Initialization(使用者)
- 這邊的初始化是指把各暫存器設定成想要的功能、模式
- 程式庫裡面有各功能初始化的範例,但幾乎都是寫入0
- <font color="red">基本上照這樣的初始化步驟,只需要關注User Initializing Step即可,前面都不用動</font>
# 範例程式
- 修改自Generator生成的main.c
- 此檔案與專案可見FTP
-
``` c++=
void main(void){
#ifdef Run_FLASH // EXAMPLE_FLASH, if defined, is in CCS project options
//--------Copying Flash to RAM , must use "F2812_KST_Flash.cmd"----------
memcpy(&UserRamFuncsRunStart, &UserRamFuncsLoadStart, (Uint32)&UserRamFuncsLoadSize);
#endif
//----------------------------------------------------------------
//----------------------------------------------------------------
// Initialize System Control:
//----------------------------------------------------------------
//----------------------------------------------------------------
// PLL, WatchDog, enable Peripheral Clocks
// This example function is found in the DSP281x_SysCtrl.c file.
//----------------------------------------------------------------
InitSysCtrl();
//----------------------------------------------------------------
//----------------------------------------------------------------
// Clear all interrupts and initialize PIE vector table
// This step is needed to avoid the interrupt during the
// following initializing step.
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// Disable CPU interrupts
//---------------------------------------------------------------------------
DINT;
// Disable CPU interrupts and clear all CPU interrupt flags:
//---------------------------------------------------------------------------
IER = 0x0000;
IFR = 0x0000;
// Initialize PIE control registers to their default state.
// The default state is all PIE interrupts disabled and flags
// are cleared.
//---------------------------------------------------------------------------
// This function is found in the DSP281x_PieCtrl.c file.
InitPieCtrl();
// Initialize the PIE vector table with pointers to the shell Interrupt
// Service Routines (ISR).
// This will populate the entire table, even if the interrupt
// is not used in this example. This is useful for debug purposes.
// The shell ISR routines are found in DSP281x_DefaultIsr.c.
//---------------------------------------------------------------------------
// This function is found in DSP281x_PieVect.c.
InitPieVectTable();
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// User Initializing Step
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// Default Initializing Function in Library
//---------------------------------------------------------------------------
// InitPeripherals(); //this include InitEv, InitAdc..., found in DSP281x_InitPeripherals.c
// InitGpio(); // found in DSP281x_Gpio.c
// System Clock Initializing
//---------------------------------------------------------------------------
EALLOW; //This is needed to write to EALLOW protected registers
SysCtrlRegs.HISPCP.all = HSPCLK_PSC_10; // HSPCLK = SYSCLKOUT/HSPCLK_PSC_10
EDIS;
// Interrupts that are used in this example are re-mapped to
// ISR functions found within this file.
//---------------------------------------------------------------------------
EALLOW; //This is needed to write to EALLOW protected registers
PieVectTable.T1PINT = &eva_timer1_isr; // Timer1 ISR
EDIS; //This is needed to disable write to EALLOW protected registers
// PIE Register Initializing
//---------------------------------------------------------------------------
PieCtrlRegs.PIEIER2.all = M_INT4;// Enable PIE group 2 interrupt 4 for T1PINT
// Event Manager Initializing
//---------------------------------------------------------------------------
// init_eva_timer1();
// ADC Initializing
//---------------------------------------------------------------------------
// AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;
// AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;
// AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 1 Cascaded mode
// AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x1;
// AdcRegs.ADCTRL1.bit.CONT_RUN = 1; // Setup continuous run
// Initialize GPIO
//---------------------------------------------------------------------------
// GPIO_select();
// CPU Interrupt Enable
//---------------------------------------------------------------------------
// Enable CPU INT2 for T1PINT, INT3 for T2PINT, INT4 for T3PINT
// and INT5 for T4PINT:
// IER |= (M_INT2 | M_INT3 | M_INT4 | M_INT5);
IER |= M_INT2;
// Variable Initalizing
count = 0;
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// Enable global Interrupts and higher priority real-time debug events:
// Final step of all the interrupt
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
// Infinite Loop
//---------------------------------------------------------------------------
while(1){
}
}
```