F2812CMD.txt
资源名称:2812CMD.rar [点击查看]
上传用户:heyong2055
上传日期:2014-10-20
资源大小:131k
文件大小:11k
源码类别:
DSP编程
开发平台:
C/C++
- 关于F2812中用C语言来实现中断的说明:
- 1.首先在.cmd中定位系统中断表:
- MEMORY
- {
- PAGE 0 :
- ......................................
- PAGE 1 :
- ......................................
- PIE_VECT : origin = 0x000D00, length = 0x000100
- ......................................
- }
- SECTIONS
- {
- ...................................
- PieVectTable : > PIE_VECT, PAGE = 1
- .....................................
- }
- 2.在C中制定该中断的结构体:
- #pragma DATA_SECTION(PieVectTable,"PieVectTable");
- struct PIE_VECT_TABLE PieVectTable;(在DSP28_GlobalVariableDefs.C中初始化)
- 3.用一组常数(按照中断向量的顺序)初始化该名字为PIE_VECT_TABLE的表:
- typedef interrupt void(*PINT)(void);这里有些一问,一下应该为函数名??
- // Define Vector Table:
- struct PIE_VECT_TABLE {
- // Reset is never fetched from this table.
- // It will always be fetched from 0x3FFFC0 in either
- // boot ROM or XINTF Zone 7 depending on the state of
- // the XMP/MC input signal. On the F2810 it is always
- // fetched from boot ROM.
- PINT PIE1_RESERVED;
- PINT PIE2_RESERVED;
- PINT PIE3_RESERVED;
- PINT PIE4_RESERVED;
- PINT PIE5_RESERVED;
- PINT PIE6_RESERVED;
- PINT PIE7_RESERVED;
- PINT PIE8_RESERVED;
- PINT PIE9_RESERVED;
- PINT PIE10_RESERVED;
- PINT PIE11_RESERVED;
- PINT PIE12_RESERVED;
- PINT PIE13_RESERVED;
- // Non-Peripheral Interrupts:
- PINT XINT13; // XINT13
- PINT TINT2; // CPU-Timer2
- PINT DATALOG; // Datalogging interrupt
- PINT RTOSINT; // RTOS interrupt
- PINT EMUINT; // Emulation interrupt
- PINT XNMI; // Non-maskable interrupt
- PINT ILLEGAL; // Illegal operation TRAP
- PINT USER0; // User Defined trap 0
- PINT USER1; // User Defined trap 1
- PINT USER2; // User Defined trap 2
- PINT USER3; // User Defined trap 3
- PINT USER4; // User Defined trap 4
- PINT USER5; // User Defined trap 5
- PINT USER6; // User Defined trap 6
- PINT USER7; // User Defined trap 7
- PINT USER8; // User Defined trap 8
- PINT USER9; // User Defined trap 9
- PINT USER10; // User Defined trap 10
- PINT USER11; // User Defined trap 11
- // Group 1 PIE Peripheral Vectors:
- PINT PDPINTA; // EV-A
- PINT PDPINTB; // EV-B
- PINT rsvd1_3;
- PINT XINT1;
- PINT XINT2;
- PINT ADCINT; // ADC
- PINT TINT0; // Timer 0
- PINT WAKEINT; // WD
- // Group 2 PIE Peripheral Vectors:
- PINT CMP1INT; // EV-A
- PINT CMP2INT; // EV-A
- PINT CMP3INT; // EV-A
- PINT T1PINT; // EV-A
- PINT T1CINT; // EV-A
- PINT T1UFINT; // EV-A
- PINT T1OFINT; // EV-A
- PINT rsvd2_8;
- // Group 3 PIE Peripheral Vectors:
- PINT T2PINT; // EV-A
- PINT T2CINT; // EV-A
- PINT T2UFINT; // EV-A
- PINT T2OFINT; // EV-A
- PINT CAPINT1; // EV-A
- PINT CAPINT2; // EV-A
- PINT CAPINT3; // EV-A
- PINT rsvd3_8;
- // Group 4 PIE Peripheral Vectors:
- PINT CMP4INT; // EV-B
- PINT CMP5INT; // EV-B
- PINT CMP6INT; // EV-B
- PINT T3PINT; // EV-B
- PINT T3CINT; // EV-B
- PINT T3UFINT; // EV-B
- PINT T3OFINT; // EV-B
- PINT rsvd4_8;
- // Group 5 PIE Peripheral Vectors:
- PINT T4PINT; // EV-B
- PINT T4CINT; // EV-B
- PINT T4UFINT; // EV-B
- PINT T4OFINT; // EV-B
- PINT CAPINT4; // EV-B
- PINT CAPINT5; // EV-B
- PINT CAPINT6; // EV-B
- PINT rsvd5_8;
- // Group 6 PIE Peripheral Vectors:
- PINT SPIRXINTA; // SPI-A
- PINT SPITXINTA; // SPI-A
- PINT rsvd6_3;
- PINT rsvd6_4;
- PINT MRINTA; // McBSP-A
- PINT MXINTA; // McBSP-A
- PINT rsvd6_7;
- PINT rsvd6_8;
- // Group 7 PIE Peripheral Vectors:
- PINT rsvd7_1;
- PINT rsvd7_2;
- PINT rsvd7_3;
- PINT rsvd7_4;
- PINT rsvd7_5;
- PINT rsvd7_6;
- PINT rsvd7_7;
- PINT rsvd7_8;
- // Group 8 PIE Peripheral Vectors:
- PINT rsvd8_1;
- PINT rsvd8_2;
- PINT rsvd8_3;
- PINT rsvd8_4;
- PINT rsvd8_5;
- PINT rsvd8_6;
- PINT rsvd8_7;
- PINT rsvd8_8;
- // Group 9 PIE Peripheral Vectors:
- PINT RXAINT; // SCI-A
- PINT TXAINT; // SCI-A
- PINT RXBINT; // SCI-B
- PINT TXBINT; // SCI-B
- PINT ECAN0INTA; // eCAN
- PINT ECAN1INTA; // eCAN
- PINT rsvd9_7;
- PINT rsvd9_8;
- // Group 10 PIE Peripheral Vectors:
- PINT rsvd10_1;
- PINT rsvd10_2;
- PINT rsvd10_3;
- PINT rsvd10_4;
- PINT rsvd10_5;
- PINT rsvd10_6;
- PINT rsvd10_7;
- PINT rsvd10_8;
- // Group 11 PIE Peripheral Vectors:
- PINT rsvd11_1;
- PINT rsvd11_2;
- PINT rsvd11_3;
- PINT rsvd11_4;
- PINT rsvd11_5;
- PINT rsvd11_6;
- PINT rsvd11_7;
- PINT rsvd11_8;
- // Group 12 PIE Peripheral Vectors:
- PINT rsvd12_1;
- PINT rsvd12_2;
- PINT rsvd12_3;
- PINT rsvd12_4;
- PINT rsvd12_5;
- PINT rsvd12_6;
- PINT rsvd12_7;
- PINT rsvd12_8;
- };
- 然后在使我们在.cmd文件中定义的表有以上属性:
- extern struct PIE_VECT_TABLE PieVectTable;(在.h文件中)
- 4.初始化该表(在.c文件中)使之能够为主程序所使用:
- const struct PIE_VECT_TABLE PieVectTableInit = {
- PIE_RESERVED, // Reserved space
- PIE_RESERVED,
- PIE_RESERVED,
- PIE_RESERVED,
- PIE_RESERVED,
- PIE_RESERVED,
- PIE_RESERVED,
- PIE_RESERVED,
- PIE_RESERVED,
- PIE_RESERVED,
- PIE_RESERVED,
- PIE_RESERVED,
- PIE_RESERVED,
- // Non-Peripheral Interrupts
- INT13_ISR, // XINT13 or CPU-Timer 1
- INT14_ISR, // CPU-Timer2
- DATALOG_ISR, // Datalogging interrupt
- RTOSINT_ISR, // RTOS interrupt
- EMUINT_ISR, // Emulation interrupt
- NMI_ISR, // Non-maskable interrupt
- ILLEGAL_ISR, // Illegal operation TRAP
- USER0_ISR, // User Defined trap 0
- USER1_ISR, // User Defined trap 1
- USER2_ISR, // User Defined trap 2
- USER3_ISR, // User Defined trap 3
- USER4_ISR, // User Defined trap 4
- USER5_ISR, // User Defined trap 5
- USER6_ISR, // User Defined trap 6
- USER7_ISR, // User Defined trap 7
- USER8_ISR, // User Defined trap 8
- USER9_ISR, // User Defined trap 9
- USER10_ISR, // User Defined trap 10
- USER11_ISR, // User Defined trap 11
- // Group 1 PIE Vectors
- PDPINTA_ISR, // EV-A
- PDPINTB_ISR, // EV-B
- rsvd_ISR,
- XINT1_ISR,
- XINT2_ISR,
- ADCINT_ISR, // ADC
- TINT0_ISR, // Timer 0
- WAKEINT_ISR, // WD
- // Group 2 PIE Vectors
- CMP1INT_ISR, // EV-A
- CMP2INT_ISR, // EV-A
- CMP3INT_ISR, // EV-A
- T1PINT_ISR, // EV-A
- T1CINT_ISR, // EV-A
- T1UFINT_ISR, // EV-A
- T1OFINT_ISR, // EV-A
- rsvd_ISR,
- // Group 3 PIE Vectors
- T2PINT_ISR, // EV-A
- T2CINT_ISR, // EV-A
- T2UFINT_ISR, // EV-A
- T2OFINT_ISR, // EV-A
- CAPINT1_ISR, // EV-A
- CAPINT2_ISR, // EV-A
- CAPINT3_ISR, // EV-A
- rsvd_ISR,
- // Group 4 PIE Vectors
- CMP4INT_ISR, // EV-B
- CMP5INT_ISR, // EV-B
- CMP6INT_ISR, // EV-B
- T3PINT_ISR, // EV-B
- T3CINT_ISR, // EV-B
- T3UFINT_ISR, // EV-B
- T3OFINT_ISR, // EV-B
- rsvd_ISR,
- // Group 5 PIE Vectors
- T4PINT_ISR, // EV-B
- T4CINT_ISR, // EV-B
- T4UFINT_ISR, // EV-B
- T4OFINT_ISR, // EV-B
- CAPINT4_ISR, // EV-B
- CAPINT5_ISR, // EV-B
- CAPINT6_ISR, // EV-B
- rsvd_ISR,
- // Group 6 PIE Vectors
- SPIRXINTA_ISR, // SPI-A
- SPITXINTA_ISR, // SPI-A
- rsvd_ISR,
- rsvd_ISR,
- MRINTA_ISR, // McBSP-A
- MXINTA_ISR, // McBSP-A
- rsvd_ISR,
- rsvd_ISR,
- // Group 7 PIE Vectors
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- // Group 8 PIE Vectors
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- // Group 9 PIE Vectors
- SCIRXINTA_ISR, // SCI-A
- SCITXINTA_ISR, // SCI-A
- SCIRXINTB_ISR, // SCI-B
- SCITXINTB_ISR, // SCI-B
- ECAN0INTA_ISR, // eCAN
- ECAN1INTA_ISR, // eCAN
- rsvd_ISR,
- rsvd_ISR,
- // Group 10 PIE Vectors
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- // Group 11 PIE Vectors
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- // Group 12 PIE Vectors
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- rsvd_ISR,
- };
- //---------------------------------------------------------------------------
- // InitPieVectTable:
- //---------------------------------------------------------------------------
- // This function initializes the PIE vector table to a known state.
- // This function must be executed after boot time.
- //
- void InitPieVectTable(void)
- {
- int16 i;
- Uint32 *Source = (void *) &PieVectTableInit;
- Uint32 *Dest = (void *) &PieVectTable;
- EALLOW;
- for(i=0; i < 128; i++)
- *Dest++ = *Source++;
- EDIS;
- // Enable the PIE Vector Table
- PieCtrl.PIECRTL.bit.ENPIE = 1;
- }
- 5.中断服务程序:
- 让以上的数值指向你所要的服务程序,例如:
- PieVectTable.TINT2 = &ISRTimer2;
- 那么,ISRTimer2也就成了中断服务程序,
- ×××切记:一定要在主程序的开始先声明该程序:
- interrupt void ISRTimer2(void);
- .............
- .............
- 然后按照您的需要编制该程序:
- interrupt void ISRTimer2(void)
- {
- CpuTimer2.InterruptCount++;
- }