FPGA外设操作指南1: 8/16位PWM控制器
备注:
- 标志位
PWM_CFG_ENALWAYS
和PWM_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 of15
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控制器相关推荐
- 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个硬件比较器 ...
- R5F100AAA100SP#V0低功耗16位微控制器MCU RENESAS
描述 R5F100AAA100SP#V0 R5F100AAA Renesas 16位微控制器 - MCU RL78 / G13 RENESAS MCU 真正的低功耗平台(低至66μA/ MHz,RTC ...
- 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 真正 ...
- 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 数 ...
- 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 ...
- Ardunio开发实例-PCA9685-16路PWM控制器控制LED
PCA9685-16路PWM控制器控制LED PCA9685是I²C总线控制的16通道PWM控制器可以控制LED和舵机,针对红色/绿色/蓝色/琥珀色(RGBA)彩色背光应用进行了优化. 每个LED输出 ...
- 高性能工业级16位高精度UART转PWM接口SOC芯片
ZW10U8系列 ● 接口标准 - 通用的UART异步通讯协议,固定波特率4800,1位开始,1位停止,无校验,TTL3.3-5V. - 1个使能脚(ZW10U8xE后缀带E的),低功耗应用中可以让芯 ...
- FPGA系统性学习笔记连载_Day7【16位比较器设计】 【原理及verilog实现、仿真】篇
FPGA系统性学习笔记连载_Day7[16位比较器设计] [原理及verilog实现.仿真]篇 连载<叁芯智能fpga设计与研发-第7天>[16位比较器设计] [原理及verilog实现. ...
- PCA9685 16路12位pwm信号发生器
PCA9685 16路12位pwm信号发生器 一.概述和硬件 1.概述 2.硬件 1.电压 2.i2c地址 3.使能脚 二.寄存器功能 MODE1寄存器 各个通道的ON和OFF寄存器 PRE_SCAL ...
最新文章
- Unbuntu18.04通过apt源方式安装mysql5.7.22
- opencv python 中cv2.putText()函数的用法
- mysql 修改字段为1-10的随机数
- 32位x86处理器架构
- PHP的统一换行PHP_EOL
- 对PostgreSQL的 ctid 的初步认识
- CMake基础 第1节 初识CMake
- 赫夫曼树的定义及原理
- 十年程序人生__转自黎活明
- SCL编写的阀门块实例
- HDU 6638 Snowy Smile(线段树)
- 给春节的宴客小吃来点小惊喜---绿茶甜心曲奇
- day4. jetson nx 确认 SPI 时钟
- 理解单隐层ReLU神经网络的全局损失
- java dispatcher详解_Java Web开发详解:RequestDispatcher接口
- 关于Python控制打印机如何横向打印EXEL
- TranUnet 复现[Errno 2] No such file or directory: ‘./model/TU_Synapse224/TU_pretrain_ViT-B_16_skip3_ep
- UT-Exynos4412 三星ARM四核旗舰开发平台android4.0体验-5联通3G功能调试支持
- 文本域自适应(textarea)
- 《网络传播概论》第二章 网络的属性与传播形态
热门文章
- 系统对接方案_一个呼叫中心系统组建的案例
- AT指令:AT+CMGF
- shell中encoding=utf-8_如何在Linux中将文件转换为UTF-8编码
- python建立数据库连接时出错_python – 尝试连接到localhost上的数据库时出现pyodbc连接错误...
- python程序设计实验七_Python程序设计实验报告七:组合数据类型
- *Algs4-2.4.23Multiway的堆(未解决)
- js中的内置对象(详细篇)
- 【OCP|052】OCP题库更新,052最新考题及答案整理-第10题
- Nginx 项目部署和配置
- 【Web crawler】simulated DFS web crawler