Warum wird die Adresse durch 8 geteilt?
Wenn so die Werte für die ISR-Funktionen "void ISR(void) interrupt 16"
berechnet werden, gibt es lt. Datenblatt vom C509 keinen Interrupt 15.
Der nächste untendrunter ist 13 für external Interrupt 6, und da ist der
Pin 6 des C509 für zuständig (P1.3, CC3, INT6). Grade mal wieder den
Code durchgekramt und festgestellt, daß nur am IEN2 Register
rumgeschraubt wird (ES1 wird auf 1 gestzt). An IEN1 wird nix gemacht,
also Default-Wert = 0 = externer Int. 6 aus. Bleibt nur noch CC3. Dies
hängt mit CC0 bis CC3 unter einer Decke und kann mit CCEN abgeschaltet
werden, bzw. aktiviert werden. Default-Wert auch hier wieder 0, also
alle CC[0..3] aus.
Da nur die Interrupts 1, 3, 4 und 16 verwendet werden, müßte ich, um die
Sache einfach mal abzukürzen, für die Interrupts 5 bis 15, eine ISR
bauen, die dann jeweils eine LED setzt, vorzugsweise in jeder ISR eine
andere, und dann die Endlosschleife. Das wären dann die Interrupts 5, 8,
9, 10, 11, 12 und 13, danach kommt schon 16 für UART1.
Wird denn vom Keil-C kein direkter Rücksprung für nicht definierte ISR's
eingebaut, also so Teile wie
1 | void ISR5(void) interrupt 5
|
2 | {}
|
3 | void ISR8(void) interrupt 8
|
4 | {}
|
5 | void ISR9(void) interrupt 9
|
6 | {}
|
7 | usw.
|
oder ähnliche Funktionskonstrukte? Oder gibt es eine Funktion, in die
alle ungenutzten Interrupts quasi vereint, wie es beim avr-gcc geht?
1 | void unusedISRs(void) interrupt all_unused
|
2 | {
|
3 | // insert your code here
|
4 | }
|