summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--components/drivers/pic/pic.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/components/drivers/pic/pic.c b/components/drivers/pic/pic.c
index 4525c7d49e..75f629f974 100644
--- a/components/drivers/pic/pic.c
+++ b/components/drivers/pic/pic.c
@@ -177,15 +177,24 @@ static void config_pirq(struct rt_pic *pic, struct rt_pic_irq *pirq, int irq, in
{
rt_ubase_t level = rt_spin_lock_irqsave(&pirq->rw_lock);
+ if (pirq->irq < 0)
+ {
+ rt_list_init(&pirq->list);
+ rt_list_init(&pirq->children_nodes);
+ rt_list_init(&pirq->isr.list);
+ }
+ else if (pirq->pic != pic)
+ {
+ RT_ASSERT(rt_list_isempty(&pirq->list) == RT_TRUE);
+ RT_ASSERT(rt_list_isempty(&pirq->children_nodes) == RT_TRUE);
+ RT_ASSERT(rt_list_isempty(&pirq->isr.list) == RT_TRUE);
+ }
+
pirq->irq = irq;
pirq->hwirq = hwirq;
pirq->pic = pic;
- rt_list_init(&pirq->list);
- rt_list_init(&pirq->children_nodes);
- rt_list_init(&pirq->isr.list);
-
rt_spin_unlock_irqrestore(&pirq->rw_lock, level);
}