Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: MCP2515
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Controller Area Network (CAN)
semonoff
Помогите проверить контроллер, плз. Нужен рабочий код инициализации + пример передачи в канал.
Juray
Ну, если устроит пример на ассемблере 8051 (а точнее, AT89S8252) wink.gif
Старый и корявый, но рабочий.



CODE

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
semonoff
СПС, дружище. rolleyes.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.