writel(readl(&pwm_timer->tcfg0) | 0xff, &pwm_timer->tcfg0);

解析这句代码什么意思!

神说:选定预分频器0

为什么?

神说:因为实验中选的是timer1,在预分频器0下;

若选择timer4,该如何写这句代码?

首先看tcfg0中选择预分频器1,在看tcfg1里面的timer4,以及选择相应的MUX

总结:在初始化寄存器时,首先得看寄存器表,寄存器表中可能分为许多【位】,我们需要哪位,就给哪位写入值(这个值是对应相应的功能来写的)。

分频器1:

对应的代码:

①  选择预分频1:

writel(readl(&pwm_timer->tcfg0) | 0xff << 8, &pwm_timer->tcfg0);

在书上说明了预分频的取值范围是1~255(神告诉我,值越大,频率越大,蜂鸣器响的越快)。

所以在这里我们不必关心值是多少,我们只需要让这个值不是初始值,并且在TCFG0的[15:8]这个地方,左移8位,就可以到达这个地方;

② 选择MUX4,频率为1/16:

从图中,可以知道MUX4对应TCFG1[19:16],选择频率是1/16,对应二进制位0100,可以让0x4 << 16,得到。

但是为了让[15:0]都不起作用,给他们都赋值1(这里不太清楚,自己猜的,大概就是这样吧!),即1111,1111,1111,1111

可以通过0xf左移16位,并且取反,在与[0x4 << 16]取与&

代码为:

writel((readl(&pwm_timer->tcfg1) & ~(0xf<<16)) | (0x4<<16), &pwm_timer->tcfg1);

时间: 2024-10-13 00:11:56

writel(readl(&pwm_timer->tcfg0) | 0xff, &pwm_timer->tcfg0);的相关文章

嵌入式Linux裸机开发(九)——S5PV210定时器

嵌入式Linux裸机开发(九)--S5PV210定时器 S5PV210内部一共有四类定时器. 一.PWM定时器 1.PWM定时简介 S5PV210内部共有5个32bit的PWM定时器.PWM定时器可以生成内部中断.PWM定时器0.1.2.3具有PWM功能,可以驱动外部I/O信号.PWM定时器4是一个无外部引脚的内部定时器.PWM 定时器使用 PCLK_PSYS 作为时钟源. 每个定时器有一个由定时器时钟驱动的32位递减计数器.递减计数器的初始值是由TCNTBn自动装载而获得的.如果递减计数器减到

Linux 设备驱动开发 —— platform设备驱动应用实例解析

前面我们已经学习了platform设备的理论知识Linux 设备驱动开发 -- platform 设备驱动 ,下面将通过一个实例来深入我们的学习. 一.platform 驱动的工作过程 platform模型驱动编程,platform 驱动只是在字符设备驱动外套一层platform_driver 的外壳. 在一般情况下,2.6内核中已经初始化并挂载了一条platform总线在sysfs文件系统中.那么我们编写platform模型驱动时,需要完成两个工作: a -- 实现platform驱动 架构就

Linux驱动之平台设备

<平台设备设备驱动> a:背景: 平台总线是Linux2.6的设备驱动模型中,关心总线,设备和驱动这3个实体.一个现实的Linux设备和驱动通常需要挂接在一种总线上(比如本身依附于PCI,USB,IIC,SPI等设备而言).但是在嵌入式系统里面,SoC系统即集成的独立外设控制器,挂接在SoC内存空间的外设却没有这样的总线依附,为了和Linux设备驱动模型理论相互统一,Linux系统开发了Platform_bus这种虚拟总线,相应的设备叫做platform_device ,相应的驱动叫platf

驱动实现led,pwm和中断基础知识

2015.4.8星期三 晴天 今天老师讲的内容是内核编写led和pwm驱动,实现花样灯和放歌的功能.理解应用和驱动的对接,最后自己实现了在放歌的时候根据歌曲的节奏亮灭一个小灯,应为两个独立的驱动都已经写好,想要组合其实很简单,只要在主调函数里面打开两个驱动的设备节点,分别进行操作并有机的组合在一起就行了.最后老师复习了中断的一些基础知识,总结一下: 异常处理:当异常发送时:nand flash 拷贝到sdram中运行,这是和nor flash 的区别之一 1.拷贝cpsr到spsr2.设置适当的

Android JNI用于驱动测试

硬件平台:S3C6410 操作系统:Ubuntu.windows 板子系统:Android 开发工具:jdk,ndk,eclipse 本次测试从linux内核模块编译开始,以S3C6410的pwm驱动为例. pwm_6410.c: #include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/init.h> #include <linu

u-boot-2016.03 在mini2440上移植之nandflash 硬件ecc

MINI2440 开发板使用的是8bit,256M blocksize= 128k,pagesize =2k的nandflash. 宽带为8bit ,由S3C2440 datasheet 可知硬件生产的ecc为4byte. S3C2440 硬件ecc 操作流程: 1.先读出NFMECC0寄存器中由硬件生产的ecc data. 2.将读出的ecc数据,进行处理之后,分别写入NFMECCD0和NFMECCD1寄存器, 硬件自动检测,检测结果可从NFESTAT0 寄存器读取. 3. 读取NFESTAT

Introduction to &quot;s3c6410 LED&quot; driver

Introduction to  driver for "s3c6410  LED" 折腾着非得写个LED driver出来~不然心里都不舒服... 内核版本:3.0.1 环境: Ubuntu14.0 TSL 开发板上嵌有4个LED灯 4个LED对应的ARM芯片上的引脚 易知,这里4个LED对应的IO引脚就是GPM0~GPM3 三个寄存器控制这里的GPIO -- GPM0~GPM3 GPMCON GPMDAT GPMPUD 这里gpio-bank-m.h定义了GPM相关的寄存器地址~这

05day02pwm

1 /* 2 pwm 硬件手册24章 3 蜂鸣器 GPD0_0 配置成 tout0 pwm0的输出 4 5 从硬件手册P446页 查出 总线的频率是100Mhz 6 7 TCFG0 配置一级分频 0-7位 配置timer0~1的预分频 8 8~15 配置timer2 3 4预分频 9 TCFG1 设置5个timer的二级分频 10 TCON pwm定时器的控制寄存器 11 [0] 定时器0的开关 12 [1] 将TCNTB0和TCMPB0的值分别写入定时器0内部 13 注意一点,写入的操是瞬间完

s3c2440 移值u-boot-2016.03 第6篇 支持mtd yaffs 烧写

1, 解决启动时的错误 Warning - bad CRC, using default environment 搜索发现 在 /tools/env/fw_env.c 中 /* 放在NAND FLASH 中 大小 128K 开始地址 */ #define CONFIG_ENV_IS_IN_NAND #define CONFIG_SYS_ENV_SECT_SIZE (128 << 10) #define CONFIG_ENV_OFFSET (256<<10) #define CONF