📄 pdiusbd12.asm
字号:
#include "PDIUSBD12.h"
#include "defBF531.h"
.global bEnable,bAddress,bEndp,bStalled,bLen,pBuf;
.section SECTION_Data; //8bit width, total size: 16K Byte
.align 4;
.byte4 bAddress;
.byte4 bEnable;
.byte4 bEndp;
.byte4 bStalled;
.byte4 bLen;
.byte4 pBuf;
.section SECTION_Code2;
.global InitD12;
InitD12:
[ --SP ] = RETS;
call ReConnectD12;
call ReadChipID;
call SendResume;
p0.l=lo(bAddress);
p0.h=hi(bAddress);
r0=0x1;
[p0]=r0;
p0.l=lo(bEnable);
p0.h=hi(bEnable);
r0=0x1;
[p0]=r0;
call SetAddressEnable;
call SetEndPointEnable;
//delay for a while
r0.l=1000;
call MsDelay;
call ReadIntReg;
p0.l=lo(bEndp);
p0.h=hi(bEndp);
r0=0x0;
[p0]=r0;
call ReadLastTransactionStatus;
call SelectEndpoint;
call ReadEndpointStatus;
p0.l=lo(bLen);
p0.h=hi(bLen);
r0=8;
[p0]=r0;
p0.l=lo(pBuf);
p0.h=hi(pBuf);
r0.l=lo(UsbCtrlBuf);
r0.h=hi(UsbCtrlBuf);
[p0]=r0;
call ReadEndpoint;
call WriteEndpoint;
call ReadIntReg;
RETS = [ SP++ ];
rts;
InitD12.end:
.global ReConnectD12;
ReConnectD12:
[ --SP ] = RETS;
[ --SP ] = r0;
//disconnect D12 from the host
call DisconnectD12;
//delay for a while
r0.l=1000;
call MsDelay;
//connect D12 to the host
call ConnectD12;
r0 = [ SP++ ];
RETS = [ SP++ ];
rts;
ReConnectD12.END:
DisconnectD12:
[ --SP ] = RETS;
[ --SP ]=p0; //push p0
[ --SP ]=r0; //push r0
////write command byte
p0.l=lo(D12Data);
p0.h=hi(D12Data);
r0.l=0xF3;
w[p0]=r0.l;
call CmdOutPortB;
////write data byte 1
p0.l=lo(D12Data);
p0.h=hi(D12Data);
r0.l=D12_NOLAZYCLOCK;
w[p0]=r0.l;
call DataOutPortB;
////write data byte 2
p0.l=lo(D12Data);
p0.h=hi(D12Data);
r0.l=D12_SETTOONE | D12_CLOCK_12M;
w[p0]=r0.l;
call DataOutPortB;
r0=[ SP++ ]; //pop r0
p0=[ SP++ ]; //pop p0
RETS = [ SP++ ];
rts;
DisconnectD12.end:
ConnectD12:
[ --SP ] = RETS;
[ --SP ]=p0; //push p0
[ --SP ]=r0; //push r0
//connect D12 to the host
////write command byte
p0.l=lo(D12Data);
p0.h=hi(D12Data);
r0.l=0xF3;
w[p0]=r0.l;
call CmdOutPortB;
////write data byte 1
p0.l=lo(D12Data);
p0.h=hi(D12Data);
r0.l=D12_NOLAZYCLOCK|D12_SOFTCONNECT;
w[p0]=r0.l;
call DataOutPortB;
////write data byte 2
p0.l=lo(D12Data);
p0.h=hi(D12Data);
r0.l=D12_SETTOONE | D12_CLOCK_12M;
w[p0]=r0.l;
call DataOutPortB;
r0=[ SP++ ]; //pop r0
p0=[ SP++ ]; //pop p0
RETS = [ SP++ ];
rts;
ConnectD12.end:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -