Hi,
ich hatte hier Beitrag "sleep-modus fragen" schon
einmal eine frage gestellt, da ich aber ein zusätzliches problem
bekommen habe und ich das eh nachfragen wollte, habe ich ein neues Thema
eröffnet
zunächst mein Code
1 | ...
|
2 | unsigned char sleep = 0;
|
3 | int main (void) {
|
4 | ...
|
5 | ...
|
6 | while(1){
|
7 | if(sleep==1){
|
8 | }
|
9 | Sleep();
|
10 | sleep = 0;
|
11 | }
|
12 | ...
|
13 | ...
|
14 | return 0;
|
15 | }
|
16 |
|
17 | void __attribute__((interrupt, no_auto_psv)) _INT1Interrupt(void) {
|
18 | sleep = 1;
|
19 | IFS1bits.INT1IF = 0; // Clear INT1 interrupt flag
|
20 | }
|
21 |
|
22 |
|
23 | void __attribute__((interrupt, no_auto_psv)) _C2Interrupt(void) {
|
24 | if (C2INTFbits.RX0IF) {
|
25 | if(CAN2_Identifier == 0xFFF){ // sleep
|
26 | sleep = 1;
|
27 | }
|
28 | C2RX0CONbits.RXFUL = 0; // Clear the Buffer RXFUL to receive new messages
|
29 | C2INTFbits.RX0IF = 0; //If the Interrupt is due to Receive0 of CAN1 Clear the Interrupt
|
30 | }
|
31 | IFS2bits.C2IF = 0; //Clear interrupt flag
|
32 | }
|
Also, entweder ich drücke eine Taste, oder eine Nachricht mit dem
Identifier 0xFFF kommt herein, schicke ich meinen PIC (dspic30f6011a)
schlafen.
durch einer anderen Nachricht, oder anderen Tastendruck wecke ich den
wieder auf.
Nun zu meinem Problem.
Wenn ich die Taste erneut drücke, geht der pic wieder schlafen. Bei
einer neuen NAchricht aber ncicht. Die Nachricht kommt herein und sleep
wird gleich 1 gesetzt. Somit geht der Controller auch in die Abfrage, ob
sleep=1 ist, führt den Befehl Sleep(); aber nicht erneut aus.
kurz gesagt, mit der Taste kann ich den pic so oft ich möchte schlafen
legen, mit der can-nachricht aber nur einmal.
hat dazu jemand einen rat, wieso das so ist? im späteren Betrieb
kommuniziere ich nur noch über can und komme an der Taste nicht mehr
heran.
Johannes