完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
您好,我在处理DSPIC33中断时遇到了一些麻烦。我写过一个代码,打算用这种方式通过PWM产生变频正弦波形:我产生了一个20KHz的恒定PWM频率(受我的IGBT模块的限制),一个32位定时器4/5中断,它指定读取一个正弦表,并将这些值发送到PWM调制解调器的PDC。乌勒当我改变Detime4/5基期时,我可以改变正弦频率。我把定时器4/5中断的优先级放在6级,高于所有其他中断的优先级,所以我认为没有什么可以干扰这个程序的速度。但是,当我在主程序中启用DelayyMs(1000)时,或者通过串行发送一些东西时,PWM的输出变得不稳定。不仅扩展了正弦宽度,而且使其完全变形。启用中断嵌套。有什么建议吗?此代码工作良好,而延迟和Primtf评论;CCS 5.025 DSPIC33 EP256MC202标准运行模式3V3 140MHz
|
|
相关推荐
15个回答
|
|
|
你对此有把握吗?当然是PIC32,但是在PIC24的文档中没有任何东西。我要做这个实验来找出答案。你试过了吗?或者你还有其他的消息来源吗?
|
|
|
|
|
|
奇怪…你有没有单独检查,如果它是一个问题,拖延或打印?
|
|
|
|
|
|
是的,我敢肯定。请参阅单独的FRM第7部分(中断)文档(我昨晚做了:))。问题在于:如果您不熟悉这些问题,很难理解。上面给出了两个图(一个用于条目,一个用于RETFIE)。我没有找到一种表示MI/MAX数值的表。
|
|
|
|
|
|
在DS7000 0600 D -第3章“中断处理定时”(OH)-我看到:FRM部分可以不同。还有一些功能块的变体。无论如何,在我的启动方案中,它是第7节。但是我们使用相同的文档,相同的修订。)图3-1显示了一个13个循环条目序列,该序列不是不可中断的。即使没有明确地写入(对此我不确定),它实际上也是不可中断的。原因很简单:当接受中断时,硬件状态机是连续的。滚动“整个事情”,以节省必须保存和加载的ISR开始地址。或多或少像一个单一的,多周期操作码。在一个操作中不能中断,同样适用于图3-2和3-3(13 RESP)。RETFIE循环是7次循环,包括RIFFIE处理本身。同样的,只是较少的周期。在下面的第3.x章中,有些文本在遇到某些“特殊事件/情况”时,会抱怨甚至更长的中断(又称“异常”)延迟。嵌套不需要在第3章中讨论——它已经被记录在别的地方:通过设置嵌套,除夕ry中断被分配给prio 7(与配置设置无关)-导致任何其他中断都不能中断。事情可以这样简单地实现:希望,这有助于
|
|
|
|
|
|
听起来不是很有说服力。在序列的开始,它等待当前操作完成,然后几乎没有Nops来均衡延迟,然后是获取向量地址。到目前为止,处理器状态没有变化,并且没有理由不能放弃该序列而选择更高优先级中断的新序列。在那之后,只有一个跳转,这与常规的“调用”指令没有什么不同。
|
|
|
|
|
|
没有必要打断它。放弃它就足够了。完成堆栈指针更改点的所有工作都可以安全地撤消。
|
|
|
|
|
|
在我使用7作为最高优先级之前,但我有同样的问题。我只是为了测试目的而更改的。我打开了.lst文件,但是找不到正在使用的DISI指令,所以我认为这不是问题;
|
|
|
|
|
|
你对此有把握吗?当然是PIC32,但是在PIC24的文档中没有任何东西。我要做这个实验来找出答案。你试过了吗?或者你还有其他的消息来源吗?对。使用延迟和PrTNF单独引起问题。由于我的项目是一个并网太阳能逆变器,将是灾难性的,甚至在产生正弦波的相位有点变化。
|
|
|
|
|
|
我用CCS编译器的“指令”解决了这个问题。我不喜欢它,因为我总是尽量避免使用这样的东西。我不知道这个指令是为了保证中断的高优先级。也许我错过了一些重要的记录。下面是代码:唯一的变化是第一行中的FASTWORD
|
|
|
|
|
|
我认为这是中断的最高优先级。也许,你以前设置优先级的方法不起作用。这个关键字也可以减少寄存器保存,但是在20kHz应该不会有问题,除非你运行PIC真的很慢。无论如何,使用在你背后做某事的工具不是一个好主意。
|
|
|
|
|
|
从CCS编译器手册中进一步说明:“编译器不保存/恢复密钥寄存器。这个中断会中断任何正在进行的正常中断。程序中只允许一个中断。”还有另一个CCS专用的:这有点神秘:在手册(CCS 2015).RTFM(=阅读友好手册)
|
|
|
|
|
|
是啊。我读了手册,但我想不出为什么仅仅配置IPC位是不可能的。无论如何,我重新编译的代码没有“.”,用“.”int计时器5,用Timer5中的“.”和另一个中断,然后查看.lst文件。The result is, respectively:______________________________________________________________________________________________________Seems like the compiler replaced a slice of the code by just two instructions: PUSH.S and POP.S. I'm not an expert in DSPIC assembly instructions and internal operation,所以我不知道它是否有任何区别。但是我会在所有中断指令中加上“FAST”,看看现在它是否遵循IPC位配置的优先级。;)
|
|
|
|
|
|
你有没有发现“只有一个允许在程序中”?
|
|
|
|
|
|
抱歉,否定……将所有ISR设置为快速将很可能导致PWM中断不再中断已经在进行中的另一个快速ISR。此外,关于“.”属性“在程序中只允许一个”的“警告”也适用。我不是绝对肯定,但是似乎push.s切换到另一个寄存器集(而pop.s将恢复上下文)。由于没有保存寄存器,当使用相同的阴影(Y)寄存器集时,ISR可能会或可能不会经历“数据冲突”。
|
|
|
|
|
|
因此,看起来“快”迫使编译器使用影子寄存器。S/POP.S存储寄存器W0到W3在阴影处。这可以通过几个中断来完成,只要它们都在同一优先级上。否则,由于只有一组影子寄存器,它会爆炸的。我们不知道这是否是“快”的唯一结果。(更重要的是,“快”代码在很多地方使用w4,但是它不保存它。同时,不使用保存的寄存器W1、W2和W3。除非编译器只保留W4来中断(我怀疑),这是编译器中的一个非常糟糕的错误。因此,我不建议使用“FAST”,尤其是在关键应用程序中。它破灭了W4,可能在其他地方不可预知地破坏浩劫。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475 浏览 0 评论
5794 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1124浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1098浏览 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-2 12:45 , Processed in 1.875002 second(s), Total 102, Slave 85 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
3336