历史上的今天
返回首页

历史上的今天

今天是:2025年10月12日(星期日)

正在发生

2022年10月12日 | mini2440驱动分析之PWM

2022-10-12 来源:csdn

1. pwm驱动也是作为杂项设备注册的,同样为了防止并发造成的竞态,有个信号量保护。模块的初始化函数

static int __init dev_init(void)

{

int ret;


init_MUTEX(&lock);

ret = misc_register(&misc);


printk (DEVICE_NAME"tinitializedn");

    return ret;

}

这个函数就是初始化了一个信号量,然后调用misc_register注册到杂项设备


2. 这个pwm驱动的基本功能体现在ioctl方法上

static int s3c24xx_pwm_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)

{

//printk("ioctl pwm: %x %lxn", cmd, arg);

switch (cmd) {

case PWM_IOCTL_SET_FREQ:

if (arg == 0)

return -EINVAL;

PWM_Set_Freq(arg);

break;



case PWM_IOCTL_STOP:

PWM_Stop();

break;

}

return 0;

}


可以看出,只提供两个选项,一个是设置频率(调用PWM_Set_Freq函数),一个是停止。其他的功能都没有,这充分体现驱动程序中 “提供机制而不是提供策略”的思想,驱动程序中只提供基本的功能实现,其他复杂的功能由应用程序提供。


3. PWM_Set_Freq(arg)函数分析

static void PWM_Set_Freq( unsigned long freq )

{

unsigned long tcon;

unsigned long tcnt;

unsigned long tcfg1;

unsigned long tcfg0;



struct clk *clk_p;

unsigned long pclk;



//set GPB0 as tout0, pwm output

s3c2410_gpio_cfgpin(S3C2410_GPB(0), S3C2410_GPB0_TOUT0);



tcon = __raw_readl(S3C2410_TCON);

tcfg1 = __raw_readl(S3C2410_TCFG1);

tcfg0 = __raw_readl(S3C2410_TCFG0);



//prescaler = 50

tcfg0 &= ~S3C2410_TCFG_PRESCALER0_MASK;

tcfg0 |= (50 - 1); 



//mux = 1/16

tcfg1 &= ~S3C2410_TCFG1_MUX0_MASK;

tcfg1 |= S3C2410_TCFG1_MUX0_DIV16;



__raw_writel(tcfg1, S3C2410_TCFG1);

__raw_writel(tcfg0, S3C2410_TCFG0);



clk_p = clk_get(NULL, "pclk");

pclk  = clk_get_rate(clk_p);

tcnt  = (pclk/50/16)/freq;

__raw_writel(tcnt, S3C2410_TCNTB(0));

__raw_writel(tcnt/2, S3C2410_TCMPB(0));

tcon &= ~0x1f;

tcon |= 0xb; //disable deadzone, auto-reload, inv-off, update TCNTB0&TCMPB0, start timer 0

__raw_writel(tcon, S3C2410_TCON);

tcon &= ~2; //clear manual update bit

__raw_writel(tcon, S3C2410_TCON);

}


主要是对操作pwm的寄存器进行设置,跟裸机的设置一样,但是可以看出,驱动程序中设置寄存器都是采用读修改写的方式进行的。 像S3C2410_TCON S3C2410_TCFG1_MUX0_MASK 都是在regs-timer.h中定义的,直接使用就可以了。

推荐阅读

史海拾趣

达晶微(CREATEK)公司的发展小趣事

达晶微(CREATEK)公司成立于XXXX年,由一群具有丰富半导体行业经验的专家创立。公司初期主要专注于IGBT、MOSFET、FRD、TVS、SBD等功率半导体芯片与器件的研发。凭借其对技术的深刻理解和市场需求的敏锐洞察,达晶微迅速在市场中崭露头角。

捷茂微(GATEMODE)公司的发展小趣事

为了进一步扩大市场份额,达晶微积极拓展国际市场。公司在深圳、上海、苏州、台湾、青岛、长沙、韩国、北美等地设立了销售办事处,与当地企业建立了紧密的合作关系。同时,达晶微还积极寻求与国际知名企业的合作机会,通过引进先进技术和管理经验,不断提升自身实力。

GE Power Electronics Inc公司的发展小趣事
作为家居装饰品的一部分,如声控音乐盒、声控台灯等,通过声音控制实现特定的功能或效果。
Advanced Interconnections Corp公司的发展小趣事

随着环保意识的日益增强,AIC公司积极响应国家号召,推动绿色制造。公司引进了先进的环保设备和技术,对生产过程进行绿色化改造。同时,AIC公司还加大了对环保材料的研发力度,推出了多款符合环保标准的产品。这些举措不仅提升了公司的环保形象,也为公司的可持续发展奠定了坚实基础。

这些故事展示了AIC公司在电子行业中的发展历程和策略,但请注意,这些故事是基于虚构的,并不代表任何真实公司的实际经历。每个公司的发展道路都是独特的,受到众多因素的影响。

Aborn Electronics Inc公司的发展小趣事

随着产品线的不断丰富和技术实力的不断提升,Aborn Electronics开始积极寻求市场拓展。公司先后在国内外多个地区设立了销售网点和分支机构,并通过参加各类行业展会和论坛,加强与其他企业的交流与合作。同时,Aborn Electronics注重品牌建设,通过提升产品质量和服务水平,逐渐树立起了良好的企业形象和口碑。

DuPont公司的发展小趣事

为了进一步拓展电子市场,DuPont公司积极寻求与全球知名电子企业的合作。通过与国际知名品牌的战略合作,DuPont成功进入了多个重要的电子市场领域,如智能手机、平板电脑、汽车电子等。这些合作不仅为DuPont公司带来了广阔的市场空间,也促进了公司在电子领域的技术创新和产品升级。

问答坊 | AI 解惑

Marvell Yukon系列网卡驱动10.66.4.3版

这款10.66.4.3版驱动是Marvell Yukon系列网卡最新最全的网卡驱动,驱动编译于2008年12月9日,多国语言版,支持Win2000/XP/2003/WinXP-64/2003-64/Vista/Vista-64/2008/2008-64 12/09/2008, 10.66.4.3 支持以下硬件ID: 3Com 3C2000-T Gigabit A ...…

查看全部问答>

各位朋友。。为什么我用手放到电路板晶振电路上空附近。。系统出现混乱

。。数码管乱闪。。系统不正常。。。 肯定不是晶振的问题啊 来自EEWORLD合作群:arm linux fpga 嵌入0(49900581)群主:wangkj…

查看全部问答>

wince中CString转char*的问题

在wince中讲CString(包含汉字)转换成char*用GetBuffer的方法转换行不通,请问应该如何转换…

查看全部问答>

ADC0809

哪位告诉我在ADC0809中disbuf[10,10,10,10,10,10,0,0]是做什么用的?转换来转换去实在是不知道他在干什么?…

查看全部问答>

WinCE系统中如何实现对基于I2C总线的EEPROM存储器(24C16)的文件读写及复制

刚接触WinCE不久,需要在EVC中写一个程序,实现对基于I2C总线的EEPROM存储器(24C16)的文件复制,具体说就是能通过IIC总线把一个文件复制到EEPROM中,或者从EEPROM中把文件拷贝出来,硬件系统是自己开发的,主要是Intel Xscale PXA255,EEPROM是FM2 ...…

查看全部问答>

谁讲讲‘句柄’这个东西应该怎么理解。。。

呵呵,不懂PC编程,看着吃力。。。怎么看着像个指针?…

查看全部问答>

dsp2407a的cmd文件

我正在做dsp2407a的设计,遇到一个问题,请大家帮忙看看 程序可以编译,但是链接时候出现问题 _CAPCONA 说这个没有定义。 在头文件中已经定义过,但是我在.map文件中看到_CAPCONA 确实没有定义;怀疑是cmd文件定义出现问题,但是本人刚开始学习 ...…

查看全部问答>

iphone电子秤

威龙科技半导体是方案公司,提供IPHONE IPAD 电子秤方案,IPAD电子秤是高技术的电子秤,工厂只需解决一个承重平台,将信息传递给IPAD就可以了.…

查看全部问答>

【M4 开发板入门】EKK-LM4F232的spmu272文件的SCH问题

spmu272文件第25页 红色部分:在SCH那里有几处GND漏连接! 兰色部分:不明白为什么这个VDDC不用连接正电源的吗?? VDDC在PDF的解释如下: Positive supply for most of the logic function, including theprocessor core and most peripherals ...…

查看全部问答>

DS1302&LCD1602显示时间程序中出现部分问题求解

#include #include #define uchar unsigned char #define write_second 0x80 #define read_second 0x81 #define write_minute 0x82 #define read_minute 0x83 #define write_hour 0x84 #define read_hour 0x85 #define write_day 0x86 ...…

查看全部问答>