当前位置:首页 > DSP学习心得笔记(更新1)
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 12 E 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++; }
编程中遇到的问题:
1、 line 257: warning: last line of file ends without a newline; 解决方法:
点击出现的问题条,看光标定位在哪里,然后一点点删除,直到把编程的文字删除,最后把删除的写出来,回车就行了,因为回车的格式要在编辑状态哈哈!
28016的定时器笔记
学过2812的人会知道,2812的定时器和28016的定时器的寄存器很不一样。但是从功能上将差不多。
关于28016定时器的时钟的讨论;
定时器的时钟是由SYSCLKOUT经过TBCTL中的CLKDIV和HSPCLKDIV进行配置;
和
主要说明,我们应该记得SYSCLKOUT和HSPCLK之间还可以分频,但是在这里这个寄存器不影响。
关于28016定时器的时钟同步的讨论;
如果我们想使每个PWM模块具有同步时钟,我们可以通过软件强制各个模块之间同步,设定步骤如下:
EPwm1Regs.TBCTL.bit.SYNCOSEL = 0 // Pass through EPwm2Regs.TBCTL.bit.SYNCOSEL = 0; // Pass through EPwm3Regs.TBCTL.bit.SYNCOSEL = 0; // Pass through EPwm1Regs.TBCTL.bit.SWFSYNC = 1; EPwm2Regs.TBCTL.bit.SWFSYNC = 1; EPwm3Regs.TBCTL.bit.SWFSYNC = 1;
以上程序是设定PWM1/2/3同步,我们由于我们只采用向上计数,所以不需要设定计数方
共分享92篇相关文档