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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sja1000.c

?? 含有完整TCP/IP PPP協議的嵌入式操作系統
?? C
?? 第 1 頁 / 共 2 頁
字號:
        SJA1000_BT0 = 73;        SJA1000_BT1 = 28;        break;    case CAN_SPEED_100K:        SJA1000_BT0 = 68;        SJA1000_BT1 = 28;        break;    case CAN_SPEED_125K:        SJA1000_BT0 = 67;        SJA1000_BT1 = 28;        break;    case CAN_SPEED_250K:        SJA1000_BT0 = 65;        SJA1000_BT1 = 28;        break;    case CAN_SPEED_500K:        SJA1000_BT0 = 64;        SJA1000_BT1 = 28;        break;    case CAN_SPEED_800K:        SJA1000_BT0 = 64;        SJA1000_BT1 = 22;        break;    case CAN_SPEED_1M:        SJA1000_BT0 = 64;        SJA1000_BT1 = 20;        break;    default:        result = 1;    }    do {        SJA1000_MODECTRL = 0x00;    }    while ((SJA1000_MODECTRL & RM_RR_Bit) != 0x00);     // leave reset state    return result;}/*! * \fn    SJATxFrame(CANFRAME * CAN_frame) * \brief Sends a CAN Frane * * * \param CAN_frame Pointer to the send frame */void SJATxFrame(CANFRAME * CAN_frame){    u_long temp_id;    temp_id = CAN_frame->id << 3;    if (CAN_frame->ext) {        SJA1000_TxFrameInfo = CAN_frame->len | CAN_29 | (CAN_frame->rtr ? CAN_RTR : 0);        SJA1000_Tx1 = (uint8_t) (temp_id >> 24);        // load High Byte        SJA1000_Tx2 = (uint8_t) (temp_id >> 16);        // load High Byte        SJA1000_Tx3 = (uint8_t) (temp_id >> 8); // load High Byte        SJA1000_Tx4 = (uint8_t) (temp_id & 0x00F8);     // Low Byte and ignore bit 0-2        SJA1000_Tx5 = CAN_frame->byte[0];        SJA1000_Tx6 = CAN_frame->byte[1];        SJA1000_Tx7 = CAN_frame->byte[2];        SJA1000_Tx8 = CAN_frame->byte[3];        SJA1000_Tx9 = CAN_frame->byte[4];        SJA1000_Tx10 = CAN_frame->byte[5];        SJA1000_Tx11 = CAN_frame->byte[6];        SJA1000_Tx12 = CAN_frame->byte[7];    } else {        SJA1000_TxFrameInfo = CAN_frame->len | (CAN_frame->rtr ? CAN_RTR : 0);        SJA1000_Tx1 = (uint8_t) ((CAN_frame->id) >> 24);        // load High Byte        SJA1000_Tx2 = (uint8_t) ((CAN_frame->id) >> 16) & 0xE0; // Low Byte and ignore bit 0-4        SJA1000_Tx3 = CAN_frame->byte[0];        SJA1000_Tx4 = CAN_frame->byte[1];        SJA1000_Tx5 = CAN_frame->byte[2];        SJA1000_Tx6 = CAN_frame->byte[3];        SJA1000_Tx7 = CAN_frame->byte[4];        SJA1000_Tx8 = CAN_frame->byte[5];        SJA1000_Tx9 = CAN_frame->byte[6];        SJA1000_Tx10 = CAN_frame->byte[7];    }    SJA1000_CMD = TR_Bit;     // Start Transmission}/*! * \fn    SJARxFrame(CANFRAME * CAN_frame) * \brief Receives a CAN Frane * * * \param CAN_frame Pointer to the receive frame */void SJARxFrame(CANFRAME * CAN_frame){    u_char FrameInfo = SJA1000_RxFrameInfo;    CAN_frame->len = FrameInfo & 0x0F;  // frame info mask off higher 4 bits    CAN_frame->ext = FrameInfo & CAN_29 ? 1 : 0;    CAN_frame->rtr = FrameInfo & CAN_RTR ? 1 : 0;    if (CAN_frame->ext) {        CAN_frame->id = (((uint32_t) SJA1000_Rx1 << 24) |                         ((uint32_t) SJA1000_Rx2 << 16) |                          ((uint32_t) SJA1000_Rx3 << 8)  |                          ((uint32_t) SJA1000_Rx4 & 0xF8)) >> 3;        CAN_frame->byte[0] = SJA1000_Rx5;        CAN_frame->byte[1] = SJA1000_Rx6;        CAN_frame->byte[2] = SJA1000_Rx7;        CAN_frame->byte[3] = SJA1000_Rx8;        CAN_frame->byte[4] = SJA1000_Rx9;        CAN_frame->byte[5] = SJA1000_Rx10;        CAN_frame->byte[6] = SJA1000_Rx11;        CAN_frame->byte[7] = SJA1000_Rx12;      // just fill the whole struct, less CPU cycles    } else {        CAN_frame->id = (((uint32_t) SJA1000_Rx1 << 24) |                           (uint32_t) SJA1000_Rx2 << 16) >> 3;   // id_h and id_l        CAN_frame->byte[0] = SJA1000_Rx3;        CAN_frame->byte[1] = SJA1000_Rx4;        CAN_frame->byte[2] = SJA1000_Rx5;        CAN_frame->byte[3] = SJA1000_Rx6;        CAN_frame->byte[4] = SJA1000_Rx7;        CAN_frame->byte[5] = SJA1000_Rx8;        CAN_frame->byte[6] = SJA1000_Rx9;        CAN_frame->byte[7] = SJA1000_Rx10;      // just fill the whole struct, less CPU cycles    }    SJA1000_CMD = RRB_Bit;      // release the receive buffer}/*!  * \fn CAN_Tx(void *arg) * \brief CAN transmitter thread. * *  * This thread transmits data if there's some in the output buffer. * It runs with high priority. */THREAD(CAN_Tx, arg){    NUTDEVICE *dev;    CANINFO *ci;    CANFRAME out_frame;    dev = arg;    ci = (CANINFO *) dev->dev_dcb;    NutThreadSetPriority(16);    while (1) {        NutEventWait(&ci->can_tx_rdy, NUT_WAIT_INFINITE);        while ((SJA1000_STATUS & TBS_Bit) == TBS_Bit)   // if transmit buffer released        {            out_frame = CANBufferGetMutex(&CAN_TX_BUF);            SJATxFrame(&out_frame);     // using SJA1000 TX buffer            ci->can_tx_frames++;        }    }}/*!  * \fn  SJAInterrupt (void * arg) * \brief SJA interrupt entry. *  * The interrupt handler posts events to the rx and tx thread wait queue. * receive interrupt will be disabled on reception and will be enabled by the * rx thread again. Otherwise interrupt would not stop (level triggered) */static void SJAInterrupt(void *arg){    CANINFO *ci;    volatile u_char irq = SJA1000_INT;    CANFRAME in_frame;        ci = (CANINFO *) (((NUTDEVICE *) arg)->dev_dcb);    ci->can_interrupts++;    if (((irq & TI_Bit) == TI_Bit))     // transmit IRQ fired    {        NutEventPostFromIrq(&ci->can_tx_rdy);    }    if ((irq & RI_Bit) == RI_Bit)       // Receive IRQ fired    {        if (CAN_RX_BUF.size-CAN_RX_BUF.datalength > 0)        {            SJARxFrame(&in_frame);            CANBufferPut(&CAN_RX_BUF, &in_frame);            if (CAN_RX_BUF.size==CAN_RX_BUF.datalength)                SJA1000_IEN &= (~RIE_Bit);      // Disable RX IRQ until data has been poped from input buffer            NutEventPostFromIrq(&ci->can_rx_rdy);            ci->can_rx_frames++;        }    }    if ((irq & EI_Bit) == EI_Bit)       //Error IRQ fired    {        ci->can_errors++;        // TODO: Handle error    } else if ((irq & DOI_Bit) == DOI_Bit)      //Error IRQ fired    {        ci->can_overruns++;        SJA1000_CMD = CDO_Bit;          // Clear DO status;        // TODO: Handle overrun    }}/*! * \fn    SJAInit(NUTDEVICE * dev) * \brief Initialize SJA1000 Canbus interface. * * * Applications typically do not use this function, but * call NutRegisterDevice(). * * \param dev Identifies the device to initialize. The *            structure must be properly set. */int SJAInit(NUTDEVICE * dev){    IFCAN *ifc;    CANINFO *ci;    volatile u_char temp;    sja_base = dev->dev_base;    ifc = dev->dev_icb;    memset(dev->dev_dcb, 0, sizeof(CANINFO));    ci = (CANINFO *) dev->dev_dcb;    CANBufferInit(&CAN_RX_BUF, CAN_BufSize);    CANBufferInit(&CAN_TX_BUF, CAN_BufSize);    while ((SJA1000_MODECTRL & RM_RR_Bit) == 0x00)      // entering reset mode        SJA1000_MODECTRL = (RM_RR_Bit | SJA1000_MODECTRL);    SJA1000_CLK_DIV = (CANMode_Bit | CBP_Bit | DivBy2 | ClkOff_Bit);    // sets clock divide register    SJA1000_IEN = (ClrIntEnSJA);        // Disables CAN IRQ    SJA1000_AC0 = ifc->can_acc_code[0];    SJA1000_AC1 = ifc->can_acc_code[1];    SJA1000_AC2 = ifc->can_acc_code[2];    SJA1000_AC3 = ifc->can_acc_code[3];    SJA1000_AM0 = ifc->can_acc_mask[0];    SJA1000_AM1 = ifc->can_acc_mask[1];    SJA1000_AM2 = ifc->can_acc_mask[2];    SJA1000_AM3 = ifc->can_acc_mask[3];    switch (ifc->can_baudrate)  // setting actual bustiming    {                           // all @ 16 Mhz    case CAN_SPEED_10K:        SJA1000_BT0 = 113;        SJA1000_BT1 = 28;        break;    case CAN_SPEED_20K:        SJA1000_BT0 = 88;        SJA1000_BT1 = 28;        break;    case CAN_SPEED_50K:        SJA1000_BT0 = 73;        SJA1000_BT1 = 28;        break;    case CAN_SPEED_100K:        SJA1000_BT0 = 68;        SJA1000_BT1 = 28;        break;    case CAN_SPEED_125K:        SJA1000_BT0 = 67;        SJA1000_BT1 = 28;        break;    case CAN_SPEED_250K:        SJA1000_BT0 = 65;        SJA1000_BT1 = 28;        break;    case CAN_SPEED_500K:        SJA1000_BT0 = 64;        SJA1000_BT1 = 28;        break;    case CAN_SPEED_800K:        SJA1000_BT0 = 64;        SJA1000_BT1 = 22;        break;    case CAN_SPEED_1M:        SJA1000_BT0 = 64;        SJA1000_BT1 = 20;        break;    default:        return errCAN_INVALID_BAUD;    }    SJA1000_OUTCTRL = (Tx1Float | Tx0PshPull | NormalMode);     // Set up Output Control Register    SJA1000_IEN = (RIE_Bit | TIE_Bit | EIE_Bit | DOIE_Bit );       // Enables receive IRQ    SJA1000_MODECTRL = (AFM_Bit);       // set single filter mode + sleep    // *** Note - if you change SJA1000_MODECTRL, change it in    // functions SJASetAccMask and SJASetAccCode also.        do {        SJA1000_MODECTRL = 0x00;    }    while ((SJA1000_MODECTRL & RM_RR_Bit) != 0x00);     // leaves reset mode    NutEnterCritical();    if (NutRegisterIrqHandler(&SJA_SIGNAL, SJAInterrupt, dev)) {        NutExitCritical();        return -1;    }    cbi(EIMSK, SJA_SIGNAL_BIT);    if (SJA_SIGNAL_BIT < 4)     // Set corresponding interrupt to low    {                           // level interrupt#ifdef __AVR_ENHANCED__        cbi(EICRA, (SJA_SIGNAL_BIT << 1));        cbi(EICRA, (SJA_SIGNAL_BIT << 1) + 1);#endif /* __AVR_ENHANCED__ */    } else {        cbi(EICR, ((SJA_SIGNAL_BIT - 4) << 1));        cbi(EICR, ((SJA_SIGNAL_BIT - 4) << 1) + 1);    }    temp = SJA1000_INT;         // Read interrupt register to clear pendin bits        sbi(EIMSK, SJA_SIGNAL_BIT);    sbi(PORTE, SJA_SIGNAL_BIT);    NutThreadCreate("sjacantx", CAN_Tx, dev, 256);    NutExitCritical();    return 0;}/*! * \brief Interface information structure. * * This struct stores some interface parameters like bautdate and  * acceptance mask / code. Beside this Callback handlers are registered. */IFCAN ifc_sja1000 = {    CAN_IF_2B,                  /*!< \brief Interface type. */    CAN_SPEED_500K,             /*!< \brief Baudrate of device. */    {0xFF, 0xFF, 0xFF, 0xFF}    ,                           /*!< \brief Acceptance mask */    {0x00, 0x00, 0x00, 0x00}    ,                           /*!< \brief Acceptance code */    SJARxAvail,                 /*!< \brief Data in RxBuffer available? */    SJATxFree,                  /*!< \brief TxBuffer free? */    SJAInput,                   /*!< \brief CAN Input routine */    SJAOutput,                  /*!< \brief CAN Output routine */    SJASetAccCode,              /*!< \brief Set acceptance code */    SJASetAccMask,              /*!< \brief Set acceptance mask */    SJASetBaudrate              /*!< \brief Set baudrate */};/*! * \brief Device information structure. * * Applications must pass this structure to NutRegisterDevice()  * to bind this CAN device driver to the Nut/OS kernel. */NUTDEVICE devSJA1000 = {    0,                          /*!< Pointer to next device. */    {'s', 'j', 'a', '1', '0', '0', '0', 0, 0}    ,                           /*!< Unique device name. */    IFTYP_CAN,                  /*!< Type of device. */    0,                          /*!< Base address. */    0,                          /*!< First interrupt number. */    &ifc_sja1000,               /*!< Interface control block. */    &dcb_sja1000,               /*!< Driver control block. */    SJAInit,                    /*!< Driver initialization routine. */    0,                          /*!< Driver specific control function. */    0,                          /*!< Read from device. */    0,                          /*!< Write to device. */    0,                          /*!< Write from program space data to device. */    0,                          /*!< Open a device or file. */    0,                          /*!< Close a device or file. */    0                           /*!< Request file size. */};#elsevoid keep_icc_happy(void){}#endif/*@}*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美视频一区| 国产成人免费在线视频| 欧美性生活影院| 亚洲激情图片qvod| 欧美亚洲自拍偷拍| 日本aⅴ免费视频一区二区三区| 欧美日韩国产美| 久久精品理论片| 国产精品三级在线观看| 99re热视频精品| 日本不卡一区二区三区高清视频| 日韩欧美一区二区视频| 成人一区二区在线观看| 亚洲国产精品一区二区www| 日韩欧美色综合网站| 国产高清亚洲一区| 亚洲综合免费观看高清完整版| 正在播放亚洲一区| 从欧美一区二区三区| 亚洲精品久久久久久国产精华液| 91精品国产高清一区二区三区| 韩国成人福利片在线播放| 亚洲色大成网站www久久九九| 欧美日韩精品一区二区天天拍小说 | 99视频精品免费视频| 亚洲成人动漫一区| 日本一区二区三区dvd视频在线| 91激情五月电影| 国产成人午夜电影网| 三级亚洲高清视频| 亚洲欧美激情小说另类| 欧美电视剧在线观看完整版| 91美女在线视频| 国产一区二区三区电影在线观看| 亚洲夂夂婷婷色拍ww47| 国产欧美一区二区精品仙草咪| 欧美日韩免费高清一区色橹橹| 国产精品一区二区免费不卡| 石原莉奈在线亚洲二区| 中文字幕在线一区| 久久久久88色偷偷免费| 日韩欧美一二三区| 欧美日韩国产精品成人| 一本大道av一区二区在线播放| 国产一区二区在线看| 首页国产丝袜综合| 亚洲午夜电影网| 亚洲精品五月天| 国产清纯在线一区二区www| 日韩一区二区三区四区五区六区| 91精品1区2区| 色呦呦网站一区| 99re在线精品| 97久久超碰国产精品电影| 粉嫩aⅴ一区二区三区四区五区| 久久精品理论片| 精品一区二区三区的国产在线播放| 日韩精品一二区| 日韩中文字幕麻豆| 日韩不卡一区二区三区| 日精品一区二区三区| 爽好久久久欧美精品| 视频一区免费在线观看| 亚洲妇熟xx妇色黄| 五月激情丁香一区二区三区| 亚洲第一狼人社区| 日韩精品电影在线| 蜜桃久久精品一区二区| 国产在线观看一区二区| 国产一区二区美女诱惑| 国产成人a级片| 91在线观看美女| 欧美无乱码久久久免费午夜一区 | 国产精品高潮呻吟| 国产精品色呦呦| 亚洲欧美另类小说| 亚瑟在线精品视频| 日本最新不卡在线| 国产精一区二区三区| 成人三级在线视频| 欧美影院一区二区三区| 日韩欧美国产三级| 国产精品视频观看| 亚洲午夜在线视频| 久久99精品网久久| 99久久精品国产观看| 欧美日韩国产片| 久久亚洲捆绑美女| 国产一区91精品张津瑜| 成人短视频下载| 欧美精品一二三区| 国产欧美视频一区二区三区| 亚洲乱码国产乱码精品精可以看 | 久久亚洲精精品中文字幕早川悠里 | 国内精品在线播放| 99精品视频在线播放观看| 欧美日韩在线一区二区| 久久久亚洲综合| 一卡二卡三卡日韩欧美| 国产一区欧美一区| 欧美色精品在线视频| 久久久久久久久99精品| 亚洲国产精品综合小说图片区| 狠狠色综合日日| 欧美在线播放高清精品| 久久精品视频网| 三级欧美在线一区| 99久久国产综合精品女不卡| 日韩三级免费观看| 一区二区高清视频在线观看| 国产大片一区二区| 日韩三级在线观看| 亚洲一区二区在线观看视频| 国产精品乡下勾搭老头1| 欧美精品精品一区| 亚洲免费观看高清完整版在线| 久久精品久久99精品久久| 欧洲精品中文字幕| 国产精品久久久久久久久免费相片 | 国产日产欧美一区二区视频| 五月天激情综合| 91黄色小视频| 亚洲免费在线播放| 91视频免费观看| 国产喷白浆一区二区三区| 蜜臀久久99精品久久久久久9| 欧美在线色视频| 亚洲欧美激情小说另类| 99这里只有久久精品视频| 欧美国产精品v| 国产成都精品91一区二区三| 久久久www免费人成精品| 国产乱子伦一区二区三区国色天香| 欧美精品久久久久久久多人混战 | 91精品国产色综合久久不卡蜜臀| 亚洲欧洲在线观看av| 成人精品gif动图一区| 国产日韩精品一区二区浪潮av | av一区二区不卡| 日本一区二区高清| 国产成人免费在线观看| 欧美国产日产图区| av一区二区三区在线| 中文字幕一区在线观看视频| 成人短视频下载| 亚洲综合在线视频| 在线成人av影院| 久久精品99国产精品| 久久女同精品一区二区| 成人性色生活片免费看爆迷你毛片| 国产精品网友自拍| 一本色道亚洲精品aⅴ| 亚洲夂夂婷婷色拍ww47| 91麻豆精品国产91久久久| 免费欧美日韩国产三级电影| 日韩精品一区二区在线| 成人午夜在线免费| 亚洲最新在线观看| 日韩精品一区二区三区老鸭窝| 经典三级在线一区| ...xxx性欧美| 日韩一区二区三区四区五区六区| 狠狠色丁香婷婷综合久久片| 亚洲国产精品二十页| 色国产精品一区在线观看| 日韩电影免费一区| 国产片一区二区三区| 精品视频一区 二区 三区| 久久99精品一区二区三区三区| 国产精品蜜臀av| 欧美绝品在线观看成人午夜影视| 精品一区二区三区免费观看 | 色欧美片视频在线观看在线视频| 亚洲香蕉伊在人在线观| 精品国产伦一区二区三区观看方式 | 欧美一区二区三区免费| 国产成人av电影在线| 亚洲成人久久影院| 欧美激情一区二区三区不卡 | 国产成人av电影在线观看| 一区二区三区影院| 久久青草国产手机看片福利盒子| 欧美色国产精品| eeuss国产一区二区三区| 蜜臀av性久久久久蜜臀av麻豆| 一区视频在线播放| 26uuu国产日韩综合| 欧美午夜片在线看| 成人不卡免费av| 国产在线精品一区二区| 日本在线不卡视频一二三区| 自拍偷拍国产精品| 久久久久久久久久看片| 欧美日韩三级视频| 色综合天天做天天爱| 丰满少妇在线播放bd日韩电影| 免费观看在线综合色| 亚洲小少妇裸体bbw| 亚洲精品伦理在线| 亚洲视频免费观看|