Chinaunix首页 | 论坛 | 博客
  • 博客访问: 452006
  • 博文数量: 90
  • 博客积分: 2158
  • 博客等级: 大尉
  • 技术积分: 1435
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-12 17:02
个人简介

怎么了选择

文章分类
文章存档

2024年(1)

2023年(1)

2019年(1)

2018年(5)

2017年(5)

2015年(1)

2014年(1)

2013年(1)

2012年(74)

分类:

2012-02-04 11:42:26

原文地址:sd卡随笔 作者:gliethttp

//Leith_20080708
首先使能END_CMD_RES命令中断处理函数pxamci_irq,当命令发送完成之后pxamci_irq进一步检查该命令是否有跟随的数据部分,如果有,那么
将在irq处理函数中使能pxamci_enable_irq(host, DATA_TRAN_DONE);数据完成中断,sd的cmd命令有3中模式,
1)cmd发送完成之后,没有response返回
2)cmd发送完成之后,有response返回
3)cmd发送完成之后,继续有数据需要发送
mmc的host控制器会自动根据具体的cmd,进行自动化处理.

host->dma = pxa_request_dma(DRIVER_NAME, DMA_PRIO_LOW,
                    pxamci_dma_irq, host);
将获取一个空闲的DMA通道(pxa有32个DMA通道可以使用)
static void pxamci_dma_irq(int dma, void *devid)
{
    ...
    if (dcsr & DCSR_ENDINTR) {
        writel(BUF_PART_FULL, host->base + MMC_PRTBUF);//这里将使MMC的data中断使能,触发pxamci_irq的DATA_TRAN_DONE中断
    ...
}

mmc_request=>wake_up_process(mq->thread);=>mmc_queue_thread()=>mq->issue_fn(mq, req);
=>md->queue.issue_fn = mmc_blk_issue_rq;执行真正的命令发送
=>mmc_wait_for_req()等待mrq->done被调用.


mmc_wait_for_cmd将命令发送出去,并且等待起发送完成,如果命令跟随数据,那么同样等待直到数据发送完毕=>mmc_wait_for_req


mmc_wait_for_req=>
mmc_start_request=>host->ops->request(host, mrq);启动,然后等待
wait_for_completion(&complete);

所以mmc_wait_for_cmd和mmc_wait_for_req是提交数据给sd控制器的被其他函数引用的函数.

阅读(1690) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~