SATA中断处理(crst/xrst/rfis/phyup...)
2018-02-09 10:05
274 查看
1.SSD上电后code注册中断过程:
main()--->sys_init()--->sata_init()--->sata_isr_init()--->sata_isr_lgc_exec()
2.在sata_isr_lgc_exec()接口中:task_add_pre(&sata_isr_task, sata_isr_lgc_exec, cTASK_IDLE).
上面这步是注册任务到sata_isr_task链表节点上。
sata_isr_lgc_exec()接口中主要是判断哪个中断发生了,然后执行中断处理函数。
中断包括:bSATA_INTSTS_COMRESET
bSATA_INTSTS_RFIS
bSATA_INTSTS_SWRESET
bSATA_INTSTS_RFIS_CRCERR
bSATA_INTSTS_COMWAKE
bSATA_INTSTS_PHYUP
bSATA_INTSTS_PHYDN
。。。。。。等等
3.主函数中有个循环主要处理task链表的事件:
while (cnt < 8)
{
task_now = task_now->pnxt;
if (task_now->flag)
{
task_now->func();
break;
}
cnt++;
}
在这个循环中如果 sata_isr_task链表节点flag为真则开始执行sata_isr_lgc_exec(),在里面根据中断类型去执行中断处理函数。
main()--->sys_init()--->sata_init()--->sata_isr_init()--->sata_isr_lgc_exec()
2.在sata_isr_lgc_exec()接口中:task_add_pre(&sata_isr_task, sata_isr_lgc_exec, cTASK_IDLE).
上面这步是注册任务到sata_isr_task链表节点上。
sata_isr_lgc_exec()接口中主要是判断哪个中断发生了,然后执行中断处理函数。
中断包括:bSATA_INTSTS_COMRESET
bSATA_INTSTS_RFIS
bSATA_INTSTS_SWRESET
bSATA_INTSTS_RFIS_CRCERR
bSATA_INTSTS_COMWAKE
bSATA_INTSTS_PHYUP
bSATA_INTSTS_PHYDN
。。。。。。等等
3.主函数中有个循环主要处理task链表的事件:
while (cnt < 8)
{
task_now = task_now->pnxt;
if (task_now->flag)
{
task_now->func();
break;
}
cnt++;
}
在这个循环中如果 sata_isr_task链表节点flag为真则开始执行sata_isr_lgc_exec(),在里面根据中断类型去执行中断处理函数。
相关文章推荐
- SATA中断处理(crst/xrst/rfis/phyup...)
- SATA中断处理(crst/xrst/rfis/phyup...)
- SATA中断处理(crst/xrst/rfis/phyup...)
- SATA中断处理(crst/xrst/rfis/phyup...)
- SATA中断处理(crst/xrst/rfis/phyup...)
- SATA中断处理(crst/xrst/rfis/phyup...)
- SATA中断处理(crst/xrst/rfis/phyup...)
- SATA中断处理(crst/xrst/rfis/phyup...)
- SATA中断处理(crst/xrst/rfis/phyup...)
- SATA中断处理(crst/xrst/rfis/phyup...)
- SATA中断处理(crst/xrst/rfis/phyup...)
- SATA中断处理(crst/xrst/rfis/phyup...)
- SATA中断处理(crst/xrst/rfis/phyup...)
- SATA中断处理(crst/xrst/rfis/phyup...)
- SATA中断处理(crst/xrst/rfis/phyup...)
- 中断处理函数用spinlock注意点
- 模块化编程时中断函数的处理
- 中断和中断处理程序
- s3c2410 中断异常处理
- Linux系统编程——进程间通信:信号中断处理