17.01.2015 Views

QDK PIC24/dsPIC-XC16 - Quantum Leaps

QDK PIC24/dsPIC-XC16 - Quantum Leaps

QDK PIC24/dsPIC-XC16 - Quantum Leaps

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>QDK</strong><br />

<strong>PIC24</strong>/<strong>dsPIC</strong>-<strong>XC16</strong><br />

www.state-machine.com/pic<br />

1.4 About the QP Port to <strong>PIC24</strong>/<strong>dsPIC</strong><br />

Figure 4 shows the architecture of the QP port to <strong>PIC24</strong>/<strong>dsPIC</strong>. The port takes advantage of the<br />

<strong>PIC24</strong>/<strong>dsPIC</strong> interrupt priority level (IPL) management hardware. In both cooperative and preemptive QP<br />

ports the hardware priority levels are allocated as follows:<br />

1. All QP tasks (active objects) as well as the QP idle loop execute at the lowest IPL of zero.<br />

2. IPL levels 1 through 6 are used for maskable interrupts. These maskable interrupts (IPL 1..6) can call<br />

QP services, such as QF_tick(), QActive_postFIFO(), QF_publish(), and Q_NEW(). The<br />

maskable interrupts can nest on each other, which is the default in <strong>PIC24</strong>/<strong>dsPIC</strong>.<br />

3. This QP port never disables the IPL level 7, which is the Non-Maskable Interrupt (NMI) level. The<br />

NMI-level interrupt(s) cannot call any QP services. But the NMI can trigger a maskable interrupt, as<br />

shown by the dashed arrow in Figure 4. This triggered interrupt of IPL 1..6 can call QP services for<br />

signaling the QP tasks (active objects).<br />

Figure 4: Architecture of the <strong>PIC24</strong>/<strong>dsPIC</strong> port<br />

(IPL = 7) Non-Maskable Interrupt (NMI)<br />

IPL Level 7<br />

(NMI level)<br />

(IPL = 6) User interrupt<br />

(IPL = 5) User interrupt<br />

(IPL = 4) User interrupt<br />

IPL Levels 1-6<br />

(interrupt level)<br />

(IPL = 3) User interrupt<br />

(IPL = 2) User interrupt<br />

(IPL = 1) User interrupt<br />

(QP prio = n) User task (active object)<br />

(QP prio = n-1) User task (active object)<br />

. . .<br />

(QP prio = 2) User task (active object)<br />

IPL Level 0<br />

(task level)<br />

(QP prio = 1) User task (active object)<br />

(QP prio = 0) Idle task<br />

This layered software architecture fits very naturally with the <strong>PIC24</strong>/<strong>dsPIC</strong> hardware. The QP ports (both<br />

cooperative and preemptive) allow nesting of interrupts, which is the default in <strong>PIC24</strong>/<strong>dsPIC</strong>. Both<br />

cooperative and preemptive QP ports can work with the interrupt service routines (ISRs) generated by the<br />

Copyright © <strong>Quantum</strong> <strong>Leaps</strong>, LLC. All Rights Reserved.<br />

4 of 35

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!