1 Star 0 Fork 1

qingsonggege / openwrt_mt7688_ctest

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
mpsse.c 4.84 KB
一键复制 编辑 原始数据 按行查看 历史
Midas 提交于 2017-12-02 17:17 . test ili9488
/*--------------------------------------------------------
This program is distributed under the GPL, version 2
Original Source: https://www.intra2net.com/en/developer/libftdi/
from:
www.intra2net.com 2003-2017 Intra2net AG
./openwrt-gcc -L. -lusb-1.0 -lftdi1 -o mpsse mpsse.c
Midas
------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "include/ftdi.h"
/*------------------------------------
write to GPIOH0 -GPIOH7
--------------------------------------*/
int mpsse_write_highbits(struct ftdi_context *ftdi, unsigned char val)
{
int ret;
unsigned char buf[3];
buf[0]=SET_BITS_HIGH;
buf[1]=val;
buf[2]=0xff;//1-out
ret = ftdi_write_data(ftdi, buf, 3);
if (ret < 0)
{
fprintf(stderr,"mpsse_write_highbits() write failed, error %d (%s)\n",ret, ftdi_get_error_string(ftdi));
}
return ret;
}
/*------------------------------------
write to GPIOL0 -GPIOL7
--------------------------------------*/
int mpsse_write_lowbits(struct ftdi_context *ftdi, unsigned char val)
{
int ret;
unsigned char buf[3];
buf[0]=SET_BITS_LOW;
buf[1]=val;
buf[2]=0xff;//1-out
ret = ftdi_write_data(ftdi, buf, 3);
if (ret < 0)
{
fprintf(stderr,"mpsse_write_lowbits() write failed, error %d (%s)\n",ret, ftdi_get_error_string(ftdi));
}
return ret;
}
int main(int argc, char **argv)
{
struct ftdi_context *ftdi;
int f,i;
unsigned char buf[2],val;
int retval = 0;
int k;
unsigned short usb_val;
int ret;
int baudrate;
struct timeval tm_start,tm_end;
int time_use;
if ((ftdi = ftdi_new()) == 0)
{
fprintf(stderr, "ftdi_new failed\n");
return EXIT_FAILURE;
}
f = ftdi_usb_open(ftdi, 0x0403, 0x6014); //VID and PID
if (f < 0 && f != -5)
{
fprintf(stderr, "unable to open ftdi device: %d (%s)\n", f, ftdi_get_error_string(ftdi));
retval = 1;
goto done;
}
printf("ftdi open succeeded: %d\n",f);
printf("enabling bitbang mode\n");
ftdi_set_bitmode(ftdi, 0xFF, BITMODE_MPSSE);
usleep(500000);
//------ set baudrate -------
baudrate=3150000;
ret=ftdi_set_baudrate(ftdi,baudrate);
if(ret == -1){
printf("baudrate invalid!\n");
}
else if(ret != 0){
printf("ret=%d set baudrate fails!\n",ret);
}
else if(ret ==0 ){
printf("set baudrate=%d, actual baudrate=%d \n",baudrate,ftdi->baudrate);
}
//---------- run LED test ------
/*
val=0x01;
while(1){
mpsse_write_highbits(ftdi,~val);
mpsse_write_lowbits(ftdi,~val);
usleep(250000);
val=val<<1;
if(val==0) val=1;
}
*/
//-------- test GPIO speed ------
val=0x81;
while(1){
gettimeofday(&tm_start,NULL);
for(i=0;i<5*1024;i++){
val=~val;
mpsse_write_lowbits(ftdi,val);
}
gettimeofday(&tm_end,NULL);
time_use=(tm_end.tv_sec-tm_start.tv_sec)*1000+(tm_end.tv_usec-tm_start.tv_usec)/1000;
printf(" ------ finish transfering 5Kbytes data, time_use=%dms ----- \n",time_use); //~200ms for 1k bytes, ~1s for 5K bytes
}
/*
usb_val=0xAA00;
ret=libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_OUT_REQTYPE, SET_BITS_LOW,usb_val,ftdi->index, NULL, 0, ftdi->usb_write_timeout);
if(ret<0)
printf("libusb_control_transfer() to set mpsse SET_BITS_LOW fails! ret=%d\n",ret);
*/
// buf[0] = 0xFF;
//+++++
/*
k=0;
while(1){
if(k == 8) k=0;
buf[0]=0xFF-(1<<k);
k++;
f = ftdi_write_data(ftdi, buf, 1);
if (f < 0)
{
fprintf(stderr,"write failed for 0x%x%x, error %d (%s)\n",buf[0],buf[1],f, ftdi_get_error_string(ftdi));
}
else
printf(" write data buf=0x%02x to FTDI successfully!\n",buf[0]);
usleep(50000);
}
//-----
printf("turning everything on\n");
f = ftdi_write_data(ftdi, buf, 1);
if (f < 0)
{
fprintf(stderr,"write failed for 0x%x, error %d (%s)\n",buf[0],f, ftdi_get_error_string(ftdi));
}
usleep(3 * 1000000);
buf[0] = 0xFF;
printf("turning everything off\n");
f = ftdi_write_data(ftdi, buf, 1);
if (f < 0)
{
fprintf(stderr,"write failed for 0x%x, error %d (%s)\n",buf[0],f, ftdi_get_error_string(ftdi));
}
usleep(3 * 1000000);
for (i = 0; i < 32; i++)
{
buf[0] = 0 | (0xFF ^ 1 << (i % 8));
if ( i > 0 && (i % 8) == 0)
{
printf("\n");
}
printf("%02hhx ",buf[0]);
fflush(stdout);
f = ftdi_write_data(ftdi, buf, 1);
if (f < 0)
{
fprintf(stderr,"write failed for 0x%x, error %d (%s)\n",buf[0],f, ftdi_get_error_string(ftdi));
}
usleep(1 * 1000000);
}
printf("\n");
*/
printf("disabling bitbang mode\n");
ftdi_disable_bitbang(ftdi);
ftdi_usb_close(ftdi);
done:
ftdi_free(ftdi);
return retval;
}
1
https://gitee.com/qingsonggege/openwrt_mt7688_ctest.git
git@gitee.com:qingsonggege/openwrt_mt7688_ctest.git
qingsonggege
openwrt_mt7688_ctest
openwrt_mt7688_ctest
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891