CuiMing_73
驱动牛犊
驱动牛犊
  • 注册日期2002-06-27
  • 最后登录2004-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3133回复:30

请问高手:AN2131QC 可以同时定义 同步和块传输吗?

楼主#
更多 发布于:2002-07-08 13:18
请问高手:AN2131QC 可以同时定义 同步和块传输吗?
cuiming73@263.net 10101973@sina.com
ysr
ysr
驱动牛犊
驱动牛犊
  • 注册日期2001-05-11
  • 最后登录2015-01-29
  • 粉丝0
  • 关注0
  • 积分79分
  • 威望48点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-09 14:41
对固件程序来说,一个endpoint只能指定一种传输方式,但可以给不同的endpoint指定不同的方式。只要固件程序支持,在驱动中就可以同时使用等时和块传输。
CuiMing_73
驱动牛犊
驱动牛犊
  • 注册日期2002-06-27
  • 最后登录2004-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-07-10 10:20
谢谢您的指导
您可以给出例子吗?
cuiming73@263.net 10101973@sina.com
CuiMing_73
驱动牛犊
驱动牛犊
  • 注册日期2002-06-27
  • 最后登录2004-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-07-12 10:12
我在一个例程上修改成功了
Get Pipes显示有一个块端口(OUT),一个同步端口(IN)
测试中出现问题:
我在固件程序中
unsigned char cmdata=2;
void TD_Init(void)
{
    OUT07VAL = bmEP2;
    USBIEN |= bmSOF + bmURES;
    USBPAIR = 0x09;
    INISOVAL = bmEP8;
    EPIO[OUT2BUF_ID].bytes = 0;
    BPADDR = (WORD)TD_Poll;
    IN8ADDR = 0x00;
    USBBAV |= bmBPEN;
    USBBAV &= ~bmBPPULSE;
}
void ISR_Sof(void) interrupt 0
{
    register BYTE framel = USBFRAMEL;
    register BYTE frameh = USBFRAMEH;
    register BYTE i;
    IN8DATA = framel;
    IN8DATA = frameh;
    for(i=0;i<50;++i)IN8DATA=cmdata;
    EZUSB_IRQ_CLEAR();
    USBIRQ = bmSOF;
}
void ISR_Ep2out(void) interrupt 0
{
    if (EPIO[IN1BUF_ID].cntrl & bmEPBUSY){
        TOGCTL = 0x08 | IN1BUF_ID;
        WRITEDELAY();
        if (TOGCTL & 0x80)TOGCTL |= 0x20;
        else TOGCTL |= 0x40;
    }
    cmdata=OUT1BUF[0];
    IN1BC=0;
    OUT1BC = 0;
    EZUSB_IRQ_CLEAR();
    OUT07IRQ = bmEP1;
}
块输出后不能改变,同步输入的值
cuiming73@263.net 10101973@sina.com
CuiMing_73
驱动牛犊
驱动牛犊
  • 注册日期2002-06-27
  • 最后登录2004-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-07-12 18:56
20分在等待!!!
cuiming73@263.net 10101973@sina.com
CuiMing_73
驱动牛犊
驱动牛犊
  • 注册日期2002-06-27
  • 最后登录2004-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-07-15 10:56
使用默认的设置
    SET_INTERFACE_IN input;
    input.interfaceNum = 0;
    input.alternateSetting = 1;
块、同步、中断、控制  四种传输全部都有

但如何稳定的实施下列的传输
每秒1000次同步IN
每秒200次块OUT

稳定性的关键在芯片设置还是应用程序?
cuiming73@263.net 10101973@sina.com
liuxf66
驱动中牛
驱动中牛
  • 注册日期2001-08-15
  • 最后登录2003-04-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-07-18 06:16
你在那个DESC.A51(定义描述符的文件)文件中有没有将你所要定义的端点的类型写清楚?
liuxf66
CuiMing_73
驱动牛犊
驱动牛犊
  • 注册日期2002-06-27
  • 最后登录2004-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-07-19 09:02
应该没有问题
因为使用Panel可以正确显示
我的设置
cuiming73@263.net 10101973@sina.com
CuiMing_73
驱动牛犊
驱动牛犊
  • 注册日期2002-06-27
  • 最后登录2004-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-07-19 09:56
sunkai,liuxf66
稳定性的关键在芯片设置(firmware)还是应用程序?
cuiming73@263.net 10101973@sina.com
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-07-20 11:45
但如何稳定的实施下列的传输
每秒1000次同步IN
每秒200次块OUT

