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

📄 bitbang_cbus.c

📁 libftdi - A library (using libusb) to talk to FTDI s FT2232C, FT232BM and FT245BM type chips includ
💻 C
字号:
/*  bitbang_cbus.c    Example to use CBUS bitbang mode of newer chipsets.    You must enable CBUS bitbang mode in the EEPROM first.    Thanks to Steve Brown <sbrown@ewol.com> for the    the information how to do it.    The top nibble controls input/output and the bottom nibble    controls the state of the lines set to output. The datasheet isn't clear    what happens if you set a bit in the output register when that line is    conditioned for input. This is described in more detail    in the FT232R bitbang app note.    BITMASK    CBUS Bits    3210 3210    xxxx xxxx    |    |------ Output Control 0->LO, 1->HI    |----------- Input/Output   0->Input, 1->Output    Example:    All pins to output with 0 bit high: 0xF1 (11110001)    Bits 0 and 1 to input, 2 and 3 to output and masked high: 0xCC (11001100)    The input is standard "0x" hex notation.    A carriage return terminates the program.    This program is distributed under the GPL, version 2*/#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <ftdi.h>int main(int argc, char **argv){    struct ftdi_context ftdic;    int f,i;    unsigned char buf[1];    unsigned char bitmask;    unsigned char input[10];    ftdi_init(&ftdic);    f = ftdi_usb_open(&ftdic, 0x0403, 0x6001);    if(f < 0 && f != -5) {        fprintf(stderr, "unable to open ftdi device: %d (%s)\n", f, ftdi_get_error_string(&ftdic));        exit(-1);    }    printf("ftdi open succeeded: %d\n",f);    while (1) {        // Set bitmask from input        fgets(input, sizeof(input) - 1, stdin);        if (input[0] == '\n') break;        bitmask = strtol(input, NULL, 0);        printf("Using bitmask 0x%02x\n", bitmask);        f = ftdi_set_bitmode(&ftdic, bitmask, BITMODE_CBUS);        if (f < 0) {            fprintf(stderr, "set_bitmode failed for 0x%x, error %d (%s)\n", bitmask, f, ftdi_get_error_string(&ftdic));            exit(-1);        }        // read CBUS        f = ftdi_read_pins(&ftdic, &buf[0]);        if (f < 0) {            fprintf(stderr, "read_pins failed, error %d (%s)\n", f, ftdi_get_error_string(&ftdic));            exit(-1);        }        printf("Read returned 0x%01x\n", buf[0] & 0x0f);    }    printf("disabling bitbang mode\n");    ftdi_disable_bitbang(&ftdic);    ftdi_usb_close(&ftdic);    ftdi_deinit(&ftdic);}

⌨️ 快捷键说明

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