首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Raspberry Pi 2中,如何配置PWM1通道?

在Raspberry Pi 2中,如何配置PWM1通道?
EN

Stack Overflow用户
提问于 2016-01-05 14:57:16
回答 1查看 822关注 0票数 2

我可以在Raspberry的GPIO 18上使用PWM0通道驱动伺服,并使用以下c代码:

代码语言:javascript
复制
#define BCM2708_PERI_BASE       0x3F000000
#define PWM_BASE                (BCM2708_PERI_BASE + 0x20C000)
#define CLOCK_BASE              (BCM2708_PERI_BASE + 0x101000)
#define GPIO_BASE               (BCM2708_PERI_BASE + 0x200000)

#define PWM_CTL 0
#define PWM0_RNG 4
#define PWM0_DAT 5

#define PWM0_MS_MODE    0x0080  // Run in MS mode
#define PWM0_USEFIFO    0x0020  // Data from FIFO
#define PWM0_REVPOLAR   0x0010  // Reverse polarity
#define PWM0_OFFSTATE   0x0008  // Ouput Off state
#define PWM0_REPEATFF   0x0004  // Repeat last value if FIFO empty
#define PWM0_SERIAL     0x0002  // Run in serial mode
#define PWM0_ENABLE     0x0001  // Channel Enable

#define PWMCLK_CNTL 40
#define PWMCLK_DIV 41

// stop clock and waiting for busy flag doesn't work, so kill clock
*(clk + PWMCLK_CNTL) = 0x5A000000 | (1 << 5); usleep(10);

// wait until busy flag is set
while ( (*(clk + PWMCLK_CNTL)) & 0x00000080){}

*(clk + PWMCLK_DIV) = 0x5A000000 | (Divisor << 12);
*(clk + PWMCLK_CNTL) = 0x5A000011;
*(pwm + PWM_CTL) = 0; usleep(10);

*(pwm + PWM0_RNG) = Counts; usleep(10);
*(pwm + PWM0_DAT) = (int) (DutyCycle * Counts / 100); usleep(10);
*(pwm + PWM_CTL) |= ( (1 << 7) | (1 << 0) );

然而,当我试图在PWM1频道上的另一个GPIO上驱动另一个伺服时,它根本不起作用。PWM1通道具有以下值:

代码语言:javascript
复制
#define PWM1_RNG 8
#define PWM1_DAT 9

#define PWM1_MS_MODE    0x8000  // Run in MS mode
#define PWM1_USEFIFO    0x2000  // Data from FIFO
#define PWM1_REVPOLAR   0x1000  // Reverse polarity
#define PWM1_OFFSTATE   0x0800  // Ouput Off state
#define PWM1_REPEATFF   0x0400  // Repeat last value if FIFO empty
#define PWM1_SERIAL     0x0200  // Run in serial mode
#define PWM1_ENABLE     0x0100  // Channel Enable

有人能告诉我从PWM0和PWM1到哪里修改寄存器吗?

EN

回答 1

Stack Overflow用户

发布于 2016-01-06 16:59:16

在浏览可用的文档时,必须将GPIO45设置为它的备用函数0。

脉宽调制外围寄存器是在Broadcom外围文档中描述的(这指的是RPi 1的BCM2835,但相对于外围设备而言,它与RPi的BCM2836基本相同。请注意,PWM通道在寄存器表中称为PWM 1/2,而不是PWM 0/1。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34614655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档