7691|20

5304

帖子

454

TA的资源

五彩晶圆(高级)

楼主
 

EKK-LM4F232例程一 PWM外设 [复制链接]

 PWM相关函数原型

 

void ROM_PWMDeadBandDisable (unsigned long ulBase, unsigned long ulGen)

禁止PWM死区输出

void ROM_PWMDeadBandEnable (unsigned long ulBase, unsigned long ulGen, unsigned short usRise, unsigned short usFall)

使能PWM死区输出,设置死区延时
void ROM_PWMFaultIntClear (unsigned long ulBase)

清除一个PWM模块的故障中断
void ROM_PWMFaultIntClearExt (unsigned long ulBase, unsigned long ulFaultInts)

清除一个PWM模块的故障中断
void ROM_PWMGenConfigure (unsigned long ulBase, unsigned long ulGen, unsigned long ulConfig)

配置一个PWM发生器
void ROM_PWMGenDisable (unsigned long ulBase, unsigned long ulGen)

禁止一个PWM发生器模块的定时器/计数器
void ROM_PWMGenEnable (unsigned long ulBase, unsigned long ulGen)

使能一个PWM发生器模块的定时器/计数器
void ROM_PWMGenFaultClear (unsigned long ulBase, unsigned long ulGen, unsigned long ulGroup, unsigned long ulFaultTriggers)

清除给定的PWM发生器的一个或多个锁存故障触发
void ROM_PWMGenFaultConfigure (unsigned long ulBase, unsigned long ulGen, unsigned long ulMinFaultPeriod, unsigned long ulFaultSenses)

配置给定的PWM发生器的最小故障周期和故障管脚检测
unsigned long ROM_PWMGenFaultStatus (unsigned long ulBase, unsigned long ulGen, unsignedlong ulGroup)

返回到给定的PWM发生器的故障触发的当前状态
unsigned long ROM_PWMGenFaultTriggerGet (unsigned long ulBase, unsigned long ulGen,unsigned long ulGroup)

返回到给定的PWM发生器当前所配置的故障触发设置
void ROM_PWMGenFaultTriggerSet (unsigned long ulBase, unsigned long ulGen, unsigned long ulGroup, unsigned long ulFaultTriggers)

配置给定的PWM发生器的故障触发设置。
void ROM_PWMGenIntClear (unsigned long ulBase, unsigned long ulGen, unsigned long ulInts)

清除特定的PWM发生器模块的特定中断。

 

最新回复

还是很感谢  详情 回复 发表于 2011-12-9 16:55
 
点赞 关注

回复
举报

5304

帖子

454

TA的资源

五彩晶圆(高级)

沙发
 

 

unsigned long ROM_PWMGenIntStatus (unsigned long ulBase, unsigned long ulGen,tBoolean bMasked)

获取指定PWM发生器模块的中断状态
void ROM_PWMGenIntTrigDisable (unsigned long ulBase, unsigned long ulGen, unsigned long ulIntTrig)

禁止指定PWM发生器模块的中断
void ROM_PWMGenIntTrigEnable (unsigned long ulBase, unsigned long ulGen, unsigned long ulIntTrig)

使能指定PWM发生器模块的中断和触发
unsigned long ROM_PWMGenPeriodGet (unsigned long ulBase, unsigned long ulGen)

获取一个PWM发生器模块的周期。
void ROM_PWMGenPeriodSet (unsigned long ulBase, unsigned long ulGen, unsigned long ulPeriod)

设置一个PWM发生器的周期
void ROM_PWMIntDisable (unsigned long ulBase, unsigned long ulGenFault)

禁止一个PWM模块的发生器中断和故障中断。
void ROM_PWMIntEnable (unsigned long ulBase, unsigned long ulGenFault)

使能一个PWM模块的发生器中断和故障中断
unsigned long ROM_PWMIntStatus (unsigned long ulBase, tBoolean bMasked)

获取一个PWM模块的中断状态
void ROM_PWMOutputFault (unsigned long ulBase, unsigned long ulPWMOutBits, tBoolean bFaultSuppress)

指定响应一个故障条件的PWM输出的状态。
void ROM_PWMOutputFaultLevel (unsigned long ulBase, unsigned long ulPWMOutBits, tBoolean bDriveHigh)

