platform_device内存,中断,时钟
2013-07-15 17:11
162 查看
platform_device内存资源使用步骤
1.res = platform_get_resource(pdev,IORESOURCE_MEM,0);
platform_get_resource 返回资源对象
2.request_mem_region(res->,res->end - res->start + 1,DRIVER_NAME);
request_mem_region()宏,请求分配指定的I/O内存资源
#define request_mem_region(start,n,name) __request_region(&iomem_resource, (start), (n), (name))
注: 调用request_mem_region()不是必须的,但是建议使用。该函数的任务是检查申请的资源是否可用,
如果可用则申请成功,并标志为已经使用,其他驱动想再申请该资源时就会失败。
3.host->baseaddr = ioremap(res->,res->end - res->start + 1);//地址映射
void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)
将一个IO地址空间映射到内核的虚拟地址空间上去,便于访问。
release_mem_region()宏,释放指定的I/O内存资源。
#define release_mem_region(start,n) __release_region(&iomem_resource, (start), (n))
platform_device中断资源使用步骤
1.host->irq = platform_get_irq(pdev,0);
2.ret = request_irq(host->irq,at91_mci_irq,IROF_SHARED,DRIVER_NAME,host);
外设时钟的开启
struct clk=clk_get(NULL,"adc");
clk.enable();
之后adc对应的时钟位就能时能。
struct clk *clk_get(struct device *dev, const char *id)
{
..........
list_for_each_entry(p, &clocks, list) {
if (p->id == idno &&
strcmp(id, p->name) == 0 &&
try_module_get(p->owner)) {
clk = p;
break;
}
}
.............................................
return clk;
}
clk_get从一个时钟list链表中以字符id名称来查找一个时钟clk结构体并且返回,最后调用clk.enable(),来时能对应的外设时钟源。
1.res = platform_get_resource(pdev,IORESOURCE_MEM,0);
platform_get_resource 返回资源对象
2.request_mem_region(res->,res->end - res->start + 1,DRIVER_NAME);
request_mem_region()宏,请求分配指定的I/O内存资源
#define request_mem_region(start,n,name) __request_region(&iomem_resource, (start), (n), (name))
注: 调用request_mem_region()不是必须的,但是建议使用。该函数的任务是检查申请的资源是否可用,
如果可用则申请成功,并标志为已经使用,其他驱动想再申请该资源时就会失败。
3.host->baseaddr = ioremap(res->,res->end - res->start + 1);//地址映射
void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)
将一个IO地址空间映射到内核的虚拟地址空间上去,便于访问。
release_mem_region()宏,释放指定的I/O内存资源。
#define release_mem_region(start,n) __release_region(&iomem_resource, (start), (n))
platform_device中断资源使用步骤
1.host->irq = platform_get_irq(pdev,0);
2.ret = request_irq(host->irq,at91_mci_irq,IROF_SHARED,DRIVER_NAME,host);
外设时钟的开启
struct clk=clk_get(NULL,"adc");
clk.enable();
之后adc对应的时钟位就能时能。
struct clk *clk_get(struct device *dev, const char *id)
{
..........
list_for_each_entry(p, &clocks, list) {
if (p->id == idno &&
strcmp(id, p->name) == 0 &&
try_module_get(p->owner)) {
clk = p;
break;
}
}
.............................................
return clk;
}
clk_get从一个时钟list链表中以字符id名称来查找一个时钟clk结构体并且返回,最后调用clk.enable(),来时能对应的外设时钟源。
相关文章推荐
- platform模型驱动中断和内存资源使用步骤
- 在系统中增加一个可唤醒中断--同时说明platform_device &platform_driver
- uboot-2011.12移植到S3C2440(三)——硬件初始化:看门狗、中断、时钟
- platform_driver_register() & platform_device_register() 关系
- [platform]新旧内核的device设备注册对比
- platform _device和platform_driver注册过程
- Platform_device 和 Platform_driver
- platform_device与platform_driver
- platform_device和platform_driver
- mini2440 RTC实时时钟中断和报警功能实验
- Linux内核的时钟中断机制(6)
- White paper: Protecting the BlackBerry device platform against malware
- Java并发基础知识(内存栅栏+volatile+synchronized详解+java锁优化+wait notify+AbstractQueuedSynchronizer详解+线程中断)
- Creating Mobile Games: Using Java ME Platform to Put the Fun into Your Mobile Device and Cell Phone
- Linux Platform Device and Driver
- Linux Platform Device and Driver,platform_add_devices()->platform_driver_register()
- Linux设备模型之platform_device和platform_driver
- uC/OS-II的中断和时钟_读书笔记_4
- 内核驱动中常见的miscdevice、platform_device、platform_driver
- uCOS-II的中断与时钟