Subversion Repositories HomeAutomation

Rev

Rev 26 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 26 Rev 48
Line 116... Line 116...
116
*   Affects: interrupt registers and receive data buffers
116
*   Affects: interrupt registers and receive data buffers
117
*   Depends: ..
117
*   Depends: ..
118
*/
118
*/
119
void canISR()
119
void canISR()
120
{
120
{
-
 
121
   
-
 
122
 
121
    if (PIR3bits.RXBnIF || PIR3bits.RXB1IF || PIR3bits.RXB0IF)
123
    if (PIR3bits.RXBnIF || PIR3bits.RXB1IF || PIR3bits.RXB0IF)
122
    {
124
    {
123
 
-
 
124
        // Get which buffer that is ful.
125
        // Get which buffer that is ful.
125
             if (RXB0CONbits.RXFUL) { ECANCON=(ECANCON&0b00000)|0b10000; canGetPacket(); }
126
             if (RXB0CONbits.RXFUL) { ECANCON=(ECANCON&0b00000)|0b10000; canGetPacket(); }
126
        else if (RXB1CONbits.RXFUL) { ECANCON=(ECANCON&0b00000)|0b10001; canGetPacket(); }
127
        else if (RXB1CONbits.RXFUL) { ECANCON=(ECANCON&0b00000)|0b10001; canGetPacket(); }
127
        else if (B0CONbits.RXFUL)   { ECANCON=(ECANCON&0b00000)|0b10010; canGetPacket(); }
128
        else if (B0CONbits.RXFUL)   { ECANCON=(ECANCON&0b00000)|0b10010; canGetPacket(); }
128
        else if (B1CONbits.RXFUL)   { ECANCON=(ECANCON&0b00000)|0b10011; canGetPacket(); }
129
        else if (B1CONbits.RXFUL)   { ECANCON=(ECANCON&0b00000)|0b10011; canGetPacket(); }
Line 133... Line 134...
133
   
134
   
134
        if (PIR3bits.RXBnIF) {PIR3bits.RXBnIF = 0;}
135
        if (PIR3bits.RXBnIF) {PIR3bits.RXBnIF = 0;}
135
        if (PIR3bits.RXB1IF) {PIR3bits.RXB1IF = 0;}
136
        if (PIR3bits.RXB1IF) {PIR3bits.RXB1IF = 0;}
136
        if (PIR3bits.RXB0IF) {PIR3bits.RXB0IF = 0;}
137
        if (PIR3bits.RXB0IF) {PIR3bits.RXB0IF = 0;}
137
   
138
   
138
    }
139
    }
139
}
140
}
140
 
141
 
141
 
142
 
142
/*
143
/*
143
*   Function: canGetPacket
144
*   Function: canGetPacket
144
*
145
*
145
*   Input:  none
146
*   Input:  none
146
*   Output: none
147
*   Output: none
Line 170... Line 171...
170
            //RXB0EIDH 15 14 13 12 11 10 09 08
171
            //RXB0EIDH 15 14 13 12 11 10 09 08
171
            //RXB0EIDL 07 06 05 04 03 02 01 00
172
            //RXB0EIDL 07 06 05 04 03 02 01 00
172
 
173
 
173
 
174
 
174
            cm.ident = (((DWORD)RXB0SIDH)<<21) + (((DWORD)(RXB0SIDL & 0xE0))<<13) + (((DWORD)(RXB0SIDL & 0x03))<<16) + (((DWORD)RXB0EIDH)<<8) + (BYTE)RXB0EIDL;
175
            cm.ident = (((DWORD)RXB0SIDH)<<21) + (((DWORD)(RXB0SIDL & 0xE0))<<13) + (((DWORD)(RXB0SIDL & 0x03))<<16) + (((DWORD)RXB0EIDH)<<8) + (BYTE)RXB0EIDL;
175
 
176
 
176
        }
177
        }
177
        else
178
        else
178
        {
179
        {
179
            //Read standard ident.
180
            //Read standard ident.
180
 
181
 
181
            //xx xx xx xx xx 10 09 08   07 06 05 04 03 02 01 00
182
            //xx xx xx xx xx 10 09 08   07 06 05 04 03 02 01 00
182
 
183
 
183
            //RXB0SIDH 10 09 08 07 06 05 04 03
184
            //RXB0SIDH 10 09 08 07 06 05 04 03
184
            //RXB0SIDL 02 01 00 xx xx xx xx xx
185
            //RXB0SIDL 02 01 00 xx xx xx xx xx
185
 
186
 
186
            cm.ident = (((DWORD)RXB0SIDH)<<3) + (((DWORD)RXB0SIDL)>>5);
187
            cm.ident = (((DWORD)RXB0SIDH)<<3) + (((DWORD)RXB0SIDL)>>5);
187
        }
188
        }
188
 
189
 
189
        // Data length
190
        // Data length
190
        cm.data_length=RXB0DLC;
191
        cm.data_length=RXB0DLC;
191
 
192
 
192
        // Data one bye one, for speed
193
        // Data one bye one, for speed
193
        cm.data[0]=RXB0D0;  cm.data[1]=RXB0D1;
194
        cm.data[0]=RXB0D0;  cm.data[1]=RXB0D1;
194
        cm.data[2]=RXB0D2;  cm.data[3]=RXB0D3;
195
        cm.data[2]=RXB0D2;  cm.data[3]=RXB0D3;
195
        cm.data[4]=RXB0D4;  cm.data[5]=RXB0D5;
196
        cm.data[4]=RXB0D4;  cm.data[5]=RXB0D5;
196
        cm.data[6]=RXB0D6;  cm.data[7]=RXB0D7;
197
        cm.data[6]=RXB0D6;  cm.data[7]=RXB0D7;
197
 
198
 
198
        // Clear ful status
199
        // Clear ful status
199
        RXB0CONbits.RXFUL=0;
200
        RXB0CONbits.RXFUL=0;
200
 
201
 
201
        //Call main parser
202
        //Call main parser
202
        canParse(cm);
203
        canParse(cm);
203
}
204
}
204
 
205
 
205
 
206
 
206
/*
207
/*
207
*   Function: canSendMessage
208
*   Function: canSendMessage
208
*
209
*
209
*   Input:  CAN_MESSAGE to send
210
*   Input:  CAN_MESSAGE to send
210
*   Output: True if packet scheduled sucess, false otherwise.
211
*   Output: True if packet scheduled sucess, false otherwise.
211
*   Pre-conditions: canInit
212
*   Pre-conditions: canInit
212
*   Affects: ..
213
*   Affects: ..
213
*   Depends: ..
214
*   Depends: ..
214
*/
215
*/
215
BOOL canSendMessage(CAN_MESSAGE cm)
216
BOOL canSendMessage(CAN_MESSAGE cm)
216
{
217
{
-
 
218
   
217
    if ( TXB0CONbits.TXREQ == 0 )  { ECANCON=(ECANCON&0b00000)|0b00011; }
219
    if ( TXB0CONbits.TXREQ == 0 )  { ECANCON=(ECANCON&0b00000)|0b00011; }
218
    if ( TXB1CONbits.TXREQ == 0 )  { ECANCON=(ECANCON&0b00000)|0b00100; }
220
    if ( TXB1CONbits.TXREQ == 0 )  { ECANCON=(ECANCON&0b00000)|0b00100; }
219
    if ( TXB2CONbits.TXREQ == 0 )  { ECANCON=(ECANCON&0b00000)|0b00101; }
221
    if ( TXB2CONbits.TXREQ == 0 )  { ECANCON=(ECANCON&0b00000)|0b00101; }
220
    // None of the transmit buffers were empty. 
222
    // None of the transmit buffers were empty. 
221
    else { return FALSE;}
223
    else { return FALSE;}
Line 229... Line 231...
229
 
231
 
230
            //RXB0SIDH 28 27 26 25 24 23 22 21
232
            //RXB0SIDH 28 27 26 25 24 23 22 21
231
            //RXB0SIDL 20 19 18 xx xx xx 17 16
233
            //RXB0SIDL 20 19 18 xx xx xx 17 16
232
            //RXB0EIDH 15 14 13 12 11 10 09 08
234
            //RXB0EIDH 15 14 13 12 11 10 09 08
233
            //RXB0EIDL 07 06 05 04 03 02 01 00
235
            //RXB0EIDL 07 06 05 04 03 02 01 00
234
 
236
 
235
 
237
 
236
            RXB0SIDH =  (BYTE)((cm.ident>>21));
238
            RXB0SIDH =  (BYTE)((cm.ident>>21));
237
            RXB0SIDL = ((BYTE)(cm.ident>>16) & 0x03) + ((BYTE)(cm.ident>>13) & 0xE0);
239
            RXB0SIDL = ((BYTE)(cm.ident>>16) & 0x03) + ((BYTE)(cm.ident>>13) & 0xE0);
238
            RXB0EIDH =  (BYTE)(cm.ident>>8);
240
            RXB0EIDH =  (BYTE)(cm.ident>>8);
239
            RXB0EIDL =  (BYTE)cm.ident;
241
            RXB0EIDL =  (BYTE)cm.ident;
240
 
242
 
Line 268... Line 270...
268
 
270
 
269
        // mark as redy to transmit
271
        // mark as redy to transmit
270
        _asm
272
        _asm
271
            bsf RXB0CON, 3, 0
273
            bsf RXB0CON, 3, 0
272
        _endasm
274
        _endasm
273
 
-
 
274
 
275
 
275
        return TRUE;
276
        return TRUE;
276
 
277
 
277
}
278
}
278
 
279