指定被抑制的PWM输出电平(level),以响应一个故障条件
void ROM_PWMOutputInvert (unsigned long ulBase, unsigned long ulPWMOutBits, tBoolean bInvert)

选择PWM输出的翻转方式。
void ROM_PWMOutputState (unsigned long ulBase, unsigned long ulPWMOutBits, tBoolean bEnable)

使能或禁止PWM输出
unsigned long ROM_PWMPulseWidthGet (unsigned long ulBase, unsigned long ulPWMOut)

获取一个PWM输出的脉宽
void ROM_PWMPulseWidthSet (unsigned long ulBase, unsigned long ulPWMOut, unsigned long ulWidth)

设置指定PWM输出的脉宽
void ROM_PWMSyncTimeBase (unsigned long ulBase, unsigned long ulGenBits)

使一个或多个PWM发生器模块的计数器同步
void ROM_PWMSyncUpdate (unsigned long ulBase, unsigned long ulGenBits)

同步所有挂起的更新

 

 
 

回复

5304

帖子

454

TA的资源

五彩晶圆(高级)

板凳
 
要求:  实验对运动控制模块0的PWM输出8路PWM, 不同的占空比信号
说明:程序直接在sine_demo里修改

在原来添加以下头文件
#include "inc/hw_memmap.h"
#include "driverlib/gpio.h"
#include "driverlib/pwm.h"         
#include "driverlib/rom.h"
#include "driverlib/pin_map.h"
 
 
 

回复

5304

帖子

454

TA的资源

五彩晶圆(高级)

4
 

在FPUEnable(); FPULazyStackingEnable(); 后添加实验代码

 

