📄 d12hal.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 + -