稳定性的关键在芯片设置还是应用程序?
------------------------------------
同步传输每ms发生一次,无须更多设置,提供数据即可
块传输本身没有时间保证,不能从芯片设置中得到.如果你的确要精确定时,在应用程序中做定时发送或在firmware中做定时接收试试吧,好怪的课题.
CuiMing_73
驱动牛犊
驱动牛犊
  • 注册日期2002-06-27
  • 最后登录2004-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-07-20 16:08
好怪吗?
我的目的是作一个AD
所以得保证精确的采样(读取、IN)
但同时还有一些设置或状态的切换需要从HOST发送
就这样的应用您使用什么组合方式设置呢?
cuiming73@263.net 10101973@sina.com
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-07-21 00:51
1,做采样跟iso无关,须bulk in
2,实现精确的采样时序方法很多,一种较好的方法是另外加一片mcu专门控制采样.可能的话也可以完全由单独的硬件模块提供采样时序.绝对不可能由主机程序控制发送in请求以达到精确采样的目的
3,准则:硬件决定软件,硬件不做好,firmware和app做的再精致也没有用
4,基于3,高速采样设备要有ram缓存采样结果数据,防止数据丢失,同时也就无需考虑必须每秒1000次in了,host尽可以总是in.
5,设置或状态切换当然是bulk out,不必要精确控制吧?
CuiMing_73
驱动牛犊
驱动牛犊
  • 注册日期2002-06-27
  • 最后登录2004-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-07-23 10:52
可能我的理解有误
现在的情形是:

   我修改了EZ-USB的例子IsoStream
   他只定义了ISO IN
   我只修改了periph.c中的 void ISR_Sof(void) interrupt 0

我现在想加输出,研究了几天例子IsoLoopback没有成功

于是就改为使用缺省端点
使用下列代码
    SET_INTERFACE_IN input;
    input.interfaceNum = 0;
    input.alternateSetting = 1;
    if (hDevice != NULL) {
        bResult = DeviceIoControl (hDevice, IOCTL_Ezusb_SETINTERFACE,
&input,
sizeof(SET_INTERFACE_IN),
NULL,
0,
(unsigned long *)&nBytes,
NULL);
    }
可以用EZ-USB Control Panel看到:
Get PipeInfo
Interface Size 276
Pipe:  0   Type: INT Endpoint:  1 IN   MaxPktSize: 0x10
Pipe:  1   Type: BLK Endpoint:  2 IN   MaxPktSize: 0x40
Pipe:  2   Type: BLK Endpoint:  2 OUT  MaxPktSize: 0x40
Pipe:  3   Type: BLK Endpoint:  4 IN   MaxPktSize: 0x40
Pipe:  4   Type: BLK Endpoint:  4 OUT  MaxPktSize: 0x40
Pipe:  5   Type: BLK Endpoint:  6 IN   MaxPktSize: 0x40
Pipe:  6   Type: BLK Endpoint:  6 OUT  MaxPktSize: 0x40
Pipe:  7   Type: ISO Endpoint:  8 IN   MaxPktSize: 0x10
Pipe:  8   Type: ISO Endpoint:  8 OUT  MaxPktSize: 0x10
Pipe:  9   Type: ISO Endpoint:  9 IN   MaxPktSize: 0x10
Pipe: 10   Type: ISO Endpoint:  9 OUT  MaxPktSize: 0x10
Pipe: 11   Type: ISO Endpoint: 10 IN   MaxPktSize: 0x10
Pipe: 12   Type: ISO Endpoint: 10 OUT  MaxPktSize: 0x10

下载8051汇编代码:
;-----------------------------------------------------------------
$NOMOD51 ; disable predefined 8051 registers
$nolist
$include (C:\\Cypress\\USB\\Target\\inc\\ezregs.inc) ; EZ-USB register assignments
$list
;
NAME        eziso
;
CSEG AT 0
       mov     dptr,#IN8ADDR   ; set the FIFO start for EP8 to 0
         mov     a,#0
       movx    @dptr,a
mov a,#0xFF
mov dptr,#OEC
movx @dptr,a
mov dptr,#OEB
movx @dptr,a
mov dptr,#OEA
movx @dptr,a

  ljmp loop
; -------------------------------------------------
org 100h
; -------------------------------------------------
loop: mov dptr,#USBIRQ ; wait for SOF IRQ bit
movx a,@dptr
  jb acc.1,IsoIn

  mov dptr,#OUT2CS ; EP2OUT Control & Status reg
   movx a,@dptr
     jb acc.1,loop ; busy-keep checking
;
service_OUT2: mov dptr,#OUT2BUF
movx a,@dptr
mov r7,a
inc dptr
movx a,@dptr
mov r6,a
inc dptr
movx a,@dptr
     mov dptr,#OUTA
movx @dptr,a
mov a,r6
     mov dptr,#OUTB
movx @dptr,a
mov a,r7
     mov dptr,#OUTC
movx @dptr,a

mov dptr,#OUT2BC ; load anything to byte count to re-arm
  mov a,#1 ; any value
  movx @dptr,a
   sjmp loop
;
IsoIn: mov a,#00000010b ; SOFIR bit
movx @dptr,a ; writing 1 clears the SOF IRQ bit
;
mov dptr,#USBFRAMEH ; put the frame number into first two EP8IN bytes
  movx a,@dptr
   mov dptr,#IN8DATA ; \"IN8DATA\" is a FIFO inside the EZ-USB chip
   movx @dptr,a ; byte 0
mov dptr,#USBFRAMEL
  movx a,@dptr
   mov dptr,#IN8DATA
   movx @dptr,a ; byte 1
;    
mov r2,#24
loop_cm:
   mov dptr,#PINSC ; read PORTC pins
   movx a,@dptr
mov dptr,#IN8DATA
     movx @dptr,a
mov a,#0
     movx @dptr,a

djnz r2,loop_cm
;
       sjmp loop
;
END

我的应用程序(ISO IN and BULK OUT)欢快的运行起来
但不幸的是或 2小时 或 5小时 程序停止

但没有死机
可以重新启动采集线程,程序又可运行,但依然会在一会停下来
我不知道是怎么会事
请高手指点

如果需要我可以把源代码发给您!
cuiming73@263.net 10101973@sina.com
CuiMing_73
驱动牛犊
驱动牛犊
  • 注册日期2002-06-27
  • 最后登录2004-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-07-24 08:57
sunkai老兄
这个帖子您也得关照一下!
cuiming73@263.net 10101973@sina.com
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-07-24 09:51
具体编程要靠自己喽,我的建议已经说了,仍然坚持用bulk in的观点
CuiMing_73
驱动牛犊
驱动牛犊
  • 注册日期2002-06-27
  • 最后登录2004-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-07-24 14:35
bulk in
我已经做成一个了
用EZ-USB Control Panel下载
可以稳定的运行,
但又到VENDOR_OR_CLASS_REQUEST_CONTROL的问题了

而且bulk in有一个更致命的弱点:
由于我采用8051直接控制AD
当用户在运行程序时,host程序如果不能及时读取
就出现“丢点”现象

对了这得请教您:
我如果在8051不断的向INnBUF写数据,他可以存多少数据?
cuiming73@263.net 10101973@sina.com
CuiMing_73
驱动牛犊
驱动牛犊
  • 注册日期2002-06-27
  • 最后登录2004-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2002-07-24 14:55
sunkai 请您在
“Ez_USB/AN2131QC/IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST问题 ”
中出现一下
先把那二十分给您

并向您这样的热心人致敬!
cuiming73@263.net 10101973@sina.com
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2002-07-24 17:42
bulk in
我已经做成一个了
用EZ-USB Control Panel下载
可以稳定的运行,
但又到VENDOR_OR_CLASS_REQUEST_CONTROL的问题了

而且bulk in有一个更致命的弱点:
由于我采用8051直接控制AD
当用户在运行程序时,host程序如果不能及时读取
就出现“丢点”现象

对了这得请教您:
我如果在8051不断的向INnBUF写数据,他可以存多少数据?

我开始也是用iso,不久就发觉不能很好地控制它,数据时对时错,改成bulk,起码保证数据完全正确,这时出现丢点的现象,正如你说的,我采取了缓存的办法,就不会丢了,这是我上面建议里的第3.4点.
inbuf的大小是固定的64byte,可设置用pairing乒乓.inbuf是不能不断地写入,只有在!busy时才能写入,这是丢点的原因,所以要有个ram缓冲,用fifo是个不错的选择,这样只要成功控制fifo不会满就不会丢点了.iso inbuf是1024,本身就采取双buffer乒乓方式工作


[编辑 -  7/25/02 by  sunkai]
CuiMing_73
驱动牛犊
驱动牛犊
  • 注册日期2002-06-27
  • 最后登录2004-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2002-07-25 10:08
总之是我e文太差,看不懂说明书
cuiming73@263.net 10101973@sina.com
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2002-07-25 10:17
不会吧,只怕是光急着做东西去了,前期看清看完文档是非常关键的,事半功倍.别人的建议有时也很重要,要是当初我早点咨询懂得用缓存,可以节省2个月的时间和做2块板子的银子和大量的脑细胞.
上一页
游客

返回顶部