⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 initcan.asm

📁 TI microprocessor, most about CAN2.0 development
💻 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 + -