📄 gpif.lst
字号:
#define GPIFTRIGWR 0
#define GPIFTRIGRD 4
#define GPIF_EP2 0
C51 COMPILER V6.10 GPIF 07/07/2005 13:31:07 PAGE 12
#define GPIF_EP4 1
#define GPIF_EP6 2
#define GPIF_EP8 3
// write byte(s)/word(s) to PERIPHERAL, using GPIF and EPxFIFO
// if EPx WORDWIDE=0 then write byte(s)
// if EPx WORDWIDE=1 then write word(s)
void Peripheral_FIFOWrite( BYTE FIFO_EpNum )
{
while( !( GPIFTRIG & 0x80 ) ) // poll GPIFTRIG.7 Done bit
{
;
}
// trigger FIFO write transaction(s), using SFR
GPIFTRIG = FIFO_EpNum; // R/W=0, EP[1:0]=FIFO_EpNum for EPx wri
-te(s)
}
// read byte(s)/word(s) from PERIPHERAL, using GPIF and EPxFIFO
// if EPx WORDWIDE=0 then read byte(s)
// if EPx WORDWIDE=1 then read word(s)
void Peripheral_FIFORead( BYTE FIFO_EpNum )
{
while( !( GPIFTRIG & 0x80 ) ) // poll GPIFTRIG.7 GPIF Done bit
{
;
}
// trigger FIFO read transaction(s), using SFR
GPIFTRIG = GPIFTRIGRD | FIFO_EpNum; // R/W=1, EP[1:0]=FIFO_EpNum
- for EPx read(s)
}
void main( void )
{
WORD xdata wData = 0x0000;
BYTE xdata bData = 0x00;
WORD myi = 0x0000;
BOOL bResult = 1;
OtherInit( );
GpifInit( );
if( bResult == 0 )
{ // stub out unused functions; avoid "UNCALLED SEGMENT" link er
-ror
Peripheral_SingleWordWrite( 0x5678 );
Peripheral_SingleByteWrite( 0xAA );
Peripheral_SingleWordRead( &wData );
Peripheral_SingleByteRead( &bData );
// GPIF automatically throttles when performing FIFO read(s)/w
-rite(s)
// ...what this means is that it doesn't transition from IDLE,
- while...
// ...the EPx OUT FIFO is empty... OR ...the EPx IN FIFO is fu
-ll...
Peripheral_FIFOWrite( GPIF_EP2 ); // GPIF will not read from a
-n empty FIFO
Peripheral_FIFORead( GPIF_EP8 ); // GPIF will not write to a
-full FIFO
Peripheral_SetEP2GPIFTC( 0x0000 );
C51 COMPILER V6.10 GPIF 07/07/2005 13:31:07 PAGE 13
Peripheral_SetEP4GPIFTC( 0x0000 );
Peripheral_SetEP6GPIFTC( 0x0000 );
Peripheral_SetEP8GPIFTC( 0x0000 );
SetEP2GPIFFLGSEL( GPIF_FLGSELPF );
SetEP4GPIFFLGSEL( GPIF_FLGSELEF );
SetEP6GPIFFLGSEL( GPIF_FLGSELFF );
SetEP8GPIFFLGSEL( GPIF_FLGSELPF );
SetEP2GPIFPFSTOP(); // use GPIF_PF to transition GPIF to done
SetEP4GPIFPFSTOP(); // use GPIF_PF to transition GPIF to done
SetEP6GPIFPFSTOP(); // use GPIF_PF to transition GPIF to done
SetEP8GPIFPFSTOP(); // use GPIF_PF to transition GPIF to done
}
Peripheral_SetAddress( 0x0155 );
while( 1 )
{ // ...the EPx WORDWIDE bits must to be set to
// ...configure PORTD as FD[15:8] for single transactions
if( EP2FIFOCFG & 0x01 ) // If 16-bit mode - EPx WORDWIDE=1
{ // illustrate use of efficient 16 bit functions
Peripheral_SingleWordWrite( 0xAA55 );
Peripheral_SingleWordRead( &wData );
}
else
{
Peripheral_SingleByteWrite( 0xA5 );
Peripheral_SingleByteRead( &bData );
}
}
}
#endif
C51 COMPILER V6.10 GPIF 07/07/2005 13:31:07 PAGE 14
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION GpifInit (BEGIN)
; SOURCE LINE # 197
; SOURCE LINE # 198
; SOURCE LINE # 221
0000 900000 E MOV DPTR,#IFCONFIG
0003 74E2 MOV A,#0E2H
0005 F0 MOVX @DPTR,A
; SOURCE LINE # 230
0006 900000 E MOV DPTR,#GPIFABORT
0009 74FF MOV A,#0FFH
000B F0 MOVX @DPTR,A
; SOURCE LINE # 232
000C 900000 R MOV DPTR,#InitData
000F E0 MOVX A,@DPTR
0010 900000 E MOV DPTR,#GPIFREADYCFG
0013 F0 MOVX @DPTR,A
; SOURCE LINE # 233
0014 900000 R MOV DPTR,#InitData+01H
0017 E0 MOVX A,@DPTR
0018 900000 E MOV DPTR,#GPIFCTLCFG
001B F0 MOVX @DPTR,A
; SOURCE LINE # 234
001C 900000 R MOV DPTR,#InitData+02H
001F E0 MOVX A,@DPTR
0020 900000 E MOV DPTR,#GPIFIDLECS
0023 F0 MOVX @DPTR,A
; SOURCE LINE # 235
0024 900000 R MOV DPTR,#InitData+03H
0027 E0 MOVX A,@DPTR
0028 900000 E MOV DPTR,#GPIFIDLECTL
002B F0 MOVX @DPTR,A
; SOURCE LINE # 236
002C 900000 R MOV DPTR,#InitData+05H
002F E0 MOVX A,@DPTR
0030 900000 E MOV DPTR,#GPIFWFSELECT
0033 F0 MOVX @DPTR,A
; SOURCE LINE # 237
0034 900000 R MOV DPTR,#InitData+06H
0037 E0 MOVX A,@DPTR
0038 900000 E MOV DPTR,#GPIFREADYSTAT
003B F0 MOVX @DPTR,A
; SOURCE LINE # 240
003C 75AF07 MOV AUTOPTRSETUP,#07H
; SOURCE LINE # 246
003F 7400 R MOV A,#HIGH WaveData
0041 F59A MOV APTR1H,A
; SOURCE LINE # 247
0043 7400 R MOV A,#LOW WaveData
0045 F59B MOV APTR1L,A
; SOURCE LINE # 250
0047 759DE4 MOV AUTOPTRH2,#0E4H
; SOURCE LINE # 251
004A E4 CLR A
004B F59E MOV AUTOPTRL2,A
; SOURCE LINE # 254
;---- Variable 'i' assigned to Register 'R7' ----
004D FF MOV R7,A
004E ?C0001:
; SOURCE LINE # 255
C51 COMPILER V6.10 GPIF 07/07/2005 13:31:07 PAGE 15
; SOURCE LINE # 256
004E 900000 E MOV DPTR,#XAUTODAT1
0051 E0 MOVX A,@DPTR
0052 900000 E MOV DPTR,#XAUTODAT2
0055 F0 MOVX @DPTR,A
; SOURCE LINE # 257
0056 0F INC R7
0057 BF80F4 CJNE R7,#080H,?C0001
005A ?C0002:
; SOURCE LINE # 260
005A 900000 E MOV DPTR,#PORTCCFG
005D 74FF MOV A,#0FFH
005F F0 MOVX @DPTR,A
; SOURCE LINE # 261
0060 F5B4 MOV OEC,A
; SOURCE LINE # 262
0062 900000 E MOV DPTR,#PORTECFG
0065 E0 MOVX A,@DPTR
0066 4480 ORL A,#080H
0068 F0 MOVX @DPTR,A
; SOURCE LINE # 263
0069 43B69F ORL OEE,#09FH
; SOURCE LINE # 265
006C E4 CLR A
006D 900000 E MOV DPTR,#PORTACFG
0070 F0 MOVX @DPTR,A
; SOURCE LINE # 266
0071 75B20F MOV OEA,#0FH
; SOURCE LINE # 268
0074 900000 E MOV DPTR,#EP2FIFOCFG
0077 E0 MOVX A,@DPTR
0078 F0 MOVX @DPTR,A
; SOURCE LINE # 269
0079 900000 E MOV DPTR,#EP4FIFOCFG
007C E0 MOVX A,@DPTR
007D F0 MOVX @DPTR,A
; SOURCE LINE # 270
007E 900000 E MOV DPTR,#EP6FIFOCFG
0081 E0 MOVX A,@DPTR
0082 F0 MOVX @DPTR,A
; SOURCE LINE # 271
0083 900000 E MOV DPTR,#EP8FIFOCFG
0086 E0 MOVX A,@DPTR
0087 F0 MOVX @DPTR,A
; SOURCE LINE # 278
0088 75B5FF MOV OED,#0FFH
; SOURCE LINE # 279
008B E4 CLR A
008C F5B0 MOV IOD,A
; SOURCE LINE # 280
008E F5B1 MOV IOE,A
; SOURCE LINE # 283
0090 00 NOP
0091 00 NOP
0092 00 NOP
; SOURCE LINE # 284
0093 900000 E MOV DPTR,#GPIFADRH
0096 F0 MOVX @DPTR,A
; SOURCE LINE # 285
0097 00 NOP
0098 00 NOP
0099 00 NOP
C51 COMPILER V6.10 GPIF 07/07/2005 13:31:07 PAGE 16
; SOURCE LINE # 286
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -