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

📄 d12hal.asm

📁 dsp转换USB通讯程序样例
💻 ASM
字号:
#include "PDIUSBD12.h"
#include "defBF531.h"

.global D12Addr,D12Data;

.section SECTION_Data;  //8bit width, total size: 16K Byte
.align 4;
.byte4 D12Addr;
.byte4 D12Data;

.section SECTION_Code2;

/************************************************************
** 函数名称: cmdoutportb()
** 功能描述: 向D12写入命令
** 输   入: D12Data:    命令字节
** 输   出: 无
************************************************************/
.global CmdOutPortB;
CmdOutPortB:
	[ --SP ] = RETS;
	
	[ --SP ]=p0;		//push p0
	[ --SP ]=p1;		//push p1
	[ --SP ]=r0;		//push r0
	
	//load command address to p0
	p0.l=D12CmdAddr_L;
	p0.h=D12CmdAddr_H;
	
	//read the command byte you want to write
	p1.l=lo(D12Data);
	p1.h=hi(D12Data);
	r0=[p1];
	nop;nop;nop;nop;
	
	//write the byte to D12
	w[p0]=r0.l;
	
	//Delay 650ns to meet the requirement of D12
	call Delay650ns;
	
	r0=[ SP++ ];		//pop r0
	p1=[ SP++ ];		//pop p1
	p0=[ SP++ ];		//pop p0
	
	RETS = [ SP++ ];
	rts;
CmdOutPortB.end:


/************************************************************
** 函数名称: dataoutportb()
** 功能描述: 向D12写入数据
** 输   入: D12Data:    数据字节
** 输   出: 无
************************************************************/
.global DataOutPortB;
DataOutPortB:
	[ --SP ] = RETS;
	
	[ --SP ]=p0;		//push p0
	[ --SP ]=p1;		//push p1
	[ --SP ]=r0;		//push r0
	
	//load command address to p0
	p0.l=D12DataAddr_L;
	p0.h=D12DataAddr_H;
	
	//read the data byte you want to write
	p1.l=lo(D12Data);
	p1.h=hi(D12Data);
	r0=[p1];
	nop;nop;nop;nop;
	
	//write the byte to D12
	w[p0]=r0.l;
	
	//Delay 650ns to meet the requirement of D12
	call Delay650ns;
	
	r0=[ SP++ ];		//pop r0
	p1=[ SP++ ];		//pop p1
	p0=[ SP++ ];		//pop p0
	
	RETS = [ SP++ ];
	rts;
DataOutPortB.end:


/************************************************************
** 函数名称: inportd()
** 功能描述: 读入数据
** 输   入: 无
** 输   出: 读到的数据
*************************************************************/
.global InPortD;
InPortD:
	[ --SP ] = RETS;
	
	[ --SP ]=p0;		//push p0
	[ --SP ]=r0;		//push r0
	
	//set the Address of D12 Data to p0
	p0.l=D12DataAddr_L;
	p0.h=D12DataAddr_H;
	
	//read 1 byte
	r0.l= w[p0];
	
	//write the byte to D12Data
	p0.l=lo(D12Data);
	p0.h=hi(D12Data);
	w[p0]=r0.l;
	
	//Delay 650ns to meet the requirement of D12
	call Delay650ns;
	
	r0=[ SP++ ];		//pop r0
	p0=[ SP++ ];		//pop p0
	
	RETS = [ SP++ ];
	rts;
InPortD.end:



/************************************************************
** 函数名称: ResetD12
** 功能描述: Reset D12
** 输   入: 无
** 输   出: 无
*************************************************************/
.global ResetD12;
ResetD12:
	[ --SP ] = RETS;
	[ --SP ]=p0;		//push p0
	[ --SP ]=r0;		//push r0
	
	//set I/O direction
	p0.l= lo (FIO_DIR);
	p0.h= hi (FIO_DIR);
	r0.l=0xb000;
	w[ p0 ]=r0.l;
	
	//drive Reset to Low
	p0.l= lo (FIO_FLAG_D);
	p0.h= hi (FIO_FLAG_D);
	r0.l=0x0000;
	w[ p0 ]=r0.l;
	
	//delay for a while
	[ --SP ]=lc0;
	[ --SP ]=lt0;
	[ --SP ]=lb0;
	
	r0.l=300;
	call MsDelay;
	
	nop;nop;nop;
	lb0=[ SP++ ];
	lt0=[ SP++ ];
	lc0=[ SP++ ];
	
	//drive Reset to High
	p0.l= lo (FIO_FLAG_D);
	p0.h= hi (FIO_FLAG_D);
	r0.l=0x2000;
	w[ p0 ]=r0.l;
	
	r0=[ SP++ ];		//pop r0
	p0=[ SP++ ];		//pop p0
	RETS = [ SP++ ];
	rts;
ResetD12.end:




.global Delay650ns;
Delay650ns:
	[ --SP ] = RETS;
	
	nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
	nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
	nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
	nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
	nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
	nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
	nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
	nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
	nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
	nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
	nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
	nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
	nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
	nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
	nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
	nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
	nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
	nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
	nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
	nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
	nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
	nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
	nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
	nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
	nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
	nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;

	RETS = [ SP++ ];
	rts;
Delay650ns.end:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -