PWM控制参数寄存器结构图

备注:

  • 标志位 PWM_CFG_ENALWAYSPWM_CFG_ONESHOT的优先级顺序是en always高于one shot
  • 标志位 PWM_CFG_ZEROCMP必须置1
  • PWM占空比的计算比较复杂:

    左对齐脉宽占空比

    中央对齐脉宽占空比

寄存器 PWM0_REG(PWM_S)PWM0_REG(PWM_CMP0)~PWM0_REG(PWM_CMP3)

// 计数器
PWM0_REG(PWM_COUNT) = 0;
// CFG控制字
PWM0_REG(PWM_CFG) = 0;
PWM0_REG(PWM_CFG) = (PWM_CFG_ENALWAYS) | (PWM_CFG_ZEROCMP) | (PWM_CFG_DEGLITCH);
int main (void)
{// 115200 Baud Rate at (65 / 2) MHz//UART0_REG(UART_REG_DIV) = 282;//UART0_REG(UART_REG_TXCTRL) = UART_TXEN;//UART0_REG(UART_REG_RXCTRL) = UART_RXEN;// Wait a bit because we were changing the GPIOsvolatile int i=0;while(i < 10000){i++;}//_puts(sifive_msg);//_puts(welcome_msg);uint16_t r=0x3F;uint16_t g=0;uint16_t b=0;// Set up RGB PWMPWM0_REG(PWM_CFG)   = 0;PWM0_REG(PWM_CFG)   = (PWM_CFG_ENALWAYS) | (PWM_CFG_ZEROCMP) | (PWM_CFG_DEGLITCH);PWM0_REG(PWM_COUNT) = 0;// The LEDs are intentionally left somewhat dim. PWM0_REG(PWM_CMP0)  = 0xFE;while(1){volatile uint64_t *  now = (volatile uint64_t*)(CLINT_CTRL_ADDR + CLINT_MTIME);volatile uint64_t then = *now + 400;while (*now < then) { }if(r > 0 && b == 0){r--;g++;}if(g > 0 && r == 0){g--;b++;}if(b > 0 && g == 0){r++;b--;}PWM0_REG(PWM_CMP1)  = 0xFF - (r >> 2);PWM0_REG(PWM_CMP2)  = 0xFF - (g >> 2);PWM0_REG(PWM_CMP3)  = 0xFF - (b >> 2);}// While (1)
}
// See LICENSE for license details.#ifndef _SIFIVE_PWM_H
#define _SIFIVE_PWM_H/* Register offsets */#define PWM_CFG   0x00
#define PWM_COUNT 0x08
#define PWM_S     0x10
#define PWM_CMP0  0x20
#define PWM_CMP1  0x24
#define PWM_CMP2  0x28
#define PWM_CMP3  0x2C/* Constants */#define PWM_CFG_SCALE       0x0000000F // 4bit掩码
#define PWM_CFG_STICKY      0x00000100
#define PWM_CFG_ZEROCMP     0x00000200
#define PWM_CFG_DEGLITCH    0x00000400
#define PWM_CFG_ENALWAYS    0x00001000
#define PWM_CFG_ONESHOT     0x00002000
#define PWM_CFG_CMP0CENTER  0x00010000
#define PWM_CFG_CMP1CENTER  0x00020000
#define PWM_CFG_CMP2CENTER  0x00040000
#define PWM_CFG_CMP3CENTER  0x00080000
#define PWM_CFG_CMP0GANG    0x01000000
#define PWM_CFG_CMP1GANG    0x02000000
#define PWM_CFG_CMP2GANG    0x04000000
#define PWM_CFG_CMP3GANG    0x08000000
#define PWM_CFG_CMP0IP      0x10000000
#define PWM_CFG_CMP1IP      0x20000000
#define PWM_CFG_CMP2IP      0x40000000
#define PWM_CFG_CMP3IP      0x80000000#endif /* _SIFIVE_PWM_H */

scale 缩放倍率

A value of 0 in pwmscale indicates no scaling, and pwms would then be equal to the low 16 bits of pwmcount. The maximum value of 15 in pwmscale corresponds to dividing the clock rate by 2^15, so for an input bus clock of 16 MHz, the LSB of pwms will increment at 488.3 Hz.

摘录自
https://sifive.cdn.prismic.io/sifive%2F4d063bf8-3ae6-4db6-9843-ee9076ebadf7_fe310-g000.pdf

FPGA外设操作指南1: 8/16位PWM控制器相关推荐

  1. YX133具有12位ADC与16位PWM的8位OTP单片机,SOP和QFN小封装单片机适合电子烟等便携产品使用

    1.1 产品描述 YX133 是一款以OTP程序为基础的8位微处理器,集成高精准度的8(6+2)通道12位的ADC(VREFHmin=1V),6个8位PWM(或3个16位PWM)生成器,1个硬件比较器 ...

  2. R5F100AAA100SP#V0低功耗16位微控制器MCU RENESAS

    描述 R5F100AAA100SP#V0 R5F100AAA Renesas 16位微控制器 - MCU RL78 / G13 RENESAS MCU 真正的低功耗平台(低至66μA/ MHz,RTC ...

  3. R5F1006CASP#X0 16位微控制器MCU RL78 / G13 MCU低功耗 通用应用RENESAS

    描述 R5F1006CASP#X0 16位微控制器 - MCU RL78 / G13 MCU 32 + 4/2 20pin SSOP T&R RL78 / G13 RENESAS MCU 真正 ...

  4. R5F102A8ASP#V0 16位微控制器 - MCU RL78G12 8+2/768B 30SSOP R5F102A8ASP#30

    16位微控制器 - MCU RL78G12 8+2/768B 30SSOP R5F102A8ASP#30 核心:RL78 数据总线宽度:16位 最大时钟频率:24 MHz 程序存储器大小:8 kB 数 ...

  5. R5F100PLAFB#V0 16位微控制器超低功耗RENESAS

    描述 R5F100PLAFB#V0 RL78/ G13 RENESAS MCU 真正的低功耗平台(低至66μA/ MHz,RTC + LVD为0.57μA),1.6 V至5.5 V工作电压, 16至5 ...

  6. Ardunio开发实例-PCA9685-16路PWM控制器控制LED

    PCA9685-16路PWM控制器控制LED PCA9685是I²C总线控制的16通道PWM控制器可以控制LED和舵机,针对红色/绿色/蓝色/琥珀色(RGBA)彩色背光应用进行了优化. 每个LED输出 ...

  7. 高性能工业级16位高精度UART转PWM接口SOC芯片

    ZW10U8系列 ● 接口标准 - 通用的UART异步通讯协议,固定波特率4800,1位开始,1位停止,无校验,TTL3.3-5V. - 1个使能脚(ZW10U8xE后缀带E的),低功耗应用中可以让芯 ...

  8. FPGA系统性学习笔记连载_Day7【16位比较器设计】 【原理及verilog实现、仿真】篇

    FPGA系统性学习笔记连载_Day7[16位比较器设计] [原理及verilog实现.仿真]篇 连载<叁芯智能fpga设计与研发-第7天>[16位比较器设计] [原理及verilog实现. ...

  9. PCA9685 16路12位pwm信号发生器

    PCA9685 16路12位pwm信号发生器 一.概述和硬件 1.概述 2.硬件 1.电压 2.i2c地址 3.使能脚 二.寄存器功能 MODE1寄存器 各个通道的ON和OFF寄存器 PRE_SCAL ...

最新文章

  1. Unbuntu18.04通过apt源方式安装mysql5.7.22
  2. opencv python 中cv2.putText()函数的用法
  3. mysql 修改字段为1-10的随机数
  4. 32位x86处理器架构
  5. PHP的统一换行PHP_EOL
  6. 对PostgreSQL的 ctid 的初步认识
  7. CMake基础 第1节 初识CMake
  8. 赫夫曼树的定义及原理
  9. 十年程序人生__转自黎活明
  10. SCL编写的阀门块实例
  11. HDU 6638 Snowy Smile(线段树)
  12. 给春节的宴客小吃来点小惊喜---绿茶甜心曲奇
  13. day4. jetson nx 确认 SPI 时钟
  14. 理解单隐层ReLU神经网络的全局损失
  15. java dispatcher详解_Java Web开发详解:RequestDispatcher接口
  16. 关于Python控制打印机如何横向打印EXEL
  17. TranUnet 复现[Errno 2] No such file or directory: ‘./model/TU_Synapse224/TU_pretrain_ViT-B_16_skip3_ep
  18. UT-Exynos4412 三星ARM四核旗舰开发平台android4.0体验-5联通3G功能调试支持
  19. 文本域自适应(textarea)
  20. 《网络传播概论》第二章 网络的属性与传播形态

热门文章

  1. 系统对接方案_一个呼叫中心系统组建的案例
  2. AT指令:AT+CMGF
  3. shell中encoding=utf-8_如何在Linux中将文件转换为UTF-8编码
  4. python建立数据库连接时出错_python – 尝试连接到localhost上的数据库时出现pyodbc连接错误...
  5. python程序设计实验七_Python程序设计实验报告七:组合数据类型
  6. *Algs4-2.4.23Multiway的堆(未解决)
  7. js中的内置对象(详细篇)
  8. 【OCP|052】OCP题库更新,052最新考题及答案整理-第10题
  9. Nginx 项目部署和配置
  10. 【Web crawler】simulated DFS web crawler