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

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

?? util_mc.c

?? pic單片機驅動mcp2510源代碼
?? C
字號:
/*
** Copyright (C)1999 KVASER AB, http://www.kvaser.com
** This code may be freely distrubuted and used if the source is indicated.
**
*/

#include "..\inc\std.h"
#include <pic.h>
#include "..\inc\async.h"
#include "..\inc\spi.h"
#include "..\inc\spi_mcp.h"
#include "..\inc\mcp2510.h"
#include <stdio.h>
#include "..\inc\util_mc.h"
#include "..\inc\mcdemo.h"

void timerSetup(void);
void analogueSetup(void);


void mcp_init_ports(void)
{
    // Set RTS pins as inputs (used for the buttons)
    SPI_mcp_write_bits(TXRTSCTRL, 0 , 0xFF);
    // The two pins RX0BF and RX1BF are used to control two LEDs; set them as outputs and
    // set them as 00.
    SPI_mcp_write_bits(BFPCTRL, 0x3C, 0xFF );
}

void setupModule(void) {
    TRISB = 0x00;  // all bits output
    TRISA = 0xFF;  // all bits input
    TRISC = 0x00;
    PORTB = 0x00;  // turn all on
    async_Init();

    printf("Module started\n\r");

    SPI_init_hw();
    mcp_reset();
    mcp_init();
    mcp_init_ports();
    timerSetup();
    analogueSetup();
}

uchar getButtons(void) {
    uchar port;
    mcp_read(TXRTSCTRL, &port, 1);
    // Bits 3..5 are used.
    return ((~port) >> 3) & 0x07;
}

// --------------------------------------------------------------------
void analogueSetup(void) {
    TRISA0 = 1; // Set as input
    // The ADCON1 register
    // - - - - -   [00000]
    // PCFG2-0  A/D Port Configuration Control bits, [000] for A/A/A/A/A/A/A/A/Vdd
    ADCON1 = 0x00;

    // The ADCON0 register
    // ADCS10  A/D Conversion Clock Select, [00] for FOSC/2
    // CHS2-0  Analog Channel Select bits, [000] for channel 0, (RA0/AN0)
    // GO/DONE*, -     [00]
    // ADON    A/D On bit, [1] for A/D converter module is operating
    ADCON0 = 0x41; // 00 000 00 1
}

// Read the analogue value.
// We assume that enough time has gone since the previous conversion so the capacitior is loaded.
// (the minimum acquisition time is some 5-10 us). The conversion time is also a few us.
// We wait for it; it only takes one loop.
int getAnalogue(void) {
    uint c = 0xffff; 
    ADGO = 1;
    while (ADGO)
        if (--c == 0)
            return -1;
    return ADRESH;
}
// --------------------------------------------------------------------

// v = 0..3, controls two LEDs, writing '0' turns a LED on.
void setLEDs(int v) {
    SPI_mcp_write_bits(BFPCTRL, ~v << 4, 0x30);
}

// --------------------------------------------------------------------
static BANK1 uint tc;
// Setup timer0 to generate interrupts 1000 times per second.
// Using the prescaler value 4 works for the EVB.
void timerSetup(void) {
    tc = 0;
    T0CS = 0; // TMR0 Clock Source Select bit: Internal instruction cycle clock (CLKOUT)
    PSA = 0; // Prescaler is assigned to the Timer0 module
    PS2 = 0; PS1 = 0; PS0 = 1; // Prescaler = 256 (111) gives tick freq 15 Hz, presc 4 (001) gives 960 Hz.
    T0IE = 1; // TMR0 Overflow Interrupt Enable bit
    T0IF = 0; // TMR0 Overflow Interrupt Flag bit
    GIE = 1; // Global Interrupt Enable bit: Enables all un-masked interrupts
}

static void interrupt intHandler(void) {
    if (T0IF) {
        tc++;
        T0IF = 0;
    }
}

// Returns the current time in ms. Will wrap at 0xffff, must be "complete",
// i.e., wrap from 0xffff to 0x0.
unsigned int timerValue(void) {
static bank1 unsigned int dummy;
    dummy = tc;
    return tc;
}
// --------------------------------------------------------------------

// Setup the CAN buffers used by the application.
// We currently use only one for reception and one for transmission.
// It is possible to use several to get a simple form of queue.
//
// We setup the unit to receive all CAN messages.
// As we only have at most 4 different messages to receive, we could use the
// filters to select them for us.
//
// mcp_init() should already have been called.
canStatus canSetup(void) {
    // As no filters are active, all messages will be stored in RXB0 only if
    // no roll-over is active. We want to recieve all CAN messages (standard and extended)
    // (RXM<1:0> = 11).
    //SPI_mcp_write_bits(RXB0CTRL, RXB_RX_ANY, 0xFF);
    //SPI_mcp_write_bits(RXB1CTRL, RXB_RX_ANY, 0xFF);

    // But there is a bug in the chip, so we have to activate roll-over.
    SPI_mcp_write_bits(RXB0CTRL, (RXB_BUKT+RXB_RX_ANY), 0xFF);
    SPI_mcp_write_bits(RXB1CTRL, RXB_RX_ANY, 0xFF);

    return canOK;  
}


// Write a CAN message. We use only one buffer, i.e. no queueing, and don't
// check if the buffer is available.
canStatus canWrite(ulong id, const uchar *msg, unsigned char dlc, unsigned int flag) {
    mcp_write_can(1, flag & canMSG_EXT, id, dlc, flag & canMSG_RTR, msg);
    mcp_transmit(TXB0CTRL);

    return canOK;
}

// Test if there is a message pending; if so, read it.
// We check RXB0 first, and if it is empty, RXB1.
// This simple approach may cause the order to be wrong.
// A better way would be to check RXB1 after a message was read from RXB0, and if there is
// a message in RXB1 mark a flag. If on the next call this flag is set, read RXB1 instead of
// RXB0. We know that there will always ne a message in RXB0 before one ends up in RXB1.
//
// Return values: canOK         There was a message
//                canERR_NOMSG  Nothing to be read
BANK1 static uchar crReadB1 = 0;
canStatus canRead(ulong *id, uchar *msg,  unsigned char *dlc, unsigned int *flag) {
    uchar msgF, extF;
    uchar byte, rtr;

    msgF = 0;
    mcp_read(CANINTF, &byte, 1);
    if (crReadB1) {
        if (byte & RX1INT) { 
            mcp_read_can(5, &extF, id, dlc, &rtr, msg);
            SPI_mcp_write_bits(CANINTF, ~RX1INT, RX1INT); // Clear interrupt
            msgF = 1;
        } //else
        //  printf("<CRerr>\n");
        crReadB1 = 0;
    }
    if (byte & RX0INT) {
        mcp_read_can(4, &extF, id, dlc, &rtr, msg);
        SPI_mcp_write_bits(CANINTF, ~RX0INT, RX0INT); // Clear interrupt
        msgF = 1;
        mcp_read(CANINTF, &byte, 1);
        if (byte & RX1INT)
            crReadB1 = 1;
    }

    if (msgF) {
        if (extF)
            *flag = canMSG_EXT;
        else
            *flag = canMSG_STD;
        if (rtr) {
            //    printf("<RTR>\n\r");
            *flag |= canMSG_RTR;
        }
        return canOK;
    } else
        return canERR_NOMSG;
}

// Not implemented
void canSetCommMode(commModesT commMode) {
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
香蕉加勒比综合久久| 亚洲国产精品久久不卡毛片| 在线观看日韩精品| 精品一区二区三区在线播放视频| 国产精品人妖ts系列视频| 在线播放中文字幕一区| 成人短视频下载| 免费成人在线播放| 一区二区视频免费在线观看| 国产亚洲欧美中文| 日韩欧美区一区二| 欧美日韩电影一区| 91麻豆免费看| 国产凹凸在线观看一区二区| 美腿丝袜一区二区三区| 亚洲一区二区三区影院| 国产精品的网站| 久久网站最新地址| 日韩免费观看高清完整版在线观看| 91亚洲国产成人精品一区二区三| 国产成人aaa| 国产一区二区三区高清播放| 石原莉奈在线亚洲二区| 亚洲在线观看免费| 中文字幕免费一区| 国产三级精品三级| 亚洲国产精品av| 久久久国产一区二区三区四区小说 | 久久亚洲一区二区三区四区| 欧美高清视频一二三区 | 国产成人午夜99999| 蜜臀av一级做a爰片久久| 香蕉影视欧美成人| 亚洲大片在线观看| 婷婷综合五月天| 偷拍日韩校园综合在线| 日韩精品五月天| 视频一区视频二区中文| 亚欧色一区w666天堂| 婷婷中文字幕一区三区| 亚洲va天堂va国产va久| 午夜精品123| 日韩精品成人一区二区三区| 三级成人在线视频| 日韩成人免费在线| 国产做a爰片久久毛片| 国产精品一区二区91| 国产精品一区免费视频| 成人国产在线观看| 91看片淫黄大片一级| 在线一区二区三区做爰视频网站| 一本大道综合伊人精品热热| 在线观看精品一区| 91麻豆精品国产无毒不卡在线观看| 欧美日韩视频在线一区二区| 88在线观看91蜜桃国自产| 欧美一级日韩免费不卡| 精品国产91洋老外米糕| 中文字幕 久热精品 视频在线| 欧美精彩视频一区二区三区| 亚洲色图一区二区| 亚洲国产欧美在线| 精品影视av免费| av亚洲精华国产精华| 欧美午夜在线观看| 日韩欧美一二三| 国产欧美日韩激情| 一区二区三区毛片| 日本欧美在线看| 成人激情黄色小说| 欧美自拍丝袜亚洲| 欧美成人国产一区二区| 国产精品久久久久aaaa樱花| 一区二区三区中文在线| 激情综合网激情| 91亚洲精品乱码久久久久久蜜桃| 欧美日韩一区在线观看| 久久久久久亚洲综合影院红桃 | 欧美日韩高清不卡| 国产亚洲午夜高清国产拍精品 | 精品欧美一区二区在线观看| 国产欧美日韩精品一区| 亚洲一线二线三线久久久| 久久av中文字幕片| 日本精品免费观看高清观看| 91精品在线免费| 中文字幕不卡在线播放| 亚洲成av人片在线观看| 成人av资源站| 日韩欧美国产综合在线一区二区三区 | 91国产丝袜在线播放| 欧美成人官网二区| 亚洲午夜电影在线| 国产成人午夜精品影院观看视频 | 国产成人精品综合在线观看 | 一区二区免费在线| 经典一区二区三区| 欧美天堂亚洲电影院在线播放| 欧美精品一区二区三区四区| 亚洲一区二区影院| 99视频国产精品| 精品国产污污免费网站入口 | 久久天天做天天爱综合色| 一区二区三国产精华液| 成年人网站91| 精品国产乱码久久久久久夜甘婷婷| 亚洲综合色在线| 丁香婷婷综合网| 亚洲精品一区二区三区在线观看| 亚洲国产sm捆绑调教视频| 成人动漫一区二区三区| 久久久久高清精品| 精品一区二区精品| 69堂亚洲精品首页| 夜夜嗨av一区二区三区网页| 国产成人精品一区二区三区四区 | 国产一区二区福利| 日韩精品一区二区三区三区免费| 午夜精品一区在线观看| 在线观看亚洲一区| 亚洲日本一区二区三区| 成人国产视频在线观看| 亚洲国产精品ⅴa在线观看| 国产麻豆精品一区二区| 日韩欧美国产三级电影视频| 日韩电影在线观看网站| 在线看不卡av| 亚洲综合丁香婷婷六月香| 91免费精品国自产拍在线不卡| 日本一区二区三区在线不卡| 国产高清在线观看免费不卡| 精品成人在线观看| 韩国欧美国产一区| 久久亚洲私人国产精品va媚药| 久久精品二区亚洲w码| 日韩欧美精品在线| 精品在线亚洲视频| 久久久久久97三级| 成人网男人的天堂| 中文字幕一区二区不卡| av在线这里只有精品| 中文字幕一区二区三区精华液| 91免费精品国自产拍在线不卡| 亚洲靠逼com| 欧美图区在线视频| 日韩不卡一区二区三区| 欧美一级二级三级蜜桃| 免费成人小视频| 2023国产精品| 丁香激情综合国产| 亚洲精品视频一区| 在线观看视频一区二区欧美日韩| 亚洲一区影音先锋| 日韩欧美色电影| 国产99久久久久久免费看农村| 国产精品乱码一区二三区小蝌蚪| 99久久国产综合精品女不卡| 亚洲男人天堂av| 欧美丰满一区二区免费视频| 麻豆国产精品一区二区三区 | 无码av免费一区二区三区试看| 欧美一区三区四区| 国产一区二区看久久| 亚洲色图欧洲色图婷婷| 欧美美女喷水视频| 狠狠久久亚洲欧美| 欧美极品xxx| 欧美伊人久久久久久久久影院| 免费高清在线一区| 日本一区二区三级电影在线观看 | 国产电影精品久久禁18| 中文字幕欧美一| 欧美美女视频在线观看| 夫妻av一区二区| 亚洲成人自拍网| 国产亚洲一本大道中文在线| 欧美视频精品在线| 国产伦精品一区二区三区免费迷| 中文字幕一区二区三区在线不卡| 欧美日韩和欧美的一区二区| 国产伦理精品不卡| 丝袜诱惑亚洲看片| 国产精品卡一卡二卡三| 欧美一区二区三区在线电影| 国产成+人+日韩+欧美+亚洲 | 成人av电影在线网| 日韩精品欧美成人高清一区二区| 国产精品三级电影| 欧美一级片在线| 日本丶国产丶欧美色综合| 激情图片小说一区| 亚洲国产精品久久人人爱 | 精品写真视频在线观看| 亚洲乱码国产乱码精品精的特点| 精品国产成人在线影院| 欧美系列一区二区| 99久久免费精品| 国产精品夜夜嗨| 免费精品视频在线| 一区二区三区视频在线观看|