//设置系统时钟
 ROM_SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_XTAL_16MHZ |
                        SYSCTL_OSC_MAIN);
 //读系统时钟
 SysClock=ROM_SysCtlClockGet();

 //设置PWM时钟:不分频
 ROM_SysCtlPWMClockSet(SYSCTL_PWMDIV_1);

 //读PWM时钟
 Clock1=ROM_SysCtlPWMClockGet();

 //*************PWM输出实验******************************************
 //配置PWM所在的管脚外设
 ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH);
 
 //使能PWM模块:SYSCTL_PERIPH_PWM0 or SYSCTL_PERIPH_PWM1
 ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0);

 //设置指定的管脚配置
 ROM_GPIOPadConfigSet( GPIO_PORTH_BASE,
       GPIO_PIN_0|GPIO_PIN_1|
       GPIO_PIN_2|GPIO_PIN_3|
       GPIO_PIN_4|GPIO_PIN_5|
       GPIO_PIN_6|GPIO_PIN_7,
       GPIO_STRENGTH_4MA,
       GPIO_PIN_TYPE_STD); 
          
  //配置GPIO为PWM功能:
  ROM_GPIOPinTypePWM( GPIO_PORTH_BASE,
       GPIO_PIN_0|GPIO_PIN_1|
       GPIO_PIN_2|GPIO_PIN_3|
       GPIO_PIN_4|GPIO_PIN_5|
       GPIO_PIN_6|GPIO_PIN_7
       );
  
  //配置一个GPIO引脚的备用功能 要包含 driverlib/pin_map.h头文件           
  ROM_GPIOPinConfigure(GPIO_PH0_M0PWM0);
  ROM_GPIOPinConfigure(GPIO_PH1_M0PWM1);
  ROM_GPIOPinConfigure(GPIO_PH2_M0PWM2);
  ROM_GPIOPinConfigure(GPIO_PH3_M0PWM3);
  ROM_GPIOPinConfigure(GPIO_PH4_M0PWM4);
  ROM_GPIOPinConfigure(GPIO_PH5_M0PWM5);
  ROM_GPIOPinConfigure(GPIO_PH6_M0PWM6);
  ROM_GPIOPinConfigure(GPIO_PH7_M0PWM7);  

  //配置一个PWM发生器:计数,同步(非)模式
  ROM_PWMGenConfigure(PWM0_BASE,PWM_GEN_0,PWM_GEN_MODE_UP_DOWN|PWM_GEN_MODE_NO_SYNC);
  ROM_PWMGenConfigure(PWM0_BASE,PWM_GEN_1,PWM_GEN_MODE_UP_DOWN|PWM_GEN_MODE_NO_SYNC);
  ROM_PWMGenConfigure(PWM0_BASE,PWM_GEN_2,PWM_GEN_MODE_UP_DOWN|PWM_GEN_MODE_NO_SYNC);
  ROM_PWMGenConfigure(PWM0_BASE,PWM_GEN_3,PWM_GEN_MODE_UP_DOWN|PWM_GEN_MODE_NO_SYNC);

  //设置一个PWM发生器的周期
  ROM_PWMGenPeriodSet(PWM0_BASE,PWM_GEN_0,16000);
  ROM_PWMGenPeriodSet(PWM0_BASE,PWM_GEN_1,16000);
  ROM_PWMGenPeriodSet(PWM0_BASE,PWM_GEN_2,16000);
  ROM_PWMGenPeriodSet(PWM0_BASE,PWM_GEN_3,16000);

  //设置指定PWM输出的脉冲宽度
  ROM_PWMPulseWidthSet(PWM0_BASE,PWM_OUT_0,16000*0.9);
  //设置指定PWM输出的脉冲宽度
  ROM_PWMPulseWidthSet(PWM0_BASE,PWM_OUT_1,16000*0.8);
  //设置指定PWM输出的脉冲宽度
  ROM_PWMPulseWidthSet(PWM0_BASE,PWM_OUT_2,16000*0.7);
  //设置指定PWM输出的脉冲宽度
  ROM_PWMPulseWidthSet(PWM0_BASE,PWM_OUT_3,16000*0.6);
  //设置指定PWM输出的脉冲宽度
  ROM_PWMPulseWidthSet(PWM0_BASE,PWM_OUT_4,16000*0.5);
  //设置指定PWM输出的脉冲宽度
  ROM_PWMPulseWidthSet(PWM0_BASE,PWM_OUT_5,16000*0.4);
  //设置指定PWM输出的脉冲宽度
  ROM_PWMPulseWidthSet(PWM0_BASE,PWM_OUT_6,16000*0.2);
  //设置指定PWM输出的脉冲宽度
  ROM_PWMPulseWidthSet(PWM0_BASE,PWM_OUT_7,16000*0.1);

  //使能PWM输出
  ROM_PWMOutputState(PWM0_BASE,PWM_OUT_0_BIT|PWM_OUT_1_BIT|
         PWM_OUT_2_BIT|PWM_OUT_3_BIT|
         PWM_OUT_4_BIT|PWM_OUT_5_BIT|
         PWM_OUT_6_BIT|PWM_OUT_7_BIT
         ,true);
  //使能一个PWM发生器模块的定时器
  ROM_PWMGenEnable(PWM0_BASE,PWM_GEN_0);
  ROM_PWMGenEnable(PWM0_BASE,PWM_GEN_1);
  ROM_PWMGenEnable(PWM0_BASE,PWM_GEN_2);
  ROM_PWMGenEnable(PWM0_BASE,PWM_GEN_3);

[ 本帖最后由 蓝雨夜 于 2011-11-9 14:16 编辑 ]
 
 
 

回复

5304

帖子

454

TA的资源

五彩晶圆(高级)

5
 

注意:

 

//配置一个GPIO引脚的备用功能 ROM_GPIOPinConfigure(GPIO_PH0_M0PWM0); 不能少哦!

 

同时要添加 driverlib/pin_map.h头文件 不然会没有输出 了

 
 
 

回复

1803

帖子

0

TA的资源

五彩晶圆(高级)

6
 

回复 5楼 蓝雨夜 的帖子

请教一个问题:
void ROM_PWMSyncTimeBase (unsigned long ulBase, unsigned long ulGenBits)
使一个或多个PWM发生器模块的计数器同步
void ROM_PWMSyncUpdate (unsigned long ulBase, unsigned long ulGenBits)
同步所有挂起的更新

这两个 API 具体要怎么使用?
我一直分得不太明白。
是可以单独用呢?还是要配合使用。
 
 
 

回复

5304

帖子

454

TA的资源

五彩晶圆(高级)

7
 
这几个我还没实践过
 
 
 

回复

5304

帖子

454

TA的资源

五彩晶圆(高级)

8
 
到时看下里面的寄存器

这两个应该在同步模式下工作的吧
 
 
 

回复

1803

帖子

0

TA的资源

五彩晶圆(高级)

9
 

回复 8楼 蓝雨夜 的帖子

是的,必须在同步模式下,不在同步模式下,这两个是无效的。
 
 
 

回复

5304

帖子

454

TA的资源

五彩晶圆(高级)

10
 
这2个函数分别是对 PWMSYNC 时基同步寄存器和
PWMCTL 主控寄存器的操作
 
 
 

回复

5304

帖子

454

TA的资源

五彩晶圆(高级)

11
 
同步:发生器和他的两个输出信号通过共用的统一时钟与其它PWM发生器保持联系。如果多个PWM发生器配置使用相同的计时器装载值,同步可以保证他们有相同的计数值(在同步之前必须配置PWM发生器)。由于这个特性,可以在那些信号边沿之间产生2个以上的关系已知的PWM n信号,因为计数器总是保持着相同的值。单位中的其他状态提供了一种机制维持共用时基和相互同步。
 
 
 

回复

5304

帖子

454

TA的资源

五彩晶圆(高级)

12
 

PWM中断

 

一、添加相关中断头文件

//Macros that define the interrupt assignment on Stellaris
#include "inc/hw_ints.h"
//Prototypes for the NVIC Interrupt Controller Driver
#include "driverlib/interrupt.h"

 

 

二、在基本PWM配置基础上

//使能PWM发生器1归零触发中断
  ROM_PWMGenIntTrigEnable(PWM0_BASE,   //宏hw_memmap.h
        PWM_GEN_0,
        PWM_INT_CNT_ZERO);

  //使能PWM发生器1中断
  ROM_PWMIntEnable(PWM0_BASE,PWM_INT_GEN_0); //宏pwm.h
  // 使能PWM1中断
  ROM_IntEnable(INT_PWM0_0);     //宏hw_ints.h
  //使能总中断
  ROM_IntMasterEnable();

 

三、运动模块0的PWM0中断函数

//M0PWM0中断
void PWM0_Generator_0_ISR(void)
{
 static unsigned long n=0;
 
 ROM_PWMGenIntClear( PWM0_BASE,
      PWM_GEN_0,
      PWM_INT_CNT_ZERO);
 //设置PWM输出的脉宽
 if(n==0)
 {
 PWMPulseWidthSet( PWM0_BASE,
      PWM_OUT_0,
      16000*0.5); 
      n=1;
 }
 else
 {
 PWMPulseWidthSet( PWM0_BASE,
      PWM_OUT_0,
      16000*0.9); 
      n=0;
 }
}

 

四、在startup_rvmdk.s里对中断函数声明

1、EXPORT  __Vectors上面增加:EXTERN  PWM0_Generator_0_ISR

2、修改 DCD     PWM0_Generator_0_ISR           ; PWM Generator 0


 

[ 本帖最后由 蓝雨夜 于 2011-11-9 22:13 编辑 ]
 
 
 

回复

1729

帖子

0

TA的资源

五彩晶圆(初级)

13
 
学习一下!
 
 
 

回复

1181

帖子

0

TA的资源

五彩晶圆(初级)

14
 

看来楼主很强嘛

 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

15
 

初学M4

//设置系统时钟
ROM_SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_XTAL_16MHZ |
                        SYSCTL_OSC_MAIN);
刚学arm看不明白,这儿为什么是设置时钟。而且后面是四个或的选择设置
 
 
 

回复

5304

帖子

454

TA的资源

五彩晶圆(高级)

16
 
刚进入MAIN就要对系统时钟进行一系列的初始化,首先系统时钟是必须配置起来的
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

17
 
哦 这个问题问的有点傻 还请您多多谅解
SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_XTAL_16MHZ |
SYSCTL_OSC_MAIN)
第一个是分频,第二个是锁相环时钟,第三个是外部时钟 ……
难道这个设置是表示系统同时设置这四个项吗?而不是单单设置某一个项呢
 
 
 

回复

5304

帖子

454

TA的资源

五彩晶圆(高级)

18
 
你看他们之间是什么关系
|

你可以深入了解下它的函数原形是对那些寄存器操作,你对应PDF就知道为什么这么设置了!
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

19
 

还请问下

M4里面怎么去实现定时器控制PWM脉冲频率
有相关的例程可以参考下吗?
 
 
 

回复

5304

帖子

454

TA的资源

五彩晶圆(高级)

20
 
这个要自己写了!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表