[PIC®/AVR®/dsPIC®产品] PIC33FJ系列,PWM输出,关于时基中断如何使用的问题

[复制链接]
1133|9
 楼主| galjewf 发表于 2020-7-29 15:01 | 显示全部楼层 |阅读模式
本帖最后由 galjewf 于 2020-7-29 15:43 编辑

最基本的PWM输出已经完成了,看到手册上写着可以根据PWM脉冲产生中断事件于是想尝试写个例程,但是找了一会也没找到这个中断入口函数名呀。
1.难道这个中断功能,使用方法和外部中断这种不一样吗,请各位指教?2.我想在中断发生后,停止这一通道的PWM波发生,有什么方法吗?
芯片是PIC33FJ64MC506


 楼主| galjewf 发表于 2020-7-29 17:51 | 显示全部楼层
或者告诉在下,怎么控制PWM输出固定数量的脉冲数。主要是用来控制带驱动芯片的两相步进电机
ynwa 发表于 2020-7-30 09:43 | 显示全部楼层
数据手册TABLE 7-1: INTERRUPT VECTORS里有,PWM – PWM Period Match中断

评论

@ynwa :没有呀,这个芯片的gld里面一个PWM相关的文本都没有。。  发表于 2020-8-3 14:14
@galjewf :中断函数名就是PWMInterrupt,你看GLD文件的话,里面也有。  发表于 2020-7-31 13:22
这个向量表找到了,但是具体函数名在下不会编写,以前在下写中断都是打开器件.gld文件找的函数名,但是没搜到PWM相关的中断入口函数。能否再指教一下?  发表于 2020-7-30 10:07
CoolSilicon 发表于 2020-7-31 14:49 | 显示全部楼层
MCC好像支持这个系列, 自动生成中断的,就不用自己去找了...
 楼主| galjewf 发表于 2020-8-3 14:46 | 显示全部楼层

手册这里的时基中断具体配置方法或者例程能不能讲一下,求求了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
ynwa 发表于 2020-8-4 09:56 | 显示全部楼层
galjewf 发表于 2020-8-3 14:46
手册这里的时基中断具体配置方法或者例程能不能讲一下,求求了

中断要配置什么?你选择使能或禁止就可以了。
你贴图的这一页,写的很清楚,每种工作模式下中断产生方式。也就是说中断产生的方式取决于工作模式!因此,你要配置的是工作模式。
工作模式通过PTMOD选择,至于选哪种工作模式,应该问用的人自己。
 楼主| galjewf 发表于 2020-8-4 14:30 | 显示全部楼层
ynwa 发表于 2020-8-4 09:56
中断要配置什么?你选择使能或禁止就可以了。
你贴图的这一页,写的很清楚,每种工作模式下中断产生方式 ...

你好,在上面你说的中断函数名是PWMInterrupt,但是本人找对应的gld文件搜索连PWM这个字眼都没有。
还有一个就是查找手册中断这一章时,本人只看到PWM错误事件和故障事件。
在代码中定义PWMInterrupt也没报错,但是也没有进入PWMInterrupt函数。下面是在下写的代码。
  1. void pwm1_init()//RE0,RE1
  2. {
  3.         PTPER=3125-1;//控制周期,越大频率也越小,14位寄存器,最大取值=2^14=16384

  4.         PTCONbits.PTEN = 1;                        //PWM time base is on
  5.         PTCONbits.PTMOD = 0b01;                // operates in a Free-Running mode
  6.         PTCONbits.PTCKPS = 0b11;        // PWM time base input clock period is TCY (1:64 prescale)
  7.         PWMCON1bits.PMOD1 = 1;                //PWM I/O pin pair is in the Independent PWM Output mod
  8.        
  9.         PWMCON1bits.PEN1H = 1;                //PWMxH pin is enabled for PWM output
  10.         PWMCON1bits.PEN1L = 1;                //PWMxL pin is enabled for PWM output
  11.        
  12.         PWMCON2bits.SEVOPS = 0;                //PWM Special Event Trigger Output Postscale
  13.         PWMCON2bits.IUE = 1;                // Updates to the active PDC registers are immediate
  14.        
  15.         PDC1 = PTPER;                        //控制占空比,范围是(0~2)*PTPER
  16. }
  17. void pwmINT_init()
  18. {
  19.         IPC14bits.PWMIP = 0b001;
  20.         IEC3bits.PWMIE        = 0b1;
  21.         IFS3bits.PWMIF        = 0b0;
  22.        
  23. }
  24. void __attribute__((interrupt, no_auto_psv)) _PWMInterrupt()
  25. {
  26.         if(IFS3bits.PWMIF == 1)
  27.         {
  28.                 PTCONbits.PTEN = 1;
  29.                 IFS3bits.PWMIF = 0;
  30.         }       

  31. }       
  32. int main()
  33. {
  34.        pwmINT_init();
  35.         pwm1_init();
  36.     while(1);
  37. }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

41

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部