本人使用ICD2调试30F3012,软件为MPLAB7.50,C30 V1.20<br />项目中添加的链接文件为p30f3012.gld,<br />#include "p30f3012.h"<br />unsigned int T1Buffer[16],T2Buffer[16];<br />unsigned int WPointer;<br />unsigned char over;<br />void testport(void);<br />void timer1_init(void);<br />nt main(void)<br />{ /* pc = 0x180 */<br /> <br /> /*<br /> unsigned int xdata[512];<br /> union xx{<br /> unsigned char v1[2];<br /> unsigned int v2;<br /> }utest;<br /> */<br /> unsigned int i,step;<br /> unsigned int y;<br /> /* variable init */<br /> WPointer = 0;<br /> <br /> over = 1;<br /><br /> for(i=0;i<16;i++)<br /> {<br /> T1Buffer = i;<br /> T2Buffer = i;<br /> }<br /> /* port init */<br /> testport();<br /><br /> /* timer init */<br /> timer1_init();<br /><br /> while(over);<br /><br /> while(1); <br />}<br /><br />void __attribute__((__interrupt__)) _T3Interrupt(void)<br />{<br /><br /> IFS0bits.T3IF = 0; <br /> T1Buffer[WPointer] = TMR1;<br /> T2Buffer[WPointer] = TMR2;<br /> WPointer++;<br /> T1CONbits.TON = 0;<br /> T2CONbits.TON = 0;<br /> TMR1 = 0; <br /> TMR2 = 0;<br /> if(WPointer&0x10){ <br /> <br /> IEC0bits.T3IE = 0;<br /> T1CONbits.TON = 0;<br /> over = 0;<br /> }<br /> else{<br /> T1CONbits.TON = 1; <br /> T2CONbits.TON = 1; <br /> }<br /> return;<br />}<br /><br /><br />void timer1_init(void)<br />{<br /> T1CON = 0x0002;<br /> TMR1 = 0x0000;<br /> PR1 = 0xffff;<br /> T2CON = 0x0002; <br /> TMR2 = 0x0000;<br /> PR2 = 0xffff;<br /> T3CON = 0x0000; <br /> TMR3 = 0x0000;<br /> PR3 = 0x2710;<br /> /* period = 1.25ms */<br /> IPC1bits.T3IP = 0x4;<br /> IPC1bits.T2IP = 0x0;<br /> IPC0bits.T1IP = 0x0;<br /> IEC0bits.T3IE = 1;<br /> T3CONbits.TON = 1; <br /> T1CONbits.TON = 1; <br /> T2CONbits.TON = 1; <br />}<br />调试发现T1Buffer and T1Buffer 均为restricted memory<br />中断中对 T1Buffer and T1Buffer操作无效<br />我在microchipmplab idedev的文件夹中dspic30f3012e.dev中的第39行有<br />UnusedRegs (0x800-0x13ff) <br />在dspic30f3012e.dev中没有发现0x800以上的限制阿<br />如果我用MPLAB SIM来仿真则没有任何问题<br />请教各位大虾,如何解决阿?????? |
|