完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
嗨,我有一个关于Dspic33F(马达控制)的工作,我的问题是我不能执行外部中断,而我的Dspic执行代码中的数学计算。我想削减数学计算,但我的外部中断不介入。Dspic first正在完成计算,然后我的中断正在介入。为什么会这样呢?请对我来说很重要
|
|
相关推荐
15个回答
|
|
|
必须中断此中断,禁用所有中断,IPL设置太高(例如ISR正在执行),执行DISI等。
|
|
|
|
|
|
好,我明白我应该,首先我禁用所有的中断使用DISI指令。其次我会给最大值的IPL位。我会给出2,ISR又如何呢?我理解的是真的吗?非常感谢。
|
|
|
|
|
|
我应该使用哪一个中断指令?
|
|
|
|
|
|
好,我明白我应该,首先我禁用所有的中断使用DISI指令。其次我会给最大值的IPL位。我会给出2,ISR又如何呢?我理解的是真的吗?非常感谢…对不起。我没有很清楚地表达自己。看起来你有一个或多个这样的东西。他们中的任何一个都有可能阻止中断的发生。当你在运行数学时,你需要确保没有一件事情能阻止你的中断。
|
|
|
|
|
|
好,我明白我应该,首先我禁用所有的中断使用DISI指令。其次我会给最大值的IPL位。我会给出2,ISR又如何呢?我理解的是真的吗?非常感谢…对不起。我没有很清楚地表达自己。看起来你有一个或多个这样的东西。他们中的任何一个都有可能阻止中断的发生。你需要确保这些东西都不能阻止你运行数学时的中断。好吧,我禁用所有的中断,并把IPL设置为高。之后,对于外部中断,我应该如何进行数学计算。
|
|
|
|
|
|
找到原因并删除它。如果中断被禁用,则使MIF IF太高,将其设置为低等。
|
|
|
|
|
|
现在我明白了。你帮了我不少忙。谢谢您。.
|
|
|
|
|
|
我面临的问题是相同的。我猜处理器是不动点,它需要花费上千个周期来执行sin cos数学运算。我们的处理器必须是浮点时间处理器来处理数学运算,同时使用循环中断。
|
|
|
|
|
|
谁告诉你的胡言乱语?
|
|
|
|
|
|
浮点数学通常是不可重入的。不能在主中断中使用。
|
|
|
|
|
|
…在中断服务中做这件事很少是个好主意。
|
|
|
|
|
|
我没有在中断子程序函数中执行数学函数。数学运算是在主程序中完成的。因为存在延迟。检查ADC转换中的三个SRF PLL用途的代码问题。这是我转换4个同步信号的代码。使用Time5中断。采样是成功的,在我所希望的10kHz频率,但在循环中,当我使用SIN COS公式,然后转换率被阻碍。解决方案包括“810ref.h”和“包括< xc.h>包括< xc.h>包括< libpic30.h>包括< stdio.h>包括< stdio.h>包括<端口.h>包括<数学>> int a,i,p,o void initAdcAdc1(void);浮ADCV值,r,r,y,y,b,θ浮vr[200],vy[],vb,vb,vr[200],vy[[],vb vb,vb,vb,vb;浮动theta6[],jj[200],gg[],vdd[];int main(){PLLFBD=46;//M=48CLKDIVbits.PLLPOST=0;//N2=2CLKDIVbits.PLLPRE=0;//N1=2//用PLL启动到主振荡器的时钟开关(NOSC=0b011)u builtin_write_OSCCONH(0x03);u builtin_write_OSCCONL(OSCCON|0x01);//等待时钟开关发生(OSCCONbits.COSC!(= 0B011);/ /等待PLL锁定(OSCCONbits.LOCK)!= 1);void __attribute__ ((__interrupt__,__no_auto_psv__))_PWM1Interrupt(void);void __attribute__((__interrupt__,__no_auto_psv__))_T5Interrupt(void);extern float ADCValue,r,y,b;int A,n,rr,yy,bb;float W,ma,alpha,beta,vd,theta,theta1,theta2,vdold,k3,k4,T,vq;vdold=0;theta2=0;theta=0,theta1=0;T=0.00001;n=937;//937=1khzi=0;A=n/2;ma=0.49;W=0.314;OSCCON=0x20C0;CLKDIV=0x0000;T5CON=0x8020;//8010 preset value(3=256 1=8 2=64)// IEC1= 0x1000;// IFS1=0xFFFF;//EFFF=set// IEC5=0x4000;//pwm// IFS5=0xFFFF;TMR5=0;PMD6=0x0000;PR5=93.75;//10khz=750//93.7a=1;p=1;PWMCON1=PWMCON3=PWMCON5=0x0605;PWMCON2=PWMCON4=PWMCON6=0x0605;IOCON1=IOCON3=IOCON5=0xC000;IOCON2=IOCON4=IOCON6=0xC002;//swaping pinALTDTR1=ALTDTR2=ALTDTR3=ALTDTR4=ALTDTR5=ALTDTR6=10 ;//5 microsecPTCON2=0x0006;//64=1khz,4=4kPHASE1=PHASE2=PHASE3=PHASE4=PHASE5=PHASE6=n;TRISE=0x0000;TRISC=0x0000;PTCON=0x8400;ADCValue=0;initAdc1();while(1){while(a){a=0;AD1CON1比特.SAMP=0;AD1CON1比特.DONE=0;ADCValue=ADC1BUF0;DONE=0;ADCV值=ADC1BUF0;//读AN5转换结果或an6r=ADC1BUF1;//读取AN5转换结果或AN1转换结果或an4b=ADC1BUF3 AN1转换结果或an4b=AD1b=ADC1BUF3;//读AN2转换或an5vr=rvr=r=r;vy=y=y=y;vy=y=y=y;vy=y=y=y=y;vb;α=0.66*r-0.66r-0-0.333*r-0.333*0.333*0.333*0是;ta=0.577*y-0.577*b;jj=alpha;//alpha=0.66*vr-0.333*vy-0.333*vb;// beta=0.577*vy-0.577*vb;vd=alpha*cos(theta)+beta*sin(theta);////these calculaton hampered my convertionvq=alpha*sin(theta)-beta*cos(theta);//vdd=vd;k3=317.25*T*T+1.43*T;k4=1.43*T;theta=-theta2+2*theta1+(k3*vd)-(k4*vdold);if(theta>=6.28 || theta<=0){theta=0;}vdold=vd;theta2=theta1;theta1=theta;// gg=beta;//theta6=theta;i++;if(i==200){i=0;}IFS1=0xEFFF;//setIEC1= 0x1000;}while(p){p=0;// PDC1=r;rr=A+A*0.5*sin(theta*o);PDC1=rr;o++;if(o==20){o=0;}IFS5=0xBFFF;IEC5=0x4000;}}}void initAdc1(void){ANSELB = 0xFFFF;//port is selected aS a aLogTrISB= 0xFFFF;AD1CON1= 0x00 8C;// 8=Time5AD1CON2= 0x0300;//(0300)3为1 2 3通道。每个周期后产生多信道(00=DMA访问位ADC中断)AD1CON3=0x1F00;//自动采样时间位F=TAD 16.tcy 15*TADAD1CON4=0x0000;//允许128个缓冲字到每个日志输入AD1CSSH=0x0000;AD1CSSL=0x0000;AD1CHS0bits.CH0SA=6;//为CH0+ve输入AD1CHS0bits选择AN6。NA=0; ///选择Vref-for CH0-ve输入端选择Vref-用于CH0输入AD1CHS123位.CH123SA=1;////为CH1+CH1+ve输入端选择AN0(123SA=1,然后是3,an4,an5)///////为CH2+CH2+ve输入端选择AN1,然后是3,an3,an4,an4,an5)////////选择AN1 CH2+CH2+ve输入端选择AN1,CH2+ve输入端选择AN1/选择AN1,CH2+CH2+输入端选择AN1/选择AN1,CH3+输入端选择AN1,CH2/选择AN1,ADON 1=1;ADON=1;ADON 1;AD1CON1bit.ADO1}无效_u属性_u(u中断_u中断_(u中断_u自动_psv_uu_auto_自动_psv_uu_____________u________auto_u_自动_uu))PWM1中断_PWM1中断(无效){外部int a{IFS1 IFS1,IFS1 IFS1=IFS5_IFS5_IFS5=IFS5=0XS5=0XFFFF;IES5=0XS5=0XFFFF;IES5=0XFFFF;IEC5 xFFFF;//EFFF=setIEC1=0x0000;a=1;.;}
|
|
|
|
|
|
正确的新线程:http://www. McCys.com /论坛/ M949 842. ASPX第949842页(请使用代码标签…)
|
|
|
|
|
|
这是一些人的暗示。就像在中断中打印。Sine,你没有发布你的代码,谁会知道你做了什么。
|
|
|
|
|
|
您好,您可以在这里查看代码示例,并通过文档标题搜索,如“dsPIC33”:http://www..hip.com/doclisting/TechDoc.aspx?如果搜索“dsPIC33”的结果是关于dsPIC33EP处理器的,但它们是相似的。您也可以查看这个dsPIC33系列中断手册:http://www1.micro..com/...eviceDoc/70000600d.pdf。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473 浏览 0 评论
5793 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1122浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1095浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
873浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 23:57 , Processed in 1.229897 second(s), Total 100, Slave 83 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2719