📄 hal.lis
字号:
.module HAL.C
.area text(rom, con, rel)
0000 .dbfile F:\IccAvr_Pro\USB\HAL.C
0000 .dbfunc e outportb _outportb fV
0000 ; val -> R18
0000 ; port -> R16
.even
0000 _outportb::
0000 .dbline -1
0000 .dbline 11
0000 ;
0000 ; #include "HAL.H"
0000 ; //#include "D12CI.H"
0000 ; //#include "MAIN.H"
0000 ; #include "macros.h"
0000 ; #include <iom16v.h>
0000 ; /**********************************************************************************************************
0000 ; *This is the lowest layer code in the firmware,which performs hardware dependent i/o access to PDIUSBD12.*
0000 ; **********************************************************************************************************/
0000 ; void outportb(unsigned char port,unsigned char val)
0000 ; {
0000 .dbline 15
0000 ; //unsigned char xdata *ext_address;
0000 ;
0000 ; // MCU_HOSTDACK=1;
0000 ; if (port)
0000 0023 tst R16
0002 11F0 breq L2
0004 .dbline 16
0004 ; PORTA|=BIT(A0); //Write command reg
0004 DF9A sbi 0x1b,7
0006 01C0 xjmp L3
0008 L2:
0008 .dbline 18
0008 ; else
0008 ; PORTA&=~BIT(A0); //Write data area
0008 DF98 cbi 0x1b,7
000A L3:
000A .dbline 19
000A ; PORTA&=~BIT(WRITE);
000A DE98 cbi 0x1b,6
000C .dbline 20
000C ; PORTA|=port;
000C 2BB2 in R2,0x1b
000E 202A or R2,R16
0010 2BBA out 0x1b,R2
0012 .dbline 21
0012 ; PORTA&=~BIT(WRITE); //WRITE=0;
0012 DE98 cbi 0x1b,6
0014 .dbline 22
0014 ; DATA_BUS_D=0xff; //Write data
0014 8FEF ldi R24,255
0016 87BB out 0x17,R24
0018 .dbline 23
0018 ; DATA_BUS_W=val;
0018 26BB out 0x16,R18
001A .dbline 24
001A ; DATA_BUS_W=val;
001A 26BB out 0x16,R18
001C .dbline 25
001C ; PORTA|=BIT(WRITE); //Write=1
001C DE9A sbi 0x1b,6
001E .dbline -2
001E .dbline 33
001E ; //ext_address=0xff00+port;
001E ; // ext_address=port;
001E ; //*ext_address=val;
001E ;
001E ;
001E ; //MCU_HOSTDACK=0;
001E ;
001E ; }
001E L1:
001E .dbline 0 ; func end
001E 0895 ret
0020 .dbsym r val 18 c
0020 .dbsym r port 16 c
0020 .dbend
0020 .dbfunc e inportb _inportb fc
0020 ; c -> R20
0020 ; port -> R16
.even
0020 _inportb::
0020 0E940000 xcall push_gset1
0024 .dbline -1
0024 .dbline 35
0024 ; unsigned char inportb(unsigned char port)
0024 ; {
0024 .dbline 39
0024 ; //unsigned char xdata *ext_address;//define an external data storage
0024 ;
0024 ; unsigned char c;
0024 ; if(port)
0024 0023 tst R16
0026 11F0 breq L5
0028 .dbline 40
0028 ; PORTA|=BIT(A0); //Read command reg
0028 DF9A sbi 0x1b,7
002A 01C0 xjmp L6
002C L5:
002C .dbline 42
002C ; else
002C ; PORTA&=~BIT(A0); //Read data area
002C DF98 cbi 0x1b,7
002E L6:
002E .dbline 43
002E ; PORTA|=BIT(READ); //Read=1;
002E DD9A sbi 0x1b,5
0030 .dbline 44
0030 ; PORTA|=port;
0030 2BB2 in R2,0x1b
0032 202A or R2,R16
0034 2BBA out 0x1b,R2
0036 .dbline 45
0036 ; PORTA&=~BIT(READ); //Read=0;
0036 DD98 cbi 0x1b,5
0038 .dbline 46
0038 ; DATA_BUS_D=0x00; //Read data
0038 2224 clr R2
003A 27BA out 0x17,R2
003C .dbline 47
003C ; c=DATA_BUS_R;
003C 48B3 in R20,0x18
003E .dbline 48
003E ; c=DATA_BUS_R;
003E 48B3 in R20,0x18
0040 .dbline 49
0040 ; PORTA|=BIT(READ); //Read=1
0040 DD9A sbi 0x1b,5
0042 .dbline 59
0042 ; //ext_address=0xff00+port;
0042 ; // MCU_HOSTDACK=1; // set DMA's mode flag
0042 ;
0042 ; //ext_address=0xff00+port;
0042 ; //ext_address=port;
0042 ; //c=*ext_address;
0042 ;
0042 ; // MCU_HOSTDACK=0;
0042 ;
0042 ; return c;
0042 042F mov R16,R20
0044 .dbline -2
0044 L4:
0044 0E940000 xcall pop_gset1
0048 .dbline 0 ; func end
0048 0895 ret
004A .dbsym r c 20 c
004A .dbsym r port 16 c
004A .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -