📄 splc501driver_io.lst
字号:
Sunplus u'nSP Assembler - Ver. 1.14.3.1
Listing File Has Been Relocated
//***************************************************************************//
//文件描述:SPLC501底层驱动程序,主要包括对液晶的IO口初始化、写指令、写数据、
//读数据,以及西文ASCII表数据
//声明: 小丑 20050518 Sunnorth Mz Design
//
//
//***************************************************************************//
.include SPLC501Driver_IO.inc
< .DEFINE P_IOA_Data 0x7000 // Write Data into data register and read from IOA pad
< .DEFINE P_IOA_Buffer 0x7001 // Write Data into buffer register and read from buffer register
< .DEFINE P_IOA_Dir 0x7002 // Direction vector for IOA
< .DEFINE P_IOA_Attrib 0x7003 // Attribute vector for IOA
< .DEFINE P_IOA_Latch 0x7004 // Latch PortA data for key change wake-up
<
< .DEFINE P_IOB_Data 0x7005 // Write Data into the data register and read from IOB pad
< .DEFINE P_IOB_Buffer 0x7006 // Write Data into buffer register and read from buffer register
< .DEFINE P_IOB_Dir 0x7007 // Direction vector for IOB
< .DEFINE P_IOB_Attrib 0x7008 // Attribute vector for IOB
< //端口需要改动时需要修改以下定义
<
< .define DATA_PORT_HIGHT 0x00 //数据口输出高八位定义,若数据接口为IO端口的高八位,则不屏蔽
< .define M_IO_DATA_MASK 0xff00 //若数据口为高八位,则定义值为0xff00
<
< .define M_IO_EP 0x0040 //EP与SPCE061A的接口定义
< .define M_IO_RW 0x0020 //RW与SPCE061A的接口定义
< .define M_IO_AO 0x0010 //AO与SPCE061A的接口定义
< .define M_IO_CS 0x0200 //CS与SPCE061A的接口定义
< //数据端口定义
< .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_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
< //.....end端口修改即修订到前面即可
< .define P_IO_Data P_IO_Data_D
< .define P_IO_Ctrl P_IO_Ctrl_D
00000000 .ram
0000C5C2 .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:
0000C5C2 88 D2 push r1 to [sp]
0000C5C3 11 93 02 70 r1 = [P_IO_Data_Di]
0000C5C5 09 A3 00 FF r1 |= M_IO_DATA_MASK
0000C5C7 19 D3 02 70 [P_IO_Data_Di] = r1
0000C5C9 11 93 03 70 r1 = [P_IO_Data_A]
0000C5CB 09 A3 00 FF r1 |= M_IO_DATA_MASK
0000C5CD 19 D3 03 70 [P_IO_Data_A] = r1
0000C5CF 11 93 01 70 r1 = [P_IO_Data_B]
0000C5D1 09 A3 00 FF r1 |= M_IO_DATA_MASK
0000C5D3 19 D3 00 70 [P_IO_Data_D] = r1
0000C5D5 11 93 07 70 r1 = [P_IO_Ctrl_Di]
0000C5D7 09 A3 70 02 r1 |= (M_IO_EP+M_IO_AO+M_IO_RW+M_IO_CS)
0000C5D9 19 D3 07 70 [P_IO_Ctrl_Di] = r1
0000C5DB 11 93 08 70 r1 = [P_IO_Ctrl_A]
0000C5DD 09 A3 70 02 r1 |= (M_IO_EP+M_IO_AO+M_IO_RW+M_IO_CS)
0000C5DF 19 D3 08 70 [P_IO_Ctrl_A] = r1
0000C5E1 11 93 06 70 r1 = [P_IO_Ctrl_B]
0000C5E3 09 A3 8F FD r1 |= ~(M_IO_EP+M_IO_AO+M_IO_RW+M_IO_CS)
0000C5E5 19 D3 05 70 [P_IO_Ctrl_D] = r1
0000C5E7 88 90 pop r1 from [sp]
0000C5E8 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:
0000C5E9 90 D6 push r2,r3 to [sp]
0000C5EA 88 DA push r5 to [sp]
0000C5EB 12 95 06 70 r2 = [P_IO_Ctrl_B] //得到IOB口的状态
0000C5ED 0A B5 BF FD r2 &= ~(M_IO_EP+M_IO_CS) //EP CS to Low 20050613 Edit by xinqiang
0000C5EF 1A D5 06 70 [P_IO_Ctrl_B] = r2 //EP Low
0000C5F1 12 95 06 70 r2 = [P_IO_Ctrl_B]
0000C5F3 0A B5 CF FF r2 &= ~(M_IO_AO+M_IO_RW)
0000C5F5 1A D5 06 70 [P_IO_Ctrl_B] = r2 //AO RW Low
.ifdef DATA_PORT_HIGHT
0000C5F7 59 93 r1 = r1 lsl 4
0000C5F8 59 93 r1 = r1 lsl 4
.endif
0000C5F9 13 97 01 70 r3 = [P_IO_Data_B]
0000C5FB 0B B7 FF 00 r3 &= ~M_IO_DATA_MASK
0000C5FD 09 B3 00 FF r1 &= M_IO_DATA_MASK //Get Low Data Command
0000C5FF 03 03 r1 = r1+r3
0000C600 19 D3 00 70 [P_IO_Data] = r1 //往数据口送数据
0000C602 00 EE nop
0000C603 0A A5 40 00 r2 |= M_IO_EP //EP to Hight
0000C605 1A D5 05 70 [P_IO_Ctrl] = r2
0000C607 00 EE nop
0000C608 0A B5 BF FF r2 &= ~M_IO_EP //EP to Low
0000C60A 0A A5 00 02 r2 |= M_IO_CS //CS to hight 20050613 Edit by xinqiang
0000C60C 1A D5 05 70 [P_IO_Ctrl] = r2
0000C60E 88 98 pop r5 from [sp]
0000C60F 90 92 pop r2,r3 from [sp]
0000C610 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:
0000C611 88 D4 push r2 to [sp]
0000C612 12 95 06 70 r2 = [P_IO_Ctrl_B] //得到IOB口的状态
0000C614 0A B5 BF FD r2 &= ~(M_IO_EP+M_IO_CS) //EP CS to Low 20050613 Editby xinqiang
0000C616 1A D5 06 70 [P_IO_Ctrl_B] = r2 //EP Low
0000C618 12 95 06 70 r2 = [P_IO_Ctrl_B]
0000C61A 50 A4 r2 |= M_IO_AO
0000C61B 0A B5 DF FF r2 &= ~(M_IO_RW)
0000C61D 1A D5 06 70 [P_IO_Ctrl_B] = r2 //AO Hight, RW Low
.ifdef DATA_PORT_HIGHT
0000C61F 59 93 r1 = r1 lsl 4
0000C620 59 93 r1 = r1 lsl 4
.endif
0000C621 13 97 01 70 r3 = [P_IO_Data_B]
0000C623 0B B7 FF 00 r3 &= ~M_IO_DATA_MASK
0000C625 09 B3 00 FF r1 &= M_IO_DATA_MASK //Get Low Data Command
0000C627 03 03 r1 = r1+r3
0000C628 19 D3 00 70 [P_IO_Data] = r1 //往数据口送数据
0000C62A 00 EE nop
0000C62B 0A A5 40 00 r2 |= M_IO_EP //EP to Hight
0000C62D 1A D5 05 70 [P_IO_Ctrl] = r2
0000C62F 00 EE nop
0000C630 0A B5 BF FF r2 &= ~M_IO_EP //EP to Low
0000C632 0A A5 00 02 r2 |= M_IO_CS //CS to Hight 20050613 Editby xinqiag
0000C634 1A D5 05 70 [P_IO_Ctrl] = r2
0000C636 88 92 pop r2 from [sp]
0000C637 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:
0000C638 40 F0 3D C6 call F_SPLC501_Read_Data1
0000C63A 40 F0 3D C6 call F_SPLC501_Read_Data1
0000C63C 90 9A retf
F_SPLC501_Read_Data1:
0000C63D 88 D4 push r2 to [sp]
0000C63E 12 95 02 70 r2 = [P_IO_Data_Di] //设置数据口为输入
0000C640 0A B5 FF 00 r2 &= ~M_IO_DATA_MASK
0000C642 1A D5 02 70 [P_IO_Data_Di] = r2
0000C644 12 95 06 70 r2 = [P_IO_Ctrl_B] //得到IOB口的状态
0000C646 0A B5 BF FD r2 &= ~(M_IO_EP+M_IO_CS) //EP CS to Low 20050613 Editby xinqiang
0000C648 1A D5 06 70 [P_IO_Ctrl_B] = r2 //EP Low
0000C64A 70 A4 r2 |= (M_IO_AO+M_IO_RW)
0000C64B 1A D5 06 70 [P_IO_Ctrl_B] = r2 //AO Hight, RW Hight
0000C64D 00 EE nop
0000C64E 0A A5 40 00 r2 |= M_IO_EP
0000C650 1A D5 06 70 [P_IO_Ctrl_B] = r2 //产生EP高电平,
0000C652 00 EE nop
0000C653 0A B5 BF FF r2 &= ~M_IO_EP //EP to Low
0000C655 1A D5 05 70 [P_IO_Ctrl] = r2
0000C657 11 93 00 70 r1 = [P_IO_Data]
0000C659 09 B3 00 FF r1 &= M_IO_DATA_MASK
0000C65B 0A A5 00 02 r2 |= M_IO_CS
0000C65D 1A D5 05 70 [P_IO_Ctrl] = r2
0000C65F 12 95 02 70 r2 = [P_IO_Data_Di] //恢复数据口为输出状态
0000C661 0A A5 00 FF r2 |= M_IO_DATA_MASK
0000C663 1A D5 02 70 [P_IO_Data_Di] = r2
.ifdef DATA_PORT_HIGHT
0000C665 79 93 r1 = r1 lsr 4
0000C666 79 93 r1 = r1 lsr 4
.endif
0000C667 88 92 pop r2 from [sp]
0000C668 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:
0000C669 88 D4 push r2 to [sp]
0000C66A 12 95 02 70 r2 = [P_IO_Data_Di] //设置数据口为输入
0000C66C 0A B5 FF 00 r2 &= ~M_IO_DATA_MASK
0000C66E 1A D5 02 70 [P_IO_Data_Di] = r2
0000C670 12 95 06 70 r2 = [P_IO_Ctrl_B] //得到IOB口的状态
0000C672 0A B5 BF FD r2 &= ~(M_IO_EP+M_IO_CS) //EP CS to Low 20050613 Editby Xinqiang
0000C674 1A D5 06 70 [P_IO_Ctrl_B] = r2 //EP Low
0000C676 12 95 06 70 r2 = [P_IO_Ctrl_B]
0000C678 0A B5 EF FF r2 &= ~(M_IO_AO)
0000C67A 60 A4 r2 |= M_IO_RW
0000C67B 1A D5 06 70 [P_IO_Ctrl_B] = r2 //AO Hight, RW Hight
0000C67D 00 EE nop
0000C67E 0A A5 40 00 r2 |= M_IO_EP
0000C680 1A D5 06 70 [P_IO_Ctrl_B] = r2 //产生EP高电平,
0000C682 00 EE nop
0000C683 11 93 00 70 r1 = [P_IO_Data]
0000C685 09 B3 00 FF r1 &= M_IO_DATA_MASK
0000C687 0A B5 BF FF r2 &= ~M_IO_EP //EP to Low
0000C689 0A A5 00 02 r2 |= M_IO_CS //CS to Hight 20050613 Editby Xinqiang
0000C68B 1A D5 05 70 [P_IO_Ctrl] = r2
0000C68D 12 95 02 70 r2 = [P_IO_Data_Di] //恢复数据口为输出状态
0000C68F 0A A5 00 FF r2 |= M_IO_DATA_MASK
0000C691 1A D5 02 70 [P_IO_Data_Di] = r2
.ifdef DATA_PORT_HIGHT
0000C693 79 93 r1 = r1 lsr 4
0000C694 79 93 r1 = r1 lsr 4
.endif
0000C695 88 92 pop r2 from [sp]
0000C696 90 9A retf
//****************************************************************************************************
// 128X64I液晶底层驱动[6X8]字体库
// 设计者: powerint
// 描 述: [6X8]西文字符的字模数据 (纵向取模,字节倒序)
// 日 期: 2004.4.27
// 版本号: 1.1
//****************************************************************************************************
.PUBLIC _Asii8
_Asii8:
0000C697 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -