⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pdiusbd12.asm

📁 dsp转换USB通讯程序样例
💻 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 + -