SATA中断处理(crst/xrst/rfis/phyup...)
2018-02-09 10:05
169 查看
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...)
- 中断子系统(6)中断嵌套的处理
- Realview MDK中编译器对中断处理的过程详解
- 处理不可中断的阻塞(java并发编程第7章)
- Linux的时间与时钟中断处理
- 关于J2ME的中断事件处理