Ich würde sagen, dass du das entsprechende Interrupt-Flag löschen und
den PIE-Ack durchführen musst und zwar am Anfang der SCI-ISR und nicht
erst am Ende.
Also ungefähr so:
1 | interrupt void sciaRxFifoIsr(void)
|
2 | {
|
3 | Uint16 i;
|
4 | Uint16 l_dummy[16];
|
5 |
|
6 | SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1; // Clear Overflow flag
|
7 | SciaRegs.SCIFFRX.bit.RXFFINTCLR=1; // Clear Interrupt flag
|
8 | PieCtrlRegs.PIEACK.all|=0x100; // Issue PIE ack
|
9 | /* ist 0x100 hier wirklich richtig? (siehe unten) */
|
10 |
|
11 | for(i=0;i<16;i++)
|
12 | {
|
13 | l_dummy[i]=SciaRegs.SCIRXBUF.all; // Read data
|
14 | }
|
15 |
|
16 | for(;;){}
|
17 | }
|
Übrigens:
<zitat spru712f, Seite 124>
Rule 1: Never clear a PIEIFR bit by software
</zitat>
<zitat spru712f, Seite 140>
Each bit in PIEACK refers to a specific PIE group. Bit 0 refers to
interrupts in PIE group 1 that are MUXed into INT1 up to Bit 11, which
refers to PIE group 12 that is MUXed into CPU INT12.
</zitat>