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

📄 hcanapif.a51

📁 example of using Infineon 81c91 processor.
💻 A51
字号:
$NOXREF
$SYMBOLS
$DEBUG
$NORB
$NOGEN
$PAGELENGTH(80) PAGEWIDTH(110)
;************************************************************************
;************************************************************************
;*                                                                      *
;*  C A N   A P P L I C A T I O N   I N T E R F A C E                   *
;*                                                                      *
;************************************************************************
;************************************************************************
;*                                                                      *
;*  Funktion:                                                           *
;*                                                                      *
;*     Diese Modul bildet die registerbankunabh刵gige Schnittstelle     *
;*     zwischen der Applikation und dem CAN-Treiber.                    *
;*     Im Prinzip implementiert dieses Modul einen Echtzeit-Monitor     *
;*     zur Sicherstellung, dass immer nur ein Applikationstask den      *
;*     CAN-Treiber zur gleichen Zeit benutzen kann.                     *
;*     Ein Teil dieses Moduls ist reentrant implementiert, so dass      *
;*     mehrere Tasks quasi gleichzeitig versuchen k攏nen eine           *
;*     CAN-Funktion aufzurufen.                                         *
;*                                                                      *
;*     Der Hauptzweck dieses moduls ist die Entlastung des              *
;*     Applikationsprogrammierers von Echtzeitproblemen.                *
;*                                                                      *
;*     Das Modul erwartet von der Applikation eine Parameter乥ergabe    *
;*     nach C-51 Konventionen.                                          *
;*                                                                      *
;*     Aus Uebersichtlichkeitsgr乶den ist das Modul auf mehrere         *
;*     Include-Files aufgeteilt                                         *
;*                                                                      *
;*                                                                      *
;*     Eine Detailbeschreibung zu diesem Modul findet sich im Dokument  *
;*     ===============================================================  *
;*     SW-Design Basic-CAN  (BCANDES.WPD)                               *
;*     ==================================                               *
;*                                                                      *
;*                                                                      *
;*  Filename           :   HCANAPIF.A51                                 *
;*                                                                      *
;*  Modulname          :   HCANAPIF                                     *
;*                                                                      *
;*  Zielsystem         :   Jedes 8051 System mit einem Siemens          *
;*                         81C91 CAN-Controller                         *
;*                                                                      *
;*  Entwicklungssystem :   Keil ASM-51                                  *
;*                                                                      *
;************************************************************************
;*  Versionen:                                                          *
;*                                                                      *
;*  0.1   31.10.1990   Th. Fischler: - Erste Version                    *
;*  1.0    6.12.1990   Th. Fischler: - CAN_TASK_START wird zu           *
;*                                     CAN_TASK_CREATE                  *
;*                                   - Neue Funktion CAN_GET_STATUS     *
;*  2.0   10.10.1991   Th. Fischler: - Anpassung an RTX-51 V4.0         *
;*  2.1   21.03.1996   K. Birsen:    - ORDER_BUF_PARAM vom 5 auf 6      *
;*                                     erh攈t                           *
;************************************************************************
;*    Copyright 1991 .. 2001 METTLER  &  FUCHS  AG,  CH-8953 Dietikon   *
;************************************************************************

        NAME HCANAPIF


;------------------------------------------------------------------------
;       I M P O R T S
;------------------------------------------------------------------------


; RTX-51 V4.0 System-Calls
EXTRN CODE (_os_wait, _os_clear_signal, _os_send_signal, _os_create_task)
EXTRN CODE (os_running_task_id)

EXTRN CODE (can_can_task_main)       ; Dummy include, nur vorhanden, um
                                     ; den BL51 zum Einbinden des
                                     ; CAN-Task zu zwingen.


$EJECT
;------------------------------------------------------------------------
;       E X P O R T S
;------------------------------------------------------------------------

; XDATA-Variablen
PUBLIC  C_ORDER_BUF

; Prozeduren + Parameter
PUBLIC can_task_create
PUBLIC _can_hw_init, ?_can_hw_init?BYTE
PUBLIC _can_def_obj
PUBLIC can_stop, can_start
PUBLIC _can_send
PUBLIC _can_write
PUBLIC _can_receive
PUBLIC _can_bind_obj
PUBLIC _can_unbind_obj
PUBLIC _can_wait
PUBLIC _can_request
PUBLIC _can_read
PUBLIC can_get_status



$EJECT
;------------------------------------------------------------------------
;       D E F I N I T I O N E N
;------------------------------------------------------------------------

; M A C R O S
$INCLUDE(CANAPIF.MAC)


; CAN Funktionsreturn-Werte
$INCLUDE(CANCONST.DCL)


TRUE                    EQU 1
FALSE                   EQU 0

; RTX-51 V4.0 Event-Selectoren
K_MBX                   EQU 10H
K_INT                   EQU 20H
K_SIG                   EQU 40H
K_TMO                   EQU 80H

; RTX-51 Wait-Returnwerte
MSG_EVENT               EQU 1
INT_EVENT               EQU 2
SIG_EVENT               EQU 3
TMO_EVENT               EQU 4

; Befehle an den CAN-Task
CAN_HW_INIT_ORDER       EQU 1
CAN_DEF_OBJ_ORDER       EQU 2
CAN_STOP_ORDER          EQU 3
CAN_START_ORDER         EQU 4
CAN_SEND_ORDER          EQU 5
CAN_REQUEST_ORDER       EQU 6
CAN_BIND_OBJ_ORDER      EQU 7
CAN_UNBIND_OBJ_ORDER    EQU 8
CAN_WRITE_ORDER         EQU 9 
CAN_READ_W_IND_ORDER    EQU 10
CAN_READ_W_TID_ORDER    EQU 11
CAN_READ_ORDER          EQU 12
CAN_GET_STATUS_ORDER    EQU 13
CAN_ACTIVATE_WAIT_ORDER EQU 14

; Tasknummer des CAN-Task
C_DRIVER_ID             EQU 0                   ; muss gleich der in CANDRV
                                                ; verwendeten Nummer sein !


;------------------------------------------------------------------------
;       G L O B A L E   X D A T A  -  V A R I A B L E N
;------------------------------------------------------------------------

?XD?HCANAPIF            SEGMENT XDATA INPAGE
                       RSEG ?XD?HCANAPIF

; Die Applikation erteilt dem CAN-Driver 乥er den gemeinsamen Speicher-
; bereich C_ORDER_BUF Befehle. Ueber diesen gemeinsamen Speicherbereich
; gibt der CAN-Driver ebenfalls Status-Meldungen an die Applikation
; zur乧k.
; Das Modul CANDRV importiert diese Variable
; Die Definitionen sollen der folgenden Hochsprachen-Struktur
; entsprechen :
; C_ORDER_BUF :  RECORD
;                    ORDER        : BYTE;    (* Befehl von der Applikation an CAN *)
;                    TASK_ID      : BYTE;    (* ID der Applikation *)
;                    PARAM        : ARRAY [0..5] OF BYTE; (* Datenfeld *)
;                END;
;
; VORSICHT !! : Die Reihenfolge und Gr攕se der einzelnen Elemente darf nicht
;               ge刵dert werden (C-Code des CAN-Task nimmt diese Reihenfolge
;               an)

C_ORDER_BUF:
C_ORDER_BUF_ORDER:      DS 1
C_ORDER_BUF_ID:         DS 1
C_ORDER_BUF_PARAM:      DS 6


; Falls ein Task den CAN-Treiber benutzen m攃hte, er aber bereits besetzt
; ist (C_DRIVER_IN_USE = TRUE), muss der aufrufende Task seine Parameter
; abspeichern bevor er sich schlafenlegt. Dazu kann er sich einen
; unbenutzten Bereich in C_TEMP_BUF suchen und seine Task-ID und die
; Parameter darin abspeichern.
; Jeder Task der den CAN-Treiber verl剆st, untersucht den C_TEMP_BUF
; ob ein Task aufgeweckt werden soll.
;
; Die Definitionen sollen der folgenden Hochsprachen-Struktur
; entsprechen :
; C_TEMP_BUF : ARRAY [0..2] OF RECORD
;                 OCCUPIED : BOOLEAN;
;                 TASK_ID  : BYTE;
;                 DATA     : ARRAY [0..5] OF BYTE;
;              END;

C_TEMP_BUF_0_OCC:       DS 1
C_TEMP_BUF_0_ID:        DS 1
C_TEMP_BUF_0_DATA:      DS 6

C_TEMP_BUF_1_OCC:       DS 1
C_TEMP_BUF_1_ID:        DS 1
C_TEMP_BUF_1_DATA:      DS 6

C_TEMP_BUF_2_OCC:       DS 1
C_TEMP_BUF_2_ID:        DS 1
C_TEMP_BUF_2_DATA:      DS 6



;------------------------------------------------------------------------
;       G L O B A L E   B I T  -  V A R I A B L E N
;------------------------------------------------------------------------

?BI?HCANAPIF            SEGMENT BIT
                       RSEG ?BI?HCANAPIF

; Da die CAN-Treiber Funktionen nicht reentrant sind, darf immer nur ein
; Task die Funktionen des CAN-Treibers benutzen. Die Schnittstelle muss
; dieses Verhalten sicherstellen.
; Dazu wird das Flag C_DRIVER_IN_USE definiert. Jeder aufrufende Task
; testet mit diesem Flag ob er den CAN-Treiber benutzen darf. Falls der
; CAN-Treiber besetzt ist, legt sich der aufrufende Task schlafen und wird
; danach vom Task der den CAN-Treiber verl剆st wieder aufgeweckt.
;
; C_DRIVER_IN_USE = 1 --> CAN-Treiber besetzt
; C_DRIVER_IN_USE = 0 --> CAN-Treiber frei

C_DRIVER_IN_USE:        DBIT 1




$EJECT
;------------------------------------------------------------------------
;       L O K A L E   P R O Z E D U R E N
;------------------------------------------------------------------------

$INCLUDE(HCANAP_1.INC)


$EJECT
;------------------------------------------------------------------------
;       G L O B A L E   P R O Z E D U R E N
;------------------------------------------------------------------------

$INCLUDE(HCANAP_2.INC)



                END
;------------------------------------------------------------------------
;       END OF MODULE HCANAPIF
;------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -