Цитата(vvj @ Jan 21 2005, 00:20)
GPIF не могу заставить работать - все управляющие и адрес по единице(смотрел на осц.)
Есть пару вопросов по инитциализации из TRM страница 277/пункт 2 - нафиг нужен и почему в приведённом ниже примере читают из 0x00AB ?
Пиши подробней вопрос, мне некогда по пдфкам лазить.
Ты может описатель временной диаграммы криво создаёшь...
На 277 странице вообще порты IO описаны.
$if (EnableGPIF)
;=-=-=-=-=-=-=-=-=-=-G-P-I-F-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
nop
/* WriteX #IFCONFIG, #11000000b; //external/internal_CLOCK,30/48,out_enable,invert,Async,Test_pinout,1,0(GPIF)
nop
mov OEB,0x00
mov a,IOB
JNZ NotError
mov dptr,#USBCS ; bit7 - Mode jf PLL (480/12)
movx a,@dptr
ORL a,#00001000b
movx @dptr,a
whileAcc0:
mov a,IOB
JZ whileAcc0
mov dptr,#USBCS ; bit7 - Mode jf PLL (480/12)
movx a,@dptr
ANL a,#11110111b
movx @dptr,a
NotError:*/
CALL ResetPipe
nop
WriteX #IFCONFIG, #11000010b; //external/internal_CLOCK,30/48,out_enable,invert,Async,Test_pinout,1,0(GPIF)
nop
WriteX #GPIFABORT,#0xFF; //Abort All Pending Function
/* MOV DPTR,#PORTECFG; //
MOV A,#0x00
MOVX @DPTR,A
*/
nop
WriteX #EP2FIFOCFG,#00000000b;
nop
WriteX #EP4FIFOCFG,#00000000b;
nop
WriteX #EP6FIFOCFG,#00000000b;
nop
WriteX #EP8FIFOCFG,#00000000b;
nop; //CTL OutputMode
WriteX #GPIFCTLCFG,#00000000b ; if (x==1) 7-tristate, 0..6 - open-drain
/* MOV DPTR,#GPIFREADYCFG; //
MOVX a,@DPTR
ANL A,#01111111b ;SAS = 0
MOVX @DPTR,A*/
nop
WriteX #GPIFWFSELECT, #Sw_Sr_Fw_Fr_Def
nop
MOV DPTR,#GPIFIDLECS ; defined states of GPIF signals in IDLE
MOV A,#10000001b ; Data pin
MOVX @DPTR,A
nop
WriteX #GPIFIDLECTL, #11111111b ; CTL pin in IDLE
; MOV DPTR,#GPIFREADYSTAT; Current state of RDY pin
; MOVX a,@DPTR
; ANL A,#01111111b ;
; MOVX @DPTR,A
;------------Autopointer-------------------------;
ByteCounter DATA 128 ;
mov autoptrsetup, #00000111b ;
mov ByteCount_h,#high(ByteCounter) ; ; Hight byte of counter Autopointer
mov ByteCount_l,#low(ByteCounter) ;
;source: ;
mov autoptr1h,#high(mass) ;
mov autoptr1l,#low(mass) ;
;destination: ;
mov autoptrh2,#high(GPIF_WAVE_DATA) ;
mov autoptrl2,#low(GPIF_WAVE_DATA) ;
LCALL Autopointer ;
;------------------------------------------------;
/*
;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
$endif
mov r1, #0
mov r3, #0
MOV IOD, #0x00
MOV OED, #0x01
MOV IOD, #0x00
MOV OEA, #0xFF
MOV IOA, #01010001b
;======Initialization Size Endpoint Paket=================
mov PacketSizeLow,#0x00
mov PacketSizeHigh,#0x02
mov dptr,#USBCS ; bit7 - Mode jf PLL (480/12)
movx a,@dptr
ANL a,#10000000b
JNZ PLL480 ; branch if HCM != 0
mov PacketSizeLow,#0x40
mov PacketSizeHigh,#0x00
PLL480:
$if (ControlEnable)
MOV OEE, #00001000b
mov IOE, #00001000b ; Test
$endif
nop
WriteX #EP4AUTOINLENH,PacketSizeHigh;
nop
WriteX #EP4AUTOINLENL,PacketSizeLow;
nop
WriteX #EP8AUTOINLENH,PacketSizeHigh;
nop
WriteX #EP8AUTOINLENL,PacketSizeLow;
Это работает.