Jump to content
    

MCP2515

Помогите проверить контроллер, плз. Нужен рабочий код инициализации + пример передачи в канал.

Share this post


Link to post
Share on other sites

Ну, если устроит пример на ассемблере 8051 (а точнее, AT89S8252) ;)

Старый и корявый, но рабочий.

 

 

 

CANINTF      equ        2Ch
EFLG         equ        2Dh
TXB0CTRL     equ        30h
TXB1CTRL     equ        40h
TXB2CTRL     equ        50h

CAN_BUF_B3      EQU     69H
TXB0D3          EQU     39H
TXB0D4          EQU     3AH


Can_Init:
       CLR     EA
       MOV     SPCR,#01010001B ;MASTER CPOL=0,CPHA=1
       mov     R0,#9
       mov     R3,#0
       mov     R2,#255
       clr     McpCS  ; select
       mov     A,#11000000b
       call    SendToSpi
       setb    McpCS

Next_SPI_Command:
       clr     McpCS
       mov     A,#00000010b
       call    SendToSpi
       mov     dptr,#McpDataPlace
       inc     R2
       mov     A,R2
       movc    A,@A+dptr
       mov     R3,A
Next_To_Spi:
       inc     R2
       mov     A,R2
       mov     dptr,#McpDataPlace
       movc    A,@A+dptr
       call    SendToSpi
       djnz    R3,Next_To_Spi
       setb    McpCS
       djnz    R0,Next_SPI_Command
       MOV     SPCR,#01110101B ;MASTER CPOL=0,CPHA=1
       SETB    EA
       ret

McpDataPlace:  db  5,0,60h,08h,00h,0Bh
              db  5,32,0FFH,0FFH,0FFH,0FFH
              db  14,49,67H,88H,04H,00H,8,0F0H,0FEH,7DH,0,0,0FFH,0FFH,0FFH
              db  14,65,67H,88H,03H,00H,8,0F1H,0,0,0FFH,0FFH,0FFH,0FFH,0FFH              
              db  14,81,0C7H,88H,00H,29H,8,40H,7DH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
              db  4,40,3,161,1
              db  2,96,64
              db  2,43,1
              db  2,15,0

;db  14,65,0C7H,0EAH,0DFH,00H,8,80H,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
;db  14,81,0C7H,0EAH,0F6H,00H,8,0FFH,50,92,0FFH,0FFH,0FFH,0FFH,0FFH     
;db  14,49,67H,88H,03H,00H,8,0F1H,0,0,0FFH,0FFH,0FFH,0FFH,0FFH  

ReadFromMcp:
       SETB    FL_SPI_BUSY
       MOV     SPCR,#01010001B ;MASTER CPOL=0,CPHA=1
       clr     McpCS
       mov     A,#00000011b
       call    SendToSpi
       mov     A,R2
       call    SendToSpi
       mov     A,#255
       call    SendToSpi
       setb    McpCS
       MOV     SPCR,#01110101B ;MASTER CPOL=0,CPHA=1
       JMP     CLR_FL_SPI

Clear_Can_F:
       mov     R2,#CANINTF
       mov     B,#0
       call    WriteToMcp
       ret

WriteToMcp:
       SETB    FL_SPI_BUSY
       MOV     SPCR,#01010001B ;MASTER CPOL=0,CPHA=1
       clr McpCS
       mov A,#00000010b
       call SendToSpi
       mov A,R2
       call SendToSpi
       mov A,B
       call SendToSpi
       setb McpCS
       MOV     SPCR,#01110101B ;MASTER CPOL=0,CPHA=1
       JMP     CLR_FL_SPI ;

SendToSpi:
       mov     spsr,#0;
       mov     spdr,A
WaitForSpi:
       mov A,spsr
       jnb Acc.7,WaitForSpi
       mov     A,spdr
       ret

;----------------
;собственно работа с данными
ASR_CAN:
       mov     R2,#CANINTF
       CALL    ReadFromMcp
       JNB     ACC.0,ASR_CAN_1
;пришел кадр
       MOV     R2,#CAN_BUF_B3
       CALL    ReadFromMcp
       CALL    Clear_Can_F                     
ASR_CAN_1:
       MOV     A,CEWA12
       ANL     A,#00000011B
       CJNE    A,#0,ASR_CAN_3

       MOV     R2,#TXB0D4
       MOV     R1,#BASE_TAXO+3
       MOV     B,@R1 ;TAXO
       CALL    WriteToMcp
       MOV     R2,#TXB0D3
       MOV     B,#0
       CALL    WriteToMcp

       MOV     R2,#TXB0CTRL
       MOV     B,#00001011B    ;запрос на передачу
       CALL    WriteToMcp
       RET
ASR_CAN_3:
       CJNE    A,#1,ASR_CAN_4
       MOV     R2,#TXB1CTRL
       MOV     B,#00001011B    ;запрос на передачу
       CALL    WriteToMcp
       RET
ASR_CAN_4:      
       CJNE    A,#2,ASR_CAN_2
       MOV     R2,#TXB2CTRL
       MOV     B,#00001011B    ;запрос на передачу
       CALL    WriteToMcp

ASR_CAN_2:      RET     

CLR_FL_SPI:
  ; дальнейшая обработка SPI, не касающаяся MCP

MCP_INIT_DATA.doc

Edited by Juray

Share this post


Link to post
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...