📄 initcan.asm
字号:
;----------------------------------------------------------------------
; Baud rate=Iclk/(BRP+1)xBitTime
; BitTime=(TSEG1+1)+(TSEG2+1)+1
; Iclk=16M, baud rate=250kbps =16M /(3+1)x16
; SPLK #0000010101000101b,CANBCR1 ; bit 0-2 TSEG2=5; bit 3-6 TSEG1=8
; Iclk=12M, baud rate=250kbps =12M /(3+1)x12
; SPLK #0000010100101100b,CANBCR1 ; bit 0-2 TSEG2=4; bit 3-6 TSEG1=5
;----------------------------------------------------------------------
;CAN Bit Timing Configuration
; -> Set the Change Configuration bit
;-------------------------------------------------------------
SetCan:
LDP #0E2h ; CAN register data pointer
SPLK #0001010000000000b,CANMCR
; bit 12 Change configuration request
; -> Check that the change configuration enable bit is set
W_CCE BIT CANGSR,#0Bh ; Wait for Change configuration enable
BCND W_CCE,NTC
; -> Change the bit configuration
SPLK #0000000000000011b,CANBCR2
; bit 0-7 Baud rate prescaler
; BRP=3
; SPLK #0000010100101100b,CANBCR1 ; 12M
SPLK #0000010101000101b,CANBCR1 ; 16M
; bit 0-2 TSEG2=5
; bit 3-6 TSEG1=8
; bit 7 Sample point setting (1: 3 times, 0: once)
; SAM=0
; bit 8-9 Synchronization Jump Width
; SJW=1
; bit A Synchronization on both edges
; SBG=1
; bit B 0: Synchronization on falling edge
; bit C-F Reserved
SPLK #0010000000000000b,CANMCR ; -> back to normal mode
; -> Check that the change configuration enable bit is reset
W_NCCE BIT CANGSR,#0Bh ; Wait for Change configuration disable
BCND W_NCCE,TC
LDP #0E2h ;CAN register data pointer
SPLK #1000000000011111b,CANLAM1H ;Set local acceptance
;mask for mailboxes 2 & 3
SPLK #1111111111111111b,CANLAM1L ;1:don't care
; Write Can send Mailboxes
LDP #0
LACC CanId,5
AND #1FE0H
OR #0100000000000011b ;Set the message identifier ID1=CanId(high 8 bits)
; FEDCBA9876543210
;bit 0-12 Upper 13 bits of extended identifier
;bit 13 Auto answer mode bit
;bit 14 Acceptance mask enable bit 1: Acceptance Mask Enable
;bit 15 Identifier extension bit 0:11bits 1:29bits
LDP #CANMSGID2H>>7 ;CAN RAM data pointer
SACL CANMSGID2H
LDP #CANIMR >>7
SPLK #0000010000000000B,CANIMR ;Enable MIM2,MailBox2 enable (Receive enable)
call CanNormal ; set can normal mode
ret
;-----------------------------------------------------------------------------
; Initialize CAN RAM prepare for send
; Configure CAN before writing in RAM:
; -> Disable the mailboxes
; -> Set CDR (Change Data field Request) bit
; F243内存单元300-304存放要发送的长度及数据
; 300:发送的id
; 301:发送的length
; 302-305:发送数据
; CanId为ID
;-----------------------------------------------------------------------------
SendCanMessage:
LDP #CANMDER>>7 ;CAN register data pointer
SPLK #0000000000000000b,CANMDER ;Mailbox Direction /Enable Register
; FEDCBA9876543210
; bit 0-5 disable mailboxes
SPLK #0000000100000000b,CANMCR ;Master Control Reg.
; bit 8 CDR: Change data field request
LAR AR0,#300h
MAR *,AR0
LACL *+
LDP #CANMSGID3H>>7
SACL CANMSGID3H ;300h send ID
SPLK #1111111111111111b,CANMSGID3L
;bit 0-15 Lower part of extended identifier
LACL *+
SACL CANMSGCTRL3 ;Set control field ;301h send length
;bit 3-0: Data length code: 1000 = 8 bytes
;bit 4 : 0->data frame 1->remote frame
LACL *+
SACL CANMBX3A ;302h Message to transmit
LACL *+
SACL CANMBX3B ;303h
LACL *+
SACL CANMBX3C ;304h
LACL *+
SACL CANMBX3D ;305h
call CanNormal
call SendCan
RET
;-------------------------------------------------------------------------------------
;Configure Normal Mode
; Back to normal mode:
;-------------------------------------------------------------------------------------
CanNormal
LDP #0E2h ;CAN register data pointer
SPLK #0010010000000000b,CANMCR ;Master Control Reg.
;FEDCBA9876543210
; Normal mode
; Enable/disable mailboxes and set mailboxes directions:
SPLK #0000000001001100b,CANMDER ;Mailbox Direction/Enable Register
;FEDCBA9876543210
; bit 0 disable mailbox 0
; bit 1 disable mailbox 1
; bit 2 enable mailbox 2
; bit 3 enable mailbox 3
; bit 4 disable mailbox 4
; bit 5 disable mailbox 5
; bit 6 1: mailbox 2 receive
; bit 7 0: mailbox 3 transmit
ret
;-------------------------------------------------------------------------------------
;Transmit a message to the bus
; Use mailbox 3 to transmit a message. Mailbox 3 has already been enabled and
; configured as a transmit mailbox
;-------------------------------------------------------------------------------------
SendCan
LDP #0
LACL SendFlag ;ff55:Send ffaa:ret
BCND NoSendCan,EQ
LDP #0E2h ;CAN registers data pointer
SPLK #0020h,CANTCR ;Transmit request for mailbox 3
W_TA BIT CANTCR,2 ;Wait for transmission acknowledge
BCND W_TA,NTC
W_FLAG3 BIT CANIFR,4 ;Wait for interrupt flag
;BCND W_FLAG3,NTC
SPLK #2000h,CANTCR ;Reset TA and CANIFR
NoSendCan:
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -