原创 解释F2812启动的标准C文件

2008-9-24 09:37 2515 3 3 分类: 处理器与DSP

// Step 0.  Include required header files<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


         // DSP28_Device.h: device specific definitions #include statements for


         // all of the peripheral .h definition files.


         // DSP28_Example.h is specific for the given example. 


 


#include “DSP28_Device.h”


 


// Prototype statements for functions found within this file.


interrupt void cpu_timer0_isr(void);


 


void main(void)


{


 


// Step 1. Initialize System Control registers, PLL, WatchDog, Clocks to default state:


    // This function is found in the DSP28_SysCtrl.c file.


    InitSysCtrl();


 


 


// Step 2. Select GPIO for the device or for the specific application:


    // This function is found in the DSP28_Gpio.c file.


    InitGpio();


 


// Step 3. Initialize PIE vector table:


    // The PIE vector table is initialized with pointers to shell Interrupt


    // Service Routines (ISR).  The shell routines are found in DSP28_DefaultIsr.c.


    // Insert user specific ISR code in the appropriate shell ISR routine in


    // the DSP28_DefaultIsr.c file.


 


    // Disable and clear all CPU interrupts:


    DINT;


    IER = 0×0000;


    IFR = 0×0000;


 


    // Initialize Pie Control Registers To <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />DefaultState:


    // This function is found in the DSP28_PieCtrl.c file.


    InitPieCtrl();


 


    // Initialize the PIE Vector Table To a KnownState:


    // This function is found in DSP28_PieVect.c.


    // This function populates the PIE vector table with pointers


    // to the shell ISR functions found in DSP28_DefaultIsr.c.


    InitPieVectTable();   


// Step 4. Initialize all the Device Peripherals to a known state:


    // This function is found in DSP28_InitPeripherals.c


    InitPeripherals();


 


// Step 5. User specific functions, Reassign vectors (optional), Enable Interrupts:


    // Initialize CPU Timer 0:


    //        > Set Up For 1 Second Interrupt Period


    //        > Point To “cpu_timer0_isr” function


 


    // Reassign CPU-Timer0 ISR.


    // Reassign the PIE vector for TINT0 to point to a different ISR then


    // the shell routine found in DSP28_DefaultIsr.c.


    // This is done if the user does not want to use the shell ISR routine


    // but instead wants to use their own ISR.  This step is optional:


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


    PieVectTable.TINT0 = &cpu_timer0_isr;


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


    // Include application specific functions. This is for this example:


    // Configure CPU-Timer 0 to interrupt every second:


    ConfigCpuTimer(&CpuTimer0, 100, 1000000);    // 100MHz CPU Freq, 1 second Period (in uSeconds)


     StartCpuTimer0();


 


    // Enable CPU INT1 which is connected to CPU-Timer 0:


    IER |= M_INT1;


    // Enable TINT0 in the PIE: Group 1 interrupt 7


    PieCtrlRegs.PIEIER1.bit.INTx7 = 1;


 


    // Enable global Interrupts and higher priority real-time debug events:


    EINT;   // Enable Global interrupt INTM


    ERTM;      // Enable Global realtime interrupt DBGM


 


// Step 6. IDLE loop. Just sit and loop forever (optional):   


    for(;;);


 


}    


 


// Step 7. Insert all local Interrupt Service Routines (ISRs) and functions here:   


    // If local ISRs are used, reassign vector addresses in vector table as


    // shown in Step 5


 


interrupt void cpu_timer0_isr(void)


{


    CpuTimer0.InterruptCount++;


    // Acknowledge this interrupt to recieve more interrupts from group 1


    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;   


}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
3
关闭 站长推荐上一条 /3 下一条