I made my last post at 1:23am, it's now 5:11am and I've been up for 20 minutes getting ready for work. My math tells me that's about 3.5 hours or so.....
Yes, I see I forgot to attach my code. I knew I forgot something! I also attached the Microchip C code as well.
Code:============================================================================== ' DEFINES & INCLUDES '=============================================================================== INCLUDE "modedefs.bas" ' DEFINE OSC 20 ' ============================================================================== ' CONFIGS '=============================================================================== @ __CONFIG _CONFIG1L, _PLLDIV_5_1L & _CPUDIV_OSC1_PLL2_1L & _USBDIV_2_1L @ __CONFIG _CONFIG1H, _FOSC_HSPLL_HS_1H & _FCMEN_OFF_1H & _IESO_OFF_1H @ __CONFIG _CONFIG2L, _PWRT_OFF_2L & _BOR_OFF_2L & _BORV_3_2L & _VREGEN_ON_2L @ __CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_32768_2H @ __CONFIG _CONFIG3H, _CCP2MX_ON_3H & _PBADEN_OFF_3H & _LPT1OSC_OFF_3H & _MCLRE_ON_3H @ __CONFIG _CONFIG4L, _STVREN_ON_4L & _LVP_OFF_4L & _ICPRT_ON_4L & _XINST_OFF_4L '============================================================================== ' SETTINGS ' ============================================================================== '76543210 '76543210 TRISA = %00010110: PORTA = %00000000 TRISB = %00010001: PORTB = %00010000 TRISC = %00000000: PORTC = %00000001 TRISD = %00011100: PORTD = %00000000 TRISE = %00010000: PORTE = %00010111 ADCON0 = %00111100 ADCON1 = 15 ADRESH = %00000000 ADRESL = %00000000 CMCON = 7 SSPSTAT = %01100100 SSPCON1 = %00100001 BAUDCON = %00001111 '=============================================================================== ' Register Mapping '================================================================================ CANSTAT CON $0E CANCTRL CON $0F BFPCTRL CON $0C TEC CON $1C REC CON $1D CNF3 CON $28 CNF2 CON $29 CNF1 CON $2A CANINTE CON $2B CANINTF CON $2C EFLG CON $2D TXRTSCTRL CON $0D '' Recieve Filters '' RXF0SIDH CON $00 RXF0SIDL CON $01 RXF0EID8 CON $02 RXF0EID0 CON $03 RXF1SIDH CON $04 RXF1SIDL CON $05 RXF1EID8 CON $06 RXF1EID0 CON $07 RXF2SIDH CON $08 RXF2SIDL CON $09 RXF2EID8 CON $0A RXF2EID0 CON $0B RXF3SIDH CON $10 RXF3SIDL CON $11 RXF3EID8 CON $12 RXF3EID0 CON $13 RXF4SIDH CON $14 RXF4SIDL CON $15 RXF4EID8 CON $16 RXF4EID0 CON $17 RXF5SIDH CON $18 RXF5SIDL CON $19 RXF5EID8 CON $1A RXF5EID0 CON $1B '' Receive Masks '' RXM0SIDH CON $20 RXM0SIDL CON $21 RXM0EID8 CON $22 RXM0EID0 CON $23 RXM1SIDH CON $24 RXM1SIDL CON $25 RXM1EID8 CON $26 RXM1EID0 CON $27 '' Tx Buffer 0 '' TXB0CTRL CON $30 TXB0SIDH CON $31 TXB0SIDL CON $32 TXB0EID8 CON $33 TXB0EID0 CON $34 TXB0DLC CON $35 TXB0D0 CON $36 TXB0D1 CON $37 TXB0D2 CON $38 TXB0D3 CON $39 TXB0D4 CON $3A TXB0D5 CON $3B TXB0D6 CON $3C TXB0D7 CON $3D '' Tx Buffer 1 '' TXB1CTRL CON $40 TXB1SIDH CON $41 TXB1SIDL CON $42 TXB1EID8 CON $43 TXB1EID0 CON $44 TXB1DLC CON $45 TXB1D0 CON $46 TXB1D1 CON $47 TXB1D2 CON $48 TXB1D3 CON $49 TXB1D4 CON $4A TXB1D5 CON $4B TXB1D6 CON $4C TXB1D7 CON $4D '' Tx Buffer 2 '' TXB2CTRL CON $50 TXB2SIDH CON $51 TXB2SIDL CON $52 TXB2EID8 CON $53 TXB2EID0 CON $54 TXB2DLC CON $55 TXB2D0 CON $56 TXB2D1 CON $57 TXB2D2 CON $58 TXB2D3 CON $59 TXB2D4 CON $5A TXB2D5 CON $5B TXB2D6 CON $5C TXB2D7 CON $5D '' Rx Buffer 0 '' RXB0CTRL CON $60 RXB0SIDH CON $61 RXB0SIDL CON $62 RXB0EID8 CON $63 RXB0EID0 CON $64 RXB0DLC CON $65 RXB0D0 CON $66 RXB0D1 CON $67 RXB0D2 CON $68 RXB0D3 CON $69 RXB0D4 CON $6A RXB0D5 CON $6B RXB0D6 CON $6C RXB0D7 CON $6D '' Rx Buffer 1 '' RXB1CTRL CON $70 RXB1SIDH CON $71 RXB1SIDL CON $72 RXB1EID8 CON $73 RXB1EID0 CON $74 RXB1DLC CON $75 RXB1D0 CON $76 RXB1D1 CON $77 RXB1D2 CON $78 RXB1D3 CON $79 RXB1D4 CON $7A RXB1D5 CON $7B RXB1D6 CON $7C RXB1D7 CON $7D '=============================================================================== ' Register Bit Masks '=============================================================================== DLC_0 CON $00 DLC_1 CON $01 DLC_2 CON $02 DLC_3 CON $03 DLC_4 CON $04 DLC_5 CON $05 DLC_6 CON $06 DLC_7 CON $07 DLC_8 CON $08 '=============================================================================== ' ' CAN SPI commands '=============================================================================== ' CAN_RST CON $C0 ' CAN_READ $03 MCPWRT CON $02 ' CAN_RTS $80 ' CAN_RTS_TXB0 $81 ' CAN_RTS_TXB1 $82 ' CAN_RTS_TXB2 $84 ' CAN_RD_STATUS $A0 ' CAN_BIT_MODIFY $05 ' CAN_RX_STATUS $B0 ' CAN_RD_RX_BUFF $90 ' CAN_LOAD_TX $40 '=============================================================================== ' ALIAS & MODIFIERS '============================================================================== CS VAR PORTB.4 ' CS LINE SCLK VAR PORTB.1 ' CLOCK LINE SDI VAR PORTB.0 ' DATA INPUT LINE SDO VAR PORTC.7 ' DATA OUTPUT LINE SENDLED VAR PORTA.5 ' LED TO INDICATE THE PROGRAM IS IN THE SENDING ROUTINE MAINLED VAR PORTE.2 ' LED TO INDICATE THE PROGRAM IS IN THE MAIN ROUTINE INT VAR PORTB.5 ' INTERRUPT OUTPUT FROM 18F4550 MCPRST VAR PORTC.0 ' RESET LINE FOR MCP2515 SW_LOAD VAR PORTA.4 ' BUTTON CONNECTED TO 18F4550 TO START SENDING DATA (WHEN IMPLEMENTED) RX_LED VAR PORTD.1 ' USB RECEIVE LED TX_LED VAR PORTD.0 ' USB TRANSMIT LED '=============================================================================== ' SOFTWARE VARIABLES '=============================================================================== DATAOUT VAR BYTE 'FIRST BYTE OF DATA TO BE SENT MCPREG VAR BYTE 'ADDRESS OF FIRST BYTE OF DATA TO BE SENT TX_LED=1 RX_LED=1 '============================================================================== ' RESET CAN '============================================================================== '============================================================================== ' RESET CAN '============================================================================== '============================================================================== ' INITIALIZE MCP2515 '============================================================================== LOW CS SSPBUF = MCPRST ' COMMAND TO RESET THE MCP2515 PIR1.3 = 0 WHILE PIR1.3=0 :WEND HIGH CS PAUSE 1000 LOW CS SSPBUF = mcpwrt ' COMMAND TO WRITE TO THE MCP2515 PIR1.3 = 0 WHILE PIR1.3=0 :WEND MCPREG = CANCTRL 'PUT THE MCP2515 INTO CONFIGURATON MODE DATAOUT = $08 GOSUB SEND_CAN_DATA SSPBUF = cnf3 ' CNF3 REGISTER PIR1.3 = 0 WHILE PIR1.3=0 :WEND SSPBUF = $07 ' PART OF BAUD RATE PIR1.3 = 0 WHILE PIR1.3=0 :WEND SSPBUF = $BA ' PART OF BAUD RATE PIR1.3 = 0 WHILE PIR1.3=0 :WEND SSPBUF = $03 ' PART OF BAUDRATE PIR1.3 = 0 WHILE PIR1.3=0 :WEND MCPREG = CANCTRL 'PUT THE MCP2515 BACK INTO NORMAL MODE DATAOUT = $0 GOSUB SEND_CAN_DATA high cs '============================================================================== ' MAIN PROGRAM FOR MCP2515 '============================================================================== START: HIGH SENDLED PAUSE 4000 LOW CS SSPBUF = mcpwrt ' COMMAND TO WRITE TO THE MCP2515 PIR1.3 = 0 WHILE PIR1.3=0 :WEND MCPREG = CANINTE ' DISABLE ALL INTERRUPTS DATAOUT = %00000000 GOSUB SEND_CAN_DATA high cs ' ON THE MICROCHIP EXAMPLE, THEY PULLED THE CS LINE LOW, SENT ' SOME DATA, THEN HIGH AND LOW AGAIN TO RESEND MORE DATA. I ' I STILL CAN'T FIGURE OUT WHY. IT'S PROBABLY SOMETHING ' SIMPLE I AM MISSING BUT I TRIED TO DUPLICATE IT. LOW CS SSPBUF = mcpwrt ' COMMAND TO WRITE TO THE MCP2515 PIR1.3 = 0 WHILE PIR1.3=0 :WEND MCPREG = TXB0CTRL ' FLAG THE TRANSMIT BUFFER - - 11=HIGH, 10=MEDIUM, 01=LOW, 00=LOWEST DATAOUT = %00001011 GOSUB SEND_CAN_DATA MCPREG = TXB0SIDL ' TRANSMIT BUFFER 0 FOR SIDH DATAOUT = %0000000 GOSUB SEND_CAN_DATA MCPREG = TXB0SIDH ' TRANSMIT BUFFER 0 FOR SIDH DATAOUT = %00001000 GOSUB SEND_CAN_DATA MCPREG = TXB0DLC ' NUMBER OF BYTES TO BE TRANSMITTED IN CAN FRAME DATAOUT = %00000001 GOSUB SEND_CAN_DATA MCPREG = TXB0D0 ' DATA PACKET FOR BYTE 1 DATAOUT = %00000111 GOSUB SEND_CAN_DATA 'MCPREG = TXB0D1 'DATA PACKET FOR BYTE 2 'DATAOUT = %00001111 'GOSUB SEND_CAN_DATA HIGH CS LOW sendled pause 4000 goto START '=============================================================================== ' SEND CAN DATA SECTION '=============================================================================== SEND_CAN_DATA: SSPBUF = MCPREG ' ADDRESS TO LOAD THE DATA TO THE MCP2515 PIR1.3 = 0 WHILE PIR1.3=0 : WEND SSPBUF = DATAOUT 'DATA BEING LOADED TO THE MCP2515 ON MCPREG PIR1.3 = 0 WHILE PIR1.3=0 : WEND RETURNCode:/********************************************************************* * * Microchip USB C18 Firmware Version 1.0 * ********************************************************************* * FileName: main.c * Dependencies: See INCLUDES section below * Processor: PIC18 * Compiler: C18 2.30.01+ * Company: Microchip Technology, Inc. * * Software License Agreement * * The software supplied herewith by Microchip Technology Incorporated * (the “Company”) for its PICmicro® Microcontroller is intended and * supplied to you, the Company’s customer, for use solely and * exclusively on Microchip PICmicro Microcontroller products. The * software is owned by the Company and/or its supplier, and is * protected under applicable copyright laws. All rights are reserved. * Any use in violation of the foregoing restrictions may subject the * user to criminal sanctions under applicable laws, as well as to * civil liability for the breach of the terms and conditions of this * license. * * THIS SOFTWARE IS PROVIDED IN AN “AS IS” CONDITION. NO WARRANTIES, * WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED * TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, * IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. * * Author Date Comment *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Rawin Rojvanit 11/19/04 Original. ********************************************************************/ #pragma config PLLDIV = 5 // (20 MHz crystal on PICDEM FS USB board) #pragma config CPUDIV = OSC1_PLL2 #pragma config USBDIV = 2 // Clock source from 96MHz PLL/2 #pragma config FOSC = HSPLL_HS #pragma config FCMEN = OFF #pragma config IESO = OFF #pragma config PWRT = OFF #pragma config BOR = OFF #pragma config BORV = 3 #pragma config VREGEN = ON //USB Voltage Regulator #pragma config WDT = OFF #pragma config WDTPS = 32768 #pragma config MCLRE = ON #pragma config LPT1OSC = OFF #pragma config PBADEN = OFF #pragma config CCP2MX = ON #pragma config STVREN = ON #pragma config LVP = OFF #pragma config ICPRT = ON // Dedicated In-Circuit Debug/Programming #pragma config XINST = OFF // Extended Instruction Set #pragma config CP0 = OFF #pragma config CP1 = OFF #pragma config CP2 = OFF #pragma config CP3 = OFF #pragma config CPB = OFF #pragma config CPD = OFF #pragma config WRT0 = OFF #pragma config WRT1 = OFF #pragma config WRT2 = OFF #pragma config WRT3 = OFF #pragma config WRTB = OFF // Boot Block Write Protection #pragma config WRTC = OFF #pragma config WRTD = OFF #pragma config EBTR0 = OFF #pragma config EBTR1 = OFF #pragma config EBTR2 = OFF #pragma config EBTR3 = OFF #pragma config EBTRB = OFF /** I N C L U D E S **********************************************************/ #include <p18cxxx.h> #include "system\typedefs.h" // Required #include "system\usb\usb.h" // Required #include "io_cfg.h" // Required #include "system\usb\usb_compile_time_validation.h" // Optional #include "user\BusMon.h" // Modifiable /** V A R I A B L E S ********************************************************/ #pragma udata /** P R I V A T E P R O T O T Y P E S ***************************************/ static void InitializeSystem(void); void USBTasks(void); /** V E C T O R R E M A P P I N G *******************************************/ /* extern void _startup (void); // See c018i.c in your C18 compiler dir #pragma code _RESET_INTERRUPT_VECTOR = 0x002000 void _reset (void) { _asm goto _startup _endasm } */ //#pragma code _HIGH_INTERRUPT_VECTOR = 0x002008 //void _high_ISR (void) //{ // ; //} // //#pragma code LOW_INTERRUPT_VECTOR = 0x002018 //void _low_ISR (void) //{ // _asm // goto InterruptHandler // _endasm //} #pragma code /****************************************************************************** * Function: void main(void) * * PreCondition: None * * Input: None * * Output: None * * Side Effects: None * * Overview: Main program entry point. * * Note: None *****************************************************************************/ void main(void) { InitializeSystem(); UserInit(); // See BusMon.c & .h while(1) { if(usb_power_check) //Only do USB USB if not powered by CAN connector USBTasks(); // USB Tasks // INTCONbits.GIE = 1; ProcessIO(); // See user\BusMon.c & .h } }//end main /****************************************************************************** * Function: static void InitializeSystem(void) * * PreCondition: None * * Input: None * * Output: None * * Side Effects: None * * Overview: InitializeSystem is a centralize initialization routine. * All required USB initialization routines are called from * here. * * User application initialization routine should also be * called from here. * * Note: None *****************************************************************************/ static void InitializeSystem(void) { ADCON1 |= 0x0F; // Default all pins to digital #if defined(USE_USB_BUS_SENSE_IO) tris_usb_bus_sense = INPUT_PIN; // See io_cfg.h #endif #if defined(USE_SELF_POWER_SENSE_IO) tris_self_power = INPUT_PIN; #endif if(usb_power_check) //Only initialize USB if not powered by CAN connector mInitializeUSBDriver(); // See usbdrv.h }//end InitializeSystem /****************************************************************************** * Function: void USBTasks(void) * * PreCondition: InitializeSystem has been called. * * Input: None * * Output: None * * Side Effects: None * * Overview: Service loop for USB tasks. * * Note: None *****************************************************************************/ void USBTasks(void) { /* * Servicing Hardware */ USBCheckBusStatus(); // Must use polling method if(UCFGbits.UTEYE!=1) USBDriverService(); // Interrupt or polling method }// end USBTasks ////***************************************************************************** //// High priority interrupt vector //#pragma code InterruptVectorHigh = 0x08 //void InterruptVectorHigh(void) //{ //_asm //bra InterruptHandler // jump to interrupt routine //_endasm //} //#pragma code InterruptVectorHigh = 0x08 //void InterruptVectorLow(void) //{ //_asm //bra InterruptHandler // jump to interrupt routine //_endasm //} // // //#pragma code //#pragma interrupt InterruptHandler //void InterruptHandler(void) //{ //} /** EOF main.c ***************************************************************/




Bookmarks