📄 splc501driver_io.lst
字号:
< // End of hardware.inc
< //========================================================================================
<
< //端口需要改动时需要修改以下定义
<
< .define DATA_PORT_HIGHT 0x00 //数据口输出高八位定义,若数据接口为IO端口的高八位,则不屏蔽
< //.define M_IO_DATA_MASK 0x00ff //若数据口为高八位,则定义值为0xff00
< .define M_IO_DATA_MASK 0xff00 //id
<
< //.define M_IO_EP 0x0020 //EP与SPCE061A的接口定义
< //.define M_IO_RW 0x0010 //RW与SPCE061A的接口定义
< //.define M_IO_AO 0x0008 //AO与SPCE061A的接口定义
< //.define M_IO_CS 0x0004 //CS与SPCE061A的接口定义
< .define M_IO_EP 0x2000 //id
< .define M_IO_RW 0x1000 //id
< .define M_IO_AO 0x0800 //id
< .define M_IO_CS 0x0200 //id
<
< .define P_IO_Data_D P_IOA_Data
< .define P_IO_Data_A P_IOA_Attrib
< .define P_IO_Data_Di P_IOA_Dir
< .define P_IO_Data P_IO_Data_D
< .define P_IO_Data_B P_IOA_Buffer
<
<
< .define P_IO_Ctrl_D P_IOB_Data
< .define P_IO_Ctrl_A P_IOB_Attrib
< .define P_IO_Ctrl_Di P_IOB_Dir
< .define P_IO_Ctrl_B P_IOB_Buffer
< .define P_IO_Ctrl P_IO_Ctrl_D
00000000 .ram
0000AF97 .code
//***************************************************************************//
//程序:F_SPLC501_Initial_IO()
//描述:SPLC501接口的初始化程序 C语言调用,汇编语言调用
//参数:无
//声明:小丑 20050518 sunnorth Mz Design
//注意:破坏R1寄存器,保护R1
//***************************************************************************//
.public _F_SPLC501_Initial_IO
_F_SPLC501_Initial_IO:
F_SPLC501_Initial_IO:
0000AF97 88 D2 push r1 to [sp]
0000AF98 11 93 02 70 r1 = [P_IO_Data_Di]
0000AF9A 09 A3 00 FF r1 |= M_IO_DATA_MASK
//r1 |= 0xff00
0000AF9C 19 D3 02 70 [P_IO_Data_Di] = r1
0000AF9E 11 93 03 70 r1 = [P_IO_Data_A]
0000AFA0 09 A3 00 FF r1 |= M_IO_DATA_MASK
0000AFA2 19 D3 03 70 [P_IO_Data_A] = r1
0000AFA4 11 93 00 70 r1 = [P_IO_Data_D]
0000AFA6 09 A3 00 FF r1 |= M_IO_DATA_MASK
0000AFA8 19 D3 00 70 [P_IO_Data_D] = r1
0000AFAA 11 93 07 70 r1 = [P_IO_Ctrl_Di]
0000AFAC 09 A3 00 3A r1 |= (M_IO_EP+M_IO_AO+M_IO_RW+M_IO_CS)
0000AFAE 19 D3 07 70 [P_IO_Ctrl_Di] = r1
0000AFB0 11 93 08 70 r1 = [P_IO_Ctrl_A]
0000AFB2 09 A3 00 3A r1 |= (M_IO_EP+M_IO_AO+M_IO_RW+M_IO_CS)
0000AFB4 19 D3 08 70 [P_IO_Ctrl_A] = r1
0000AFB6 11 93 05 70 r1 = [P_IO_Ctrl_D]
0000AFB8 09 A3 FF C5 r1 |= ~(M_IO_EP+M_IO_AO+M_IO_RW+M_IO_CS)
0000AFBA 19 D3 05 70 [P_IO_Ctrl_D] = r1
0000AFBC 88 90 pop r1 from [sp]
0000AFBD 90 9A retf
//***************************************************************************//
//程序:F_SPLC501_Write_Com()
//描述:往SPLC501里写一个字节指令 C语言调用,汇编语言调用
//参数:r1送入要传送的指令
//声明:小丑 20050518 sunnorth Mz Design
//注意:破坏R1寄存器,保护R2、R5寄存器
//***************************************************************************//
.public _F_SPLC501_Write_Com
_F_SPLC501_Write_Com:
F_SPLC501_Write_Com:
0000AFBE 90 D6 push r2,r3 to [sp]
0000AFBF 88 DA push r5 to [sp]
0000AFC0 12 95 06 70 r2 = [P_IO_Ctrl_B] //得到IOB口的状态
0000AFC2 0A B5 FF DD r2 &= ~(M_IO_EP+M_IO_CS) //EP CS to Low 20050613 Edit by xinqiang
0000AFC4 1A D5 06 70 [P_IO_Ctrl_B] = r2 //EP Low
0000AFC6 12 95 06 70 r2 = [P_IO_Ctrl_B]
0000AFC8 0A B5 FF E7 r2 &= ~(M_IO_AO+M_IO_RW)
0000AFCA 1A D5 06 70 [P_IO_Ctrl_B] = r2 //AO RW Low
.ifdef DATA_PORT_HIGHT
0000AFCC 59 93 r1 = r1 lsl 4
0000AFCD 59 93 r1 = r1 lsl 4
.endif
0000AFCE 13 97 01 70 r3 = [P_IO_Data_B]
0000AFD0 0B B7 FF 00 r3 &= ~M_IO_DATA_MASK
0000AFD2 09 B3 00 FF r1 &= M_IO_DATA_MASK //Get Low Data Command
0000AFD4 03 03 r1 = r1+r3
0000AFD5 19 D3 00 70 [P_IO_Data] = r1 //往数据口送数据
0000AFD7 00 EE nop
0000AFD8 0A A5 00 20 r2 |= M_IO_EP //EP to Hight
0000AFDA 1A D5 05 70 [P_IO_Ctrl] = r2
0000AFDC 00 EE nop
0000AFDD 0A B5 FF DF r2 &= ~M_IO_EP //EP to Low
0000AFDF 0A A5 00 02 r2 |= M_IO_CS //CS to hight 20050613 Edit by xinqiang
0000AFE1 1A D5 05 70 [P_IO_Ctrl] = r2
0000AFE3 88 98 pop r5 from [sp]
0000AFE4 90 92 pop r2,r3 from [sp]
0000AFE5 90 9A retf
//***************************************************************************//
//程序:F_SPLC501_Write_Data()
//描述:往SPLC501里写一个字节数据 C语言调用,汇编语言调用
//参数:r1送入要传送的数据
//声明:小丑 20050518 sunnorth Mz Design
//注意:破坏R1寄存器,保护R2、R5寄存器
//***************************************************************************//
.public _F_SPLC501_Write_Data
_F_SPLC501_Write_Data:
F_SPLC501_Write_Data:
0000AFE6 88 D4 push r2 to [sp]
0000AFE7 12 95 06 70 r2 = [P_IO_Ctrl_B] //得到IOB口的状态
0000AFE9 0A B5 FF DD r2 &= ~(M_IO_EP+M_IO_CS) //EP CS to Low 20050613 Editby xinqiang
0000AFEB 1A D5 06 70 [P_IO_Ctrl_B] = r2 //EP Low
0000AFED 12 95 06 70 r2 = [P_IO_Ctrl_B]
0000AFEF 0A A5 00 08 r2 |= M_IO_AO
0000AFF1 0A B5 FF EF r2 &= ~(M_IO_RW)
0000AFF3 1A D5 06 70 [P_IO_Ctrl_B] = r2 //AO Hight, RW Low
.ifdef DATA_PORT_HIGHT
0000AFF5 59 93 r1 = r1 lsl 4
0000AFF6 59 93 r1 = r1 lsl 4
.endif
0000AFF7 13 97 01 70 r3 = [P_IO_Data_B]
0000AFF9 0B B7 FF 00 r3 &= ~M_IO_DATA_MASK
0000AFFB 09 B3 00 FF r1 &= M_IO_DATA_MASK //Get Low Data Command
0000AFFD 03 03 r1 = r1+r3
0000AFFE 19 D3 00 70 [P_IO_Data] = r1 //往数据口送数据
0000B000 00 EE nop
0000B001 0A A5 00 20 r2 |= M_IO_EP //EP to Hight
0000B003 1A D5 05 70 [P_IO_Ctrl] = r2
0000B005 00 EE nop
0000B006 0A B5 FF DF r2 &= ~M_IO_EP //EP to Low
0000B008 0A A5 00 02 r2 |= M_IO_CS //CS to Hight 20050613 Editby xinqiag
0000B00A 1A D5 05 70 [P_IO_Ctrl] = r2
0000B00C 88 92 pop r2 from [sp]
0000B00D 90 9A retf
//***************************************************************************//
//程序:F_SPLC501_Read_Data()
//描述:从SPLC501里读一个字节数据 C语言调用,汇编语言调用
//参数:r1输出传送的数据
//声明:小丑 20050518 sunnorth Mz Design
//注意:破坏R1寄存器,保护R2、R5寄存器
//***************************************************************************//
.public _F_SPLC501_Read_Data
.public F_SPLC501_Read_Data
_F_SPLC501_Read_Data:
F_SPLC501_Read_Data:
0000B00E 40 F0 13 B0 call F_SPLC501_Read_Data1
0000B010 40 F0 13 B0 call F_SPLC501_Read_Data1
0000B012 90 9A retf
F_SPLC501_Read_Data1:
0000B013 88 D4 push r2 to [sp]
0000B014 12 95 02 70 r2 = [P_IO_Data_Di] //设置数据口为输入
0000B016 0A B5 FF 00 r2 &= ~M_IO_DATA_MASK
0000B018 1A D5 02 70 [P_IO_Data_Di] = r2
0000B01A 12 95 06 70 r2 = [P_IO_Ctrl_B] //得到IOB口的状态
0000B01C 0A B5 FF DD r2 &= ~(M_IO_EP+M_IO_CS) //EP CS to Low 20050613 Editby xinqiang
0000B01E 1A D5 06 70 [P_IO_Ctrl_B] = r2 //EP Low
0000B020 0A A5 00 18 r2 |= (M_IO_AO+M_IO_RW)
0000B022 1A D5 06 70 [P_IO_Ctrl_B] = r2 //AO Hight, RW Hight
0000B024 00 EE nop
0000B025 0A A5 00 20 r2 |= M_IO_EP
0000B027 1A D5 06 70 [P_IO_Ctrl_B] = r2 //产生EP高电平,
0000B029 00 EE nop
0000B02A 0A B5 FF DF r2 &= ~M_IO_EP //EP to Low
0000B02C 1A D5 05 70 [P_IO_Ctrl] = r2
0000B02E 11 93 00 70 r1 = [P_IO_Data]
0000B030 09 B3 00 FF r1 &= M_IO_DATA_MASK
0000B032 0A A5 00 02 r2 |= M_IO_CS
0000B034 1A D5 05 70 [P_IO_Ctrl] = r2
0000B036 12 95 02 70 r2 = [P_IO_Data_Di] //恢复数据口为输出状态
0000B038 0A A5 00 FF r2 |= M_IO_DATA_MASK
0000B03A 1A D5 02 70 [P_IO_Data_Di] = r2
.ifdef DATA_PORT_HIGHT
0000B03C 79 93 r1 = r1 lsr 4
0000B03D 79 93 r1 = r1 lsr 4
.endif
0000B03E 88 92 pop r2 from [sp]
0000B03F 90 9A retf
//***************************************************************************//
//程序:F_SPLC501_Read_Status()
//描述:从SPLC501里读状态字数据 C语言调用,汇编语言调用
//参数:r1输出传送的数据
//声明:小丑 20050518 sunnorth Mz Design
//注意:破坏R1寄存器,保护R2寄存器
//***************************************************************************//
.public _F_SPLC501_Read_Status
.public F_SPLC501_Read_Status
_F_SPLC501_Read_Status:
F_SPLC501_Read_Status:
0000B040 88 D4 push r2 to [sp]
0000B041 12 95 02 70 r2 = [P_IO_Data_Di] //设置数据口为输入
0000B043 0A B5 FF 00 r2 &= ~M_IO_DATA_MASK
0000B045 1A D5 02 70 [P_IO_Data_Di] = r2
0000B047 12 95 06 70 r2 = [P_IO_Ctrl_B] //得到IOB口的状态
0000B049 0A B5 FF DD r2 &= ~(M_IO_EP+M_IO_CS) //EP CS to Low 20050613 Editby Xinqiang
0000B04B 1A D5 06 70 [P_IO_Ctrl_B] = r2 //EP Low
0000B04D 12 95 06 70 r2 = [P_IO_Ctrl_B]
0000B04F 0A B5 FF F7 r2 &= ~(M_IO_AO)
0000B051 0A A5 00 10 r2 |= M_IO_RW
0000B053 1A D5 06 70 [P_IO_Ctrl_B] = r2 //AO Hight, RW Hight
0000B055 00 EE nop
0000B056 0A A5 00 20 r2 |= M_IO_EP
0000B058 1A D5 06 70 [P_IO_Ctrl_B] = r2 //产生EP高电平,
0000B05A 00 EE nop
0000B05B 11 93 00 70 r1 = [P_IO_Data]
0000B05D 09 B3 00 FF r1 &= M_IO_DATA_MASK
0000B05F 0A B5 FF DF r2 &= ~M_IO_EP //EP to Low
0000B061 0A A5 00 02 r2 |= M_IO_CS //CS to Hight 20050613 Editby Xinqiang
0000B063 1A D5 05 70 [P_IO_Ctrl] = r2
0000B065 12 95 02 70 r2 = [P_IO_Data_Di] //恢复数据口为输出状态
0000B067 0A A5 00 FF r2 |= M_IO_DATA_MASK
0000B069 1A D5 02 70 [P_IO_Data_Di] = r2
.ifdef DATA_PORT_HIGHT
0000B06B 79 93 r1 = r1 lsr 4
0000B06C 79 93 r1 = r1 lsr 4
.endif
0000B06D 88 92 pop r2 from [sp]
0000B06E 90 9A retf
//****************************************************************************************************
// 128X64I液晶底层驱动[6X8]字体库
// 设计者: powerint
// 描 述: [6X8]西文字符的字模数据 (纵向取模,字节倒序)
// 日 期: 2004.4.27
// 版本号: 1.1
//****************************************************************************************************
.PUBLIC _Asii8
_Asii8:
0000B06F 00 00 00 00 .DW 0x0000,0x0000,0x0000,0x0000,0x065F,0x0600,0x0007,0x0300,0x0703,0x0024,0x7E24,0x7E24
00 00 00 00
5F 06 00 06
07 00 00 03
03 07 24 00
24 7E 24 7E
0000B07B 24 00 6A 2B .DW 0x0024,0x2B6A,0x1200,0x0063,0x1308,0x6463,0x0036,0x4956,0x2050,0x0000,0x0703,0x0000
00 12 63 00
08 13 63 64
36 00 56 49
50 20 00 00
03 07 00 00
0000B087 00 00 41 3E .DW 0x0000,0x3E41,0x0000,0x0000,0x413E,0x0000,0x0008,0x3E1C,0x3E08,0x0008,0x083E,0x0808
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -