platform_device内存,中断,时钟

本文介绍了嵌入式系统中平台设备的内存资源和中断资源的使用步骤,包括使用platform_get_resource获取资源、request_mem_region请求内存区域、ioremap进行地址映射以及request_irq请求中断等操作,并详细说明了外设时钟的开启方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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(),来时能对应的外设时钟源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值