搜索
bottom↓
回复: 10

28335简单的PWM程序,为什么端口没有输出?

[复制链接]

出0入0汤圆

发表于 2016-1-6 14:41:00 | 显示全部楼层 |阅读模式

  1. /*
  2. * main.c
  3. *
  4. *  Created on: 2015年1月5日
  5. *      Author: DSP28335
  6. */
  7. #include "main.h"

  8. void EPwmSetup();

  9. int main(void)
  10. {
  11.         InitSysCtrl();
  12.        
  13.         EPwmSetup();
  14.        
  15.         DINT;
  16.         InitPieCtrl();
  17.         IER = 0x00;
  18.         IFR = 0x00;
  19.         InitPieVectTable();
  20.         InitCpuTimers();   // For this example, only initialize the Cpu Timers
  21.        
  22.         ConfigCpuTimer(&CpuTimer0, 150, 500000);

  23.    while(1)
  24.    {
  25.         ;
  26.    }
  27. }

  28. #define PWM_CLK   10e3                // If diff freq. desired, change freq here.
  29. #define SP        CPU_CLK/(2*PWM_CLK)
  30. #define TBCTLVAL  0x200E              // Up-down cnt, timebase = SYSCLKOUT
  31. #define CPU_CLK   150e6

  32. void EPwmSetup()
  33. {
  34.     InitEPwm1Gpio();

  35.         EALLOW;

  36.         EPwm1Regs.TBSTS.all=0;
  37.         EPwm1Regs.TBPHS.half.TBPHS=0;
  38.         EPwm1Regs.TBCTR=0;

  39.         EPwm1Regs.CMPCTL.all=0x50;        // Immediate mode for CMPA and CMPB
  40.         EPwm1Regs.CMPA.half.CMPA =SP/2;
  41.         EPwm1Regs.CMPB=0;

  42.         EPwm1Regs.AQCTLA.all=0x60;        // EPWMxA = 1 when CTR=CMPA and counter inc
  43.                                           // EPWMxA = 0 when CTR=CMPA and counter dec
  44.         EPwm1Regs.AQCTLB.all=0;
  45.         EPwm1Regs.AQSFRC.all=0;
  46.         EPwm1Regs.AQCSFRC.all=0;

  47.         EPwm1Regs.DBCTL.all=0xb;          // EPWMxB is inverted
  48.         EPwm1Regs.DBRED=0;
  49.         EPwm1Regs.DBFED=0;

  50.         EPwm1Regs.TZSEL.all=0;
  51.         EPwm1Regs.TZCTL.all=0;
  52.         EPwm1Regs.TZEINT.all=0;
  53.         EPwm1Regs.TZFLG.all=0;
  54.         EPwm1Regs.TZCLR.all=0;
  55.         EPwm1Regs.TZFRC.all=0;

  56.         EPwm1Regs.ETSEL.all=0;            // Interrupt when TBCTR = 0x0000
  57.         EPwm1Regs.ETFLG.all=0;
  58.         EPwm1Regs.ETCLR.all=0;
  59.         EPwm1Regs.ETFRC.all=0;

  60.         EPwm1Regs.PCCTL.all=0;

  61.         EPwm1Regs.TBCTL.all=0x0010+TBCTLVAL;                        // Enable Timer
  62.         EPwm1Regs.TBPRD=SP;
  63.         EDIS;
  64. }
复制代码

我测量GPIO0和GPIO1都没有任何输出,都是低电平。板子是28335的最小系统。

出0入0汤圆

发表于 2016-1-7 22:19:34 | 显示全部楼层
首先你要看一下时钟是否打开,其他的貌似配置没啥问题吧

出0入0汤圆

发表于 2016-1-9 00:03:51 | 显示全部楼层
首先检测PWM的时钟是否打开,GPIO设置是否正确,然后就是PWM寄存器的配置是否正确,这些没有问题那可定会输出,你可以先看看官方给的例程

出0入0汤圆

 楼主| 发表于 2016-1-9 09:09:50 | 显示全部楼层
596142041 发表于 2016-1-7 22:19
首先你要看一下时钟是否打开,其他的貌似配置没啥问题吧

我用的是ccs6编译的,我直接拿别人列程的out文件拷进去又可以生成pwm。自己拿来编译就不行。

出0入0汤圆

 楼主| 发表于 2016-1-9 09:11:35 | 显示全部楼层
lidar 发表于 2016-1-9 00:03
首先检测PWM的时钟是否打开,GPIO设置是否正确,然后就是PWM寄存器的配置是否正确,这些没有问题那可定会输 ...

谢谢你的回复。官方都是过了,编译出来拷进去就是不行。在里面自己添加其他引脚的输出又有输出哦。是不是ccs6编译有问题呢

出0入0汤圆

发表于 2016-1-9 12:46:41 | 显示全部楼层
和CCS6编译有关系的可能性很小,我一直都在用CCS6没见过有什么问题

出0入0汤圆

 楼主| 发表于 2016-1-9 13:49:22 | 显示全部楼层
lidar 发表于 2016-1-9 12:46
和CCS6编译有关系的可能性很小,我一直都在用CCS6没见过有什么问题

其他没问题,就是pwm这块,我试了两天了。找过很多列程。都是编译出来下载进去没输出。

出330入0汤圆

发表于 2016-1-9 13:59:02 来自手机 | 显示全部楼层
硬件问题

出0入0汤圆

 楼主| 发表于 2016-1-9 14:00:20 | 显示全部楼层

直接烤网上的列程out文件又可以直接产生pwm啊。自己编译就不行

出0入0汤圆

发表于 2016-1-19 14:44:06 | 显示全部楼层
huangguimina4 发表于 2016-1-9 14:00
直接烤网上的列程out文件又可以直接产生pwm啊。自己编译就不行

没看到你设置GPIO的程序。

有没有下面这段程序?

  1. void InitEPwm1Gpio(void)
  2. {
  3.    EALLOW;
  4.    
  5. /* Enable internal pull-up for the selected pins */
  6. // Pull-ups can be enabled or disabled by the user.
  7. // This will enable the pullups for the specified pins.
  8. // Comment out other unwanted lines.

  9.     GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0;    // Enable pull-up on GPIO0 (EPWM1A)
  10.     GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0;    // Enable pull-up on GPIO1 (EPWM1B)   
  11.    
  12. /* Configure ePWM-1 pins using GPIO regs*/
  13. // This specifies which of the possible GPIO pins will be ePWM1 functional pins.
  14. // Comment out other unwanted lines.

  15.     GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;   // Configure GPIO0 as EPWM1A
  16.     GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1;   // Configure GPIO1 as EPWM1B
  17.    
  18.     EDIS;
  19. }
复制代码

出0入0汤圆

 楼主| 发表于 2016-1-19 22:03:44 | 显示全部楼层
siyeb 发表于 2016-1-19 14:44
没看到你设置GPIO的程序。

有没有下面这段程序?

有啊,pwm初始化函数的第一行
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-18 14:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表