?? 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 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 0x0040 //EP與SPCE061A的接口定義
< .define M_IO_RW 0x0020 //RW與SPCE061A的接口定義
< .define M_IO_AO 0x0010 //AO與SPCE061A的接口定義
< .define M_IO_CS 0x0200 //CS與SPCE061A的接口定義B9
< //數據端口定義
< .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
00009DFB .code
//***************************************************************************//
//程序:F_SPLC501_Initial_IO()
//描述:SPLC501接口的初始化程序 C語言調用,匯編語言調用
//參數:無
//注意:破壞R1寄存器,保護R1
//***************************************************************************//
.public _F_SPLC501_Initial_IO
_F_SPLC501_Initial_IO:
F_SPLC501_Initial_IO:
00009DFB 88 D2 push r1 to [sp]
00009DFC 11 93 02 70 r1 = [P_IO_Data_Di]
00009DFE 09 A3 00 FF r1 |= M_IO_DATA_MASK
00009E00 19 D3 02 70 [P_IO_Data_Di] = r1
00009E02 11 93 03 70 r1 = [P_IO_Data_A]
00009E04 09 A3 00 FF r1 |= M_IO_DATA_MASK
00009E06 19 D3 03 70 [P_IO_Data_A] = r1
00009E08 11 93 01 70 r1 = [P_IO_Data_B]
00009E0A 09 A3 00 FF r1 |= M_IO_DATA_MASK
00009E0C 19 D3 00 70 [P_IO_Data_D] = r1
00009E0E 11 93 07 70 r1 = [P_IO_Ctrl_Di]
00009E10 09 A3 70 02 r1 |= (M_IO_EP+M_IO_AO+M_IO_RW+M_IO_CS)
00009E12 19 D3 07 70 [P_IO_Ctrl_Di] = r1
00009E14 11 93 08 70 r1 = [P_IO_Ctrl_A]
00009E16 09 A3 70 02 r1 |= (M_IO_EP+M_IO_AO+M_IO_RW+M_IO_CS)
00009E18 19 D3 08 70 [P_IO_Ctrl_A] = r1
00009E1A 11 93 06 70 r1 = [P_IO_Ctrl_B]
00009E1C 09 B3 8F FD r1 &= ~(M_IO_EP+M_IO_AO+M_IO_RW+M_IO_CS)
00009E1E 19 D3 05 70 [P_IO_Ctrl_D] = r1
00009E20 88 90 pop r1 from [sp]
00009E21 90 9A retf
//***************************************************************************//
//程序:F_SPLC501_Write_Com()
//描述:往SPLC501里寫一個字節指令 C語言調用,匯編語言調用
//參數:r1送入要傳送的指令
//聲明:
//注意:破壞R1寄存器,保護R2、R5寄存器
//***************************************************************************//
.public _F_SPLC501_Write_Com
_F_SPLC501_Write_Com:
F_SPLC501_Write_Com:
00009E22 90 D6 push r2,r3 to [sp]
00009E23 88 DA push r5 to [sp]
00009E24 12 95 06 70 r2 = [P_IO_Ctrl_B] //得到IOB口的狀態
00009E26 0A B5 BF FD r2 &= ~(M_IO_EP+M_IO_CS) //EP CS to Low 20050613 Edit by xinqiang
00009E28 1A D5 06 70 [P_IO_Ctrl_B] = r2 //EP Low
00009E2A 12 95 06 70 r2 = [P_IO_Ctrl_B]
00009E2C 0A B5 CF FF r2 &= ~(M_IO_AO+M_IO_RW)
00009E2E 1A D5 06 70 [P_IO_Ctrl_B] = r2 //AO RW Low
.ifdef DATA_PORT_HIGHT
00009E30 59 93 r1 = r1 lsl 4
00009E31 59 93 r1 = r1 lsl 4
.endif
00009E32 13 97 01 70 r3 = [P_IO_Data_B]
00009E34 0B B7 FF 00 r3 &= ~M_IO_DATA_MASK
00009E36 09 B3 00 FF r1 &= M_IO_DATA_MASK //Get Low Data Command
00009E38 03 03 r1 = r1+r3
00009E39 19 D3 00 70 [P_IO_Data] = r1 //往數據口送數據
00009E3B 00 EE nop
00009E3C 0A A5 40 00 r2 |= M_IO_EP //EP to Hight
00009E3E 1A D5 05 70 [P_IO_Ctrl] = r2
00009E40 00 EE nop
00009E41 0A B5 BF FF r2 &= ~M_IO_EP //EP to Low
00009E43 0A A5 00 02 r2 |= M_IO_CS //CS to hight 20050613 Edit by xinqiang
00009E45 1A D5 05 70 [P_IO_Ctrl] = r2
00009E47 88 98 pop r5 from [sp]
00009E48 90 92 pop r2,r3 from [sp]
00009E49 90 9A retf
//***************************************************************************//
//程序:F_SPLC501_Write_Data()
//描述:往SPLC501里寫一個字節數據 C語言調用,匯編語言調用
//參數:r1送入要傳送的數據
//聲明:
//注意:破壞R1寄存器,保護R2、R5寄存器
//***************************************************************************//
.public _F_SPLC501_Write_Data
_F_SPLC501_Write_Data:
F_SPLC501_Write_Data:
00009E4A 88 D4 push r2 to [sp]
00009E4B 12 95 06 70 r2 = [P_IO_Ctrl_B] //得到IOB口的狀態
00009E4D 0A B5 BF FD r2 &= ~(M_IO_EP+M_IO_CS) //EP CS to Low 20050613 Editby xinqiang
00009E4F 1A D5 06 70 [P_IO_Ctrl_B] = r2 //EP Low
00009E51 12 95 06 70 r2 = [P_IO_Ctrl_B]
00009E53 50 A4 r2 |= M_IO_AO
00009E54 0A B5 DF FF r2 &= ~(M_IO_RW)
00009E56 1A D5 06 70 [P_IO_Ctrl_B] = r2 //AO Hight, RW Low
.ifdef DATA_PORT_HIGHT
00009E58 59 93 r1 = r1 lsl 4
00009E59 59 93 r1 = r1 lsl 4
.endif
00009E5A 13 97 01 70 r3 = [P_IO_Data_B]
00009E5C 0B B7 FF 00 r3 &= ~M_IO_DATA_MASK
00009E5E 09 B3 00 FF r1 &= M_IO_DATA_MASK //Get Low Data Command
00009E60 03 03 r1 = r1+r3
00009E61 19 D3 00 70 [P_IO_Data] = r1 //往數據口送數據
00009E63 00 EE nop
00009E64 0A A5 40 00 r2 |= M_IO_EP //EP to Hight
00009E66 1A D5 05 70 [P_IO_Ctrl] = r2
00009E68 00 EE nop
00009E69 0A B5 BF FF r2 &= ~M_IO_EP //EP to Low
00009E6B 0A A5 00 02 r2 |= M_IO_CS //CS to Hight 20050613 Editby xinqiag
00009E6D 1A D5 05 70 [P_IO_Ctrl] = r2
00009E6F 88 92 pop r2 from [sp]
00009E70 90 9A retf
//***************************************************************************//
//程序:F_SPLC501_Read_Data()
//描述:從SPLC501里讀一個字節數據 C語言調用,匯編語言調用
//參數:r1輸出傳送的數據
//聲明:
//注意:破壞R1寄存器,保護R2、R5寄存器
//***************************************************************************//
.public _F_SPLC501_Read_Data
.public F_SPLC501_Read_Data
_F_SPLC501_Read_Data:
F_SPLC501_Read_Data:
00009E71 40 F0 76 9E call F_SPLC501_Read_Data1
00009E73 40 F0 76 9E call F_SPLC501_Read_Data1
00009E75 90 9A retf
F_SPLC501_Read_Data1:
00009E76 88 D4 push r2 to [sp]
00009E77 12 95 02 70 r2 = [P_IO_Data_Di] //設置數據口為輸入
00009E79 0A B5 FF 00 r2 &= ~M_IO_DATA_MASK
00009E7B 1A D5 02 70 [P_IO_Data_Di] = r2
00009E7D 12 95 06 70 r2 = [P_IO_Ctrl_B] //得到IOB口的狀態
00009E7F 0A B5 BF FD r2 &= ~(M_IO_EP+M_IO_CS) //EP CS to Low 20050613 Editby xinqiang
00009E81 1A D5 06 70 [P_IO_Ctrl_B] = r2 //EP Low
00009E83 70 A4 r2 |= (M_IO_AO+M_IO_RW)
00009E84 1A D5 06 70 [P_IO_Ctrl_B] = r2 //AO Hight, RW Hight
00009E86 00 EE nop
00009E87 0A A5 40 00 r2 |= M_IO_EP
00009E89 1A D5 06 70 [P_IO_Ctrl_B] = r2 //產生EP高電平,
00009E8B 00 EE nop
00009E8C 0A B5 BF FF r2 &= ~M_IO_EP //EP to Low
00009E8E 1A D5 05 70 [P_IO_Ctrl] = r2
00009E90 11 93 00 70 r1 = [P_IO_Data]
00009E92 09 B3 00 FF r1 &= M_IO_DATA_MASK
00009E94 0A A5 00 02 r2 |= M_IO_CS
00009E96 1A D5 05 70 [P_IO_Ctrl] = r2
00009E98 12 95 02 70 r2 = [P_IO_Data_Di] //恢復數據口為輸出狀態
00009E9A 0A A5 00 FF r2 |= M_IO_DATA_MASK
00009E9C 1A D5 02 70 [P_IO_Data_Di] = r2
.ifdef DATA_PORT_HIGHT
00009E9E 79 93 r1 = r1 lsr 4
00009E9F 79 93 r1 = r1 lsr 4
.endif
00009EA0 88 92 pop r2 from [sp]
00009EA1 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:
00009EA2 88 D4 push r2 to [sp]
00009EA3 12 95 02 70 r2 = [P_IO_Data_Di] //設置數據口為輸入
00009EA5 0A B5 FF 00 r2 &= ~M_IO_DATA_MASK
00009EA7 1A D5 02 70 [P_IO_Data_Di] = r2
00009EA9 12 95 06 70 r2 = [P_IO_Ctrl_B] //得到IOB口的狀態
00009EAB 0A B5 BF FD r2 &= ~(M_IO_EP+M_IO_CS) //EP CS to Low 20050613 Editby Xinqiang
00009EAD 1A D5 06 70 [P_IO_Ctrl_B] = r2 //EP Low
00009EAF 12 95 06 70 r2 = [P_IO_Ctrl_B]
00009EB1 0A B5 EF FF r2 &= ~(M_IO_AO)
00009EB3 60 A4 r2 |= M_IO_RW
00009EB4 1A D5 06 70 [P_IO_Ctrl_B] = r2 //AO Hight, RW Hight
00009EB6 00 EE nop
00009EB7 0A A5 40 00 r2 |= M_IO_EP
00009EB9 1A D5 06 70 [P_IO_Ctrl_B] = r2 //產生EP高電平,
00009EBB 00 EE nop
00009EBC 11 93 00 70 r1 = [P_IO_Data]
00009EBE 09 B3 00 FF r1 &= M_IO_DATA_MASK
00009EC0 0A B5 BF FF r2 &= ~M_IO_EP //EP to Low
00009EC2 0A A5 00 02 r2 |= M_IO_CS //CS to Hight 20050613 Editby Xinqiang
00009EC4 1A D5 05 70 [P_IO_Ctrl] = r2
00009EC6 12 95 02 70 r2 = [P_IO_Data_Di] //恢復數據口為輸出狀態
00009EC8 0A A5 00 FF r2 |= M_IO_DATA_MASK
00009ECA 1A D5 02 70 [P_IO_Data_Di] = r2
.ifdef DATA_PORT_HIGHT
00009ECC 79 93 r1 = r1 lsr 4
00009ECD 79 93 r1 = r1 lsr 4
.endif
00009ECE 88 92 pop r2 from [sp]
00009ECF 90 9A retf
//****************************************************************************************************
// 128X64I液晶底層驅動[6X8]字體庫
// 設計者: powerint
// 描 述: [6X8]西文字符的字模數據 (縱向取模,字節倒序)
// 日 期: 2004.4.27
// 版本號: 1.1
//****************************************************************************************************
.PUBLIC _Asii8
_Asii8:
00009ED0 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
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -