亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? hcandrv.c51

?? example of using Infineon 81c91 processor.
?? C51
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
#pragma large
#pragma debug
#pragma registerbank(3)
#pragma pagelength(80) pagewidth(110)
/***********************************************************************
************************************************************************
*                                                                      *
*  C A N   D R I V E R                                                 *
*                                                                      *
************************************************************************
************************************************************************
*                                                                      *
*  Funktion:                                                           *
*                                                                      *
*     Diese Modul enth刲t den eigentlichen CAN-Task. Der CAN-Task      *
*     乥ernimmt die gesammte Steuerung der CAN-Treiber Software.       *
*     Er reagiert auf Befehle von der Applikation (Signal und Daten    *
*     vom Modul CANAPIF) und auf Interrupts vom CAN-Controller.        *
*     Gestartet wird der CAN-Task vom Modul CANAPIF.                   *
*                                                                      *
*                                                                      *
*  Filename           :   HCANDRV.C51                                  *
*                                                                      *
*  Modulename         :   HCANDRV                                      *
*                                                                      *
*  Zielsystem         :   Jedes 8051 System mit einem Siemens          *
*                         81C91 CAN-Controller                         *
*                                                                      *
*  Entwicklungssystem :   Keil C-51                                    *
*                                                                      *
************************************************************************
*  Versionen:                                                          *
*                                                                      *
*  0.1  26.10.1990  Th. Fischler : Erste Version                       *
*  1.0   7.12.1990  Th. Fischler : Bus-off Handling eingebaut          *
*        21.1.1991  Th. Fischler : Send-Error Verhalten eingebaut      *
*        14.1.1991  Th. Fischler : Full-CAN eingebaut                  *
*        20.8.1991  Th. Fischler : Beim Basic-CAN wird der Error-INT   *
*                                  nicht mehr benutzt                  *
*  2.0  10.10.1991  Th. Fischler : Version f乺 RTX-51 V4.0             *
*  2.1  24.8.1992   Th. Fischler : Workaround f乺 Signal Mehrfach-     *
*                                  verwendungsproblem                  *
*  2.2  21.03.1996   K. Birsen   : nur f乺 81C91 implementiert.        *
*                                                                      *
*                                                                      *
************************************************************************
*    Copyright 1991 .. 2001 METTLER  &  FUCHS  AG,  CH-8953 Dietikon   *
************************************************************************/

/*---------------------------------------------------------------------*
 *     D E F I N I T I O N E N                                         *
 *---------------------------------------------------------------------*/

#include "abbrev.h"
#include "candefs.h"

/* Befehle von der Applikation */
#define CAN_HW_INIT_ORDER       1
#define CAN_DEF_OBJ_ORDER       2
#define CAN_STOP_ORDER          3
#define CAN_START_ORDER         4
#define CAN_SEND_ORDER          5
#define CAN_REQUEST_ORDER       6
#define CAN_BIND_OBJ_ORDER      7
#define CAN_UNBIND_OBJ_ORDER    8
#define CAN_WRITE_ORDER         9 
#define CAN_READ_W_IND_ORDER    10
#define CAN_READ_W_TID_ORDER    11
#define CAN_READ_ORDER          12
#define CAN_GET_STATUS_ORDER    13
#define CAN_ACTIVATE_WAIT       14   /* Spezial-Funktion zum Anzeigen,      */
                                     /* das ein Task auf ein Objekt wartet  */


/* Function-Prototypes */
static void c_handle_receive_int (void);
static void c_handle_can_int (void);
static void c_get_back (byte ret_val);
static void c_handle_appli_signal (void);


/*---------------------------------------------------------------------*
 *     I M P O R T S                                                   *
 *---------------------------------------------------------------------*/


/* Verwendeter CAN-Interrupt (definiert in XCANCONF.A51) */
extern const unsigned char code CAN_INT_NBR;

/* RTX-51 Function-Calls */
#include <rtx51.h>
#include "hcanobja.h"
#include "hcancont.h"


/*---------------------------------------------------------------------*
 *     M O D U L G L O B A L E  V A R I A B L E N                      *
 *---------------------------------------------------------------------*/

   /* Die Applikation erteilt dem CAN-Task 乥er den gemeinsamen        */
   /* Speicherbereich C_ORDER_BUF Befehle. Ueber diesen gemeinsamen    */
   /* Speicherbereich gibt der CAN-Driver ebenfalls Status-Meldungen   */
   /* an die Applikation zur乧k.                                       */
   /* Der C_ORDER_BUF ist im Modul CANAPIF.A51 definiert.              */
   /* Die hier definierte Struktur wird an die selbe Speicherstelle    */
   /* gelegt.                                                          */
   /* ACHTUNG !! : Diese Struktur darf nicht einfach abge刵dert werden */
   /* sie muss mit der Definition im Modul CANAPIF.A51 乥ereinstimmen  */

   /* K. Birsen um c_define_obj_ext zu realisieren                     */
   /* c_order_buf.param hier und CANAPIF.A51 vom 5 auf 6 erh攈t        */

    extern xdata struct {
                   byte order;
                   byte task_id;
                   byte param[6];
                } c_order_buf;

   /* Ist TRUE falls der CAN-Task gestoppt ist (keine Objekte senden   */
   /* oder empfangen kann) und FALSE falls der CAN-Task l剈ft.         */
   static byte can_stopped;

   /* Workaround Signal-Problem                                        */
   /* Enth刲t die identifikation aller Tasks an die ein Objekt         */
   /* gebunden ist und an die tats刢hlich mit CAN_WAIT auf das Objekt  */
   /* warten                                                           */
   static struct {
               byte task_id;
               byte task_waits;
            } signal_ok[MAX_BIND_OBJ];


#pragma eject
/*---------------------------------------------------------------------*
 *     L O K A L E   P R O Z E D U R E N                               *
 *---------------------------------------------------------------------*/

/*---------------------------------------------------------------------*
 *     C _ H A N D L E _ R E C E I V E _ I N T
 *---------------------------------------------------------------------*
 *  Funktion:
 *
 *     Steuert den Empfang eines Objektes nach einem Receive-Interrupt
 *
 *---------------------------------------------------------------------*
 *  Parameter:
 *
 *     --
 *
 *---------------------------------------------------------------------*/

static void c_handle_receive_int (void)
{
   unsigned int stat;
   byte         index, bind, i;

   stat = c_receive_obj ();
   if (stat <= 255) {
      /* Applikation muss benachrichtigt werden */
      index = stat;
      /* testen ob das empfangene Objekt an einen Task gebunden ist */
      bind = c_get_bind (index);
      if (bind != NO_BIND) {
         /* Objekt ist an einen Task gebunden */
         /* Testen ob Task bereit ist */
         for (i=0; i<=MAX_BIND_OBJ-1; i++) {
            if ((signal_ok[i].task_id == bind)
            && (signal_ok[i].task_waits == TRUE)) {
               os_send_signal (bind);
               return;
            }
         }
      }
      else {
         /* Objekt an keinen Task gebunden, an Mailbox senden          */
         /* Die Applikation liest danach mit dem Index die Objektdaten */
         if (os_send_message (7,index,0) == -1) {
            /* Objekt kann von der Applikation nicht empfangen werden */
            c_set_read (index);
         }
      }
   }
   else {
      ;
      /* Ein Objekt wurde empfangen, die Applikation muss aber nicht */
      /* benachrichtigt werden.                                      */
      /* Dieser Fall wurde nur f乺 interne Testzwecke eingef乬t      */
   }
}




/*---------------------------------------------------------------------*
 *     C _ H A N D L E _ C A N _ I N T
 *---------------------------------------------------------------------*
 *  Funktion:
 *
 *     Abhandlung der Aktionen die beim Auftreten eines CAN-Interrupts
 *     ausgef乭rt werden m乻sen.
 *
 *---------------------------------------------------------------------*
 *  Parameter:
 *
 *     --
 *
 *---------------------------------------------------------------------*/

static void c_handle_can_int (void)
{
   /* Die Informationsdarstellung ist beim Basic- und Full-CAN        */
   /* Controller nach einem Interrupt sehr unterschiedlich.           */
   /* Daher wird die Auswertung der Interrupt-Informationen f乺       */
   /* die beiden Controller getrennt implementiert                    */


     enum interrupt_t int_t;        /* 81C91 Interrupt Typen */

     int_t = c_get_int_typ();
     if (int_t == obj_int) {
        c_handle_receive_int();
        /* Der Interrupt wird von der Empfangsroutine zur乧kgesetzt */
     }
     else if (int_t == error_int) {
        /* Das Status-Register muss ausgewertet werden       */
        /* Es k攏nen mehrere Fehler gleichzeitig auftreten */
        if (c_get_status() == bus_off) {
           /* Applikation mit Index 0 benachrichtigen */
           os_send_message (7,0,0);
        }
        /* Error-Interrupt zur乧ksetzen */
        c_receipt_error_int();
     }
     else if (int_t == no_int) {
        /* Der Controller zeigt keinen Interrupt an       */
        /* Sollte eigentlich nicht vorkommen              */
        /* Wird jedoch aus Sicherheitsgr乶den abgefangen  */
        c_receipt_error_int(); /* Interrupt zur乧ksetzen */
     }

}

#pragma eject
/*---------------------------------------------------------------------*
 *     C _ G E T _ B A C K
 *---------------------------------------------------------------------*
 *  Funktion:
 *
 *     R乧kgabe des Statuswert RET_VAL an die Applikation, starten
 *     der Applikation mit einem Signal
 *
 *---------------------------------------------------------------------*
 *  Parameter:
 *
 *     ret_val  :  Wert der an die Applikation zur乧kgegeben werden soll
 *
 *---------------------------------------------------------------------*/

static void c_get_back (byte ret_val)
{
   c_order_buf.param[0] = ret_val;
   os_send_signal (c_order_buf.task_id);
}




/*---------------------------------------------------------------------*
 *     C _ H A N D L E _ A P P L I _ S I G N A L
 *---------------------------------------------------------------------*
 *  Funktion:
 *     Ausf乭rung aller Applikationsbefehle
 *
 *---------------------------------------------------------------------*
 *  Parameter:
 *
 *     --
 *
 *---------------------------------------------------------------------*/

static void c_handle_appli_signal (void)
{

   byte temp, temp2;
   byte done, i;
   /* Hilfsvariable zum separaten ansprechen von Bytes               */
   /* in einem Word oder doubel Word                                 */
   union {
      unsigned int tw;
      byte tb[2];
   } qq;
   /* Union um den den Pointer als einzelne Bytes ansprechen zu k攏nen   */
   union {
      struct
      {  byte offs[2];
      } short_ptr;
      unsigned int xdata *i_ptr;
      byte xdata *c_ptr;
   } po;

   unsigned int w_temp;

   switch (c_order_buf.order) {

      case CAN_HW_INIT_ORDER:
         c_stop ();
         can_stopped = TRUE;
         done = c_hw_init ( c_order_buf.param[0],    /* bit_length_1_reg */
                            c_order_buf.param[1],    /* bit_length_2_reg */
                            c_order_buf.param[2],    /* output_control_reg */
                            c_order_buf.param[3]);   /* sleep_and_br_prescale */

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99精品国产麻豆不卡| 91国产福利在线| 亚洲三级小视频| 日韩美女视频在线| 91色在线porny| 极品少妇xxxx精品少妇偷拍| 亚洲啪啪综合av一区二区三区| 日韩欧美国产综合| 欧美在线你懂的| 国产成人综合亚洲网站| 日韩激情视频在线观看| 亚洲视频一区二区在线观看| 精品国内二区三区| 欧美日韩国产首页在线观看| av在线播放不卡| 国内偷窥港台综合视频在线播放| 亚洲精品欧美综合四区| 国产色婷婷亚洲99精品小说| 欧美理论在线播放| 91福利视频网站| 成人丝袜视频网| 国产一区二区三区高清播放| 舔着乳尖日韩一区| 一区二区高清免费观看影视大全| 国产亚洲成年网址在线观看| 欧美一卡2卡三卡4卡5免费| 色猫猫国产区一区二在线视频| 国产99久久久国产精品潘金网站| 蜜臂av日日欢夜夜爽一区| 亚洲国产日韩精品| 一区二区久久久| 亚洲激情图片qvod| 亚洲视频在线一区| 激情综合网最新| 久久草av在线| 午夜精品久久久久久久| 亚洲国产婷婷综合在线精品| 亚洲精品日日夜夜| 亚洲女性喷水在线观看一区| 国产精品传媒在线| 国产精品久久久久久亚洲伦| 久久精品在这里| 久久精品男人的天堂| 久久久久久久久久久99999| 欧美成人性战久久| 26uuu亚洲| 久久久久久久综合狠狠综合| 精品欧美一区二区久久| 精品国产伦一区二区三区观看方式| 欧美一级高清大全免费观看| 日韩一二三区视频| 日韩精品专区在线影院重磅| 日韩一卡二卡三卡| 精品成人一区二区| 久久精品人人爽人人爽| 中文字幕不卡三区| 亚洲欧美自拍偷拍| 亚洲一区二区免费视频| 午夜激情一区二区三区| 丝袜亚洲另类欧美综合| 免费看欧美美女黄的网站| 久久丁香综合五月国产三级网站| 日本一不卡视频| 国内精品自线一区二区三区视频| 国产九色sp调教91| 99国产精品国产精品毛片| 久久久久88色偷偷免费| 欧美激情在线看| 一区二区三区中文字幕| 丝瓜av网站精品一区二区| 久久av老司机精品网站导航| 国产激情精品久久久第一区二区 | 麻豆成人av在线| 国产曰批免费观看久久久| 成人精品一区二区三区中文字幕| 97se亚洲国产综合自在线不卡| 欧美日韩免费观看一区二区三区| 日韩一区二区三区视频在线观看| 久久免费美女视频| 一区二区三区国产豹纹内裤在线| 男男gaygay亚洲| 成人激情午夜影院| 欧美日韩不卡在线| 精品99一区二区三区| 成人欧美一区二区三区1314| 午夜不卡av在线| 丁香天五香天堂综合| 欧美午夜电影一区| 国产欧美一区二区三区网站| 亚洲国产你懂的| 国产剧情一区在线| 欧美日韩一区二区电影| 国产午夜亚洲精品午夜鲁丝片 | 亚洲天堂精品在线观看| 日韩成人av影视| av不卡在线观看| 欧美一级xxx| 亚洲欧美日韩小说| 九九九精品视频| 欧美日韩一区二区欧美激情| 日本一区二区视频在线| 日韩影视精彩在线| 成人av电影免费在线播放| 欧美一级搡bbbb搡bbbb| 亚洲日本在线a| 国产精品一品二品| 欧美一区二区视频免费观看| 亚洲色图另类专区| 国产精品亚洲专一区二区三区| 欧美视频你懂的| 中文字幕一区二区不卡| 国产乱码精品一区二区三区五月婷| 在线看不卡av| 国产精品国产三级国产三级人妇| 久久99久久久欧美国产| 欧美日韩在线综合| 亚洲精选视频在线| 不卡av免费在线观看| 欧美精品一区二区高清在线观看 | 久久精品夜色噜噜亚洲aⅴ| 午夜久久久久久久久久一区二区| 99精品视频在线播放观看| 久久久久久久网| 老司机精品视频在线| 欧美人妇做爰xxxⅹ性高电影| 最新不卡av在线| 成人黄色小视频| 久久精品欧美日韩| 国产精品中文有码| 精品久久一二三区| 另类小说图片综合网| 日韩无一区二区| 日本欧美一区二区| 亚洲欧美另类图片小说| a在线欧美一区| 国产精品久久久久国产精品日日| 国产成人综合亚洲网站| 国产亚洲精品久| 国产精品99久久不卡二区| 国产亚洲欧美日韩俺去了| 国精产品一区一区三区mba视频 | 日韩三级在线观看| 日韩精品亚洲专区| 在线播放亚洲一区| 日本不卡中文字幕| 日韩欧美另类在线| 国内一区二区视频| 国产欧美日韩综合| av在线不卡网| 亚洲精品v日韩精品| 欧美视频一区在线| 日本sm残虐另类| 欧美本精品男人aⅴ天堂| 国产资源在线一区| 国产嫩草影院久久久久| 99久久精品国产导航| 亚洲摸摸操操av| 欧美日韩色综合| 日本欧美一区二区| 久久免费的精品国产v∧| 成人av电影在线观看| 亚洲精品视频在线| 欧美一区二区三区性视频| 奇米精品一区二区三区在线观看 | 日韩一区中文字幕| 欧美怡红院视频| 琪琪久久久久日韩精品| 26uuu亚洲综合色| www.亚洲免费av| 午夜精品久久久久久久99水蜜桃| 日韩欧美国产综合在线一区二区三区| 国产一区二区在线视频| 中文字幕在线观看不卡| 欧美色网站导航| 国产一区二三区好的| 亚洲欧洲av另类| 91精品国产乱| 成人av动漫网站| 日一区二区三区| 欧美国产欧美亚州国产日韩mv天天看完整| 色综合久久88色综合天天免费| 日韩专区在线视频| 国产精品久久久久aaaa| 欧美一区二区三区性视频| 成人免费视频视频| 婷婷久久综合九色综合绿巨人| 久久久久久久久岛国免费| 欧美吻胸吃奶大尺度电影| 国产成人精品综合在线观看| 亚洲一区精品在线| 国产嫩草影院久久久久| 欧美精品一级二级| 99热99精品| 日韩视频一区在线观看| 成+人+亚洲+综合天堂| 免费成人小视频| 一区二区三区视频在线看| 久久久久国产精品麻豆ai换脸| 欧美视频一区二区| 91一区二区三区在线观看|