⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 twi_master_drv.lis

📁 at90can128底层驱动 有SPI,TWI,总线,CAN接口等
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .module twi_master_drv.c
                        .area text(rom, con, rel)
 0000                   .dbfile F:\zzz\i2c-master\twi_master_drv.c
 0000                   .dbfunc e twi_lib_init _twi_lib_init fV
                        .even
 0000           _twi_lib_init::
 0000                   .dbline -1
 0000                   .dbline 19
 0000           ; /*头文件*/
 0000           ; #include "twi_master_drv.h"
 0000           ; 
 0000           ; /*全局变量定义*/
 0000           ; uchar twi_busy;       //=FALSE,TWI通讯空闲;=TRUE,TWI通讯忙
 0000           ; uchar twi_err;        //TWI通讯状态
 0000           ; uchar twi_nb_transmited;      //收发字节数
 0000           ; //uchar       twi_recptr;
 0000           ; 
 0000           ; TWI_MSG       twi_message;    //TWI数据结构
 0000           ; 
 0000           ; /*****************************************************************************
 0000           ; 函数介绍:TWI初始化,设置通讯波特率和启动通讯
 0000           ; 输入参数:
 0000           ; 输出参数:
 0000           ; 返回值:无
 0000           ; *****************************************************************************/
 0000           ; void twi_lib_init(void)
 0000           ; {
 0000                   .dbline 24
 0000           ;   //Twi_set_baudrate(0xf9);           //8MOSC 1K
 0000           ;   //Twi_set_status(0x02);
 0000           ;   //Twi_set_baudrate(0x62);           //8MOSC 10K
 0000           ;   //Twi_set_status(0x01);
 0000           ;   Twi_set_baudrate(0x20);             //8MOSC 100K
 0000 80E2              ldi R24,32
 0002 8093B800          sts 184,R24
 0006                   .dbline 25
 0006           ;   Twi_set_status(0x00);
 0006 2224              clr R2
 0008 2092B900          sts 185,R2
 000C                   .dbline 28
 000C           ; 
 000C           ;   //Twi_set_address(0x51);
 000C           ;   Twi_init_hw(TWI_CONFIG);
 000C 84E0              ldi R24,4
 000E 8093BC00          sts 188,R24
 0012                   .dbline -2
 0012           L2:
 0012                   .dbline 0 ; func end
 0012 0895              ret
 0014                   .dbend
 0014                   .dbfunc e twi_decode_status _twi_decode_status fV
                        .even
 0014           _twi_decode_status::
 0014                   .dbline -1
 0014                   .dbline 39
 0014           ; }
 0014           ; 
 0014           ; /*****************************************************************************
 0014           ; 函数介绍:在从机或主机模式下,TWI信息的收发的主流程状态。
 0014           ; 此函数在TWI通讯事件发生时,对各个状态进行解码,查询和中断方式都可以。
 0014           ; 输入参数:
 0014           ; 输出参数:
 0014           ; 返回值:无
 0014           ; *****************************************************************************/
 0014           ; void twi_decode_status()
 0014           ; {
 0014                   .dbline 40
 0014           ; switch ( Twi_get_status()&0xF8 ) // switch (SSTA)
 0014 0091B900          lds R16,185
 0018 1127              clr R17
 001A 087F              andi R16,248
 001C 1070              andi R17,0
 001E 0832              cpi R16,40
 0020 E0E0              ldi R30,0
 0022 1E07              cpc R17,R30
 0024 09F4              brne X2
 0026 C1C0              xjmp L22
 0028           X2:
 0028 88E2              ldi R24,40
 002A 90E0              ldi R25,0
 002C 8017              cp R24,R16
 002E 9107              cpc R25,R17
 0030 4CF1              brlt L46
 0032           L45:
 0032 0031              cpi R16,16
 0034 E0E0              ldi R30,0
 0036 1E07              cpc R17,R30
 0038 09F4              brne X3
 003A 74C0              xjmp L12
 003C           X3:
 003C 80E1              ldi R24,16
 003E 90E0              ldi R25,0
 0040 8017              cp R24,R16
 0042 9107              cpc R25,R17
 0044 7CF0              brlt L48
 0046           L47:
 0046 0030              cpi R16,0
 0048 0107              cpc R16,R17
 004A 09F4              brne X4
 004C 4BC0              xjmp L7
 004E           X4:
 004E           X0:
 004E 0030              cpi R16,0
 0050 E0E0              ldi R30,0
 0052 1E07              cpc R17,R30
 0054 0CF4              brge X5
 0056 59C1              xjmp L4
 0058           X5:
 0058           L49:
 0058 0830              cpi R16,8
 005A E0E0              ldi R30,0
 005C 1E07              cpc R17,R30
 005E 09F4              brne X6
 0060 48C0              xjmp L8
 0062           X6:
 0062 53C1              xjmp L4
 0064           L48:
 0064 0831              cpi R16,24
 0066 E0E0              ldi R30,0
 0068 1E07              cpc R17,R30
 006A 09F4              brne X7
 006C 74C0              xjmp L16
 006E           X7:
 006E 0831              cpi R16,24
 0070 E0E0              ldi R30,0
 0072 1E07              cpc R17,R30
 0074 0CF4              brge X8
 0076 49C1              xjmp L4
 0078           X8:
 0078           L50:
 0078 0032              cpi R16,32
 007A E0E0              ldi R30,0
 007C 1E07              cpc R17,R30
 007E 09F4              brne X9
 0080 88C0              xjmp L21
 0082           X9:
 0082 43C1              xjmp L4
 0084           L46:
 0084 0034              cpi R16,64
 0086 E0E0              ldi R30,0
 0088 1E07              cpc R17,R30
 008A 09F4              brne X10
 008C CFC0              xjmp L30
 008E           X10:
 008E 80E4              ldi R24,64
 0090 90E0              ldi R25,0
 0092 8017              cp R24,R16
 0094 9107              cpc R25,R17
 0096 84F0              brlt L52
 0098           L51:
 0098 0033              cpi R16,48
 009A E0E0              ldi R30,0
 009C 1E07              cpc R17,R30
 009E 09F4              brne X11
 00A0 ADC0              xjmp L28
 00A2           X11:
 00A2 0033              cpi R16,48
 00A4 E0E0              ldi R30,0
 00A6 1E07              cpc R17,R30
 00A8 0CF4              brge X12
 00AA 2FC1              xjmp L4
 00AC           X12:
 00AC           L53:
 00AC 0833              cpi R16,56
 00AE E0E0              ldi R30,0
 00B0 1E07              cpc R17,R30
 00B2 09F4              brne X13
 00B4 AFC0              xjmp L29
 00B6           X13:
 00B6 29C1              xjmp L4
 00B8           L52:
 00B8 0035              cpi R16,80
 00BA E0E0              ldi R30,0
 00BC 1E07              cpc R17,R30
 00BE 09F4              brne X14
 00C0 E3C0              xjmp L38
 00C2           X14:
 00C2 80E5              ldi R24,80
 00C4 90E0              ldi R25,0
 00C6 8017              cp R24,R16
 00C8 9107              cpc R25,R17
 00CA 34F0              brlt L55
 00CC           L54:
 00CC 0834              cpi R16,72
 00CE E0E0              ldi R30,0
 00D0 1E07              cpc R17,R30
 00D2 09F4              brne X15
 00D4 CDC0              xjmp L37
 00D6           X15:
 00D6 19C1              xjmp L4
 00D8           L55:
 00D8 0835              cpi R16,88
 00DA E0E0              ldi R30,0
 00DC 1E07              cpc R17,R30
 00DE 09F4              brne X16
 00E0 FCC0              xjmp L43
 00E2           X16:
 00E2 13C1              xjmp L4
 00E4           X1:
 00E4                   .dbline 41
 00E4           ;     {
 00E4           L7:
 00E4                   .dbline 45
 00E4           ;     //  STATE 00h: Bus Error has occurred
 00E4           ;     //  ACTION:    Enter not addressed SLV mode and release bus
 00E4           ;     case  0x00 :
 00E4           ;     twi_busy = FALSE;
 00E4 2224              clr R2
 00E6 20920200          sts _twi_busy,R2
 00EA                   .dbline 46
 00EA           ;     twi_err  = TWI_BUS_ERROR;
 00EA 82E0              ldi R24,2
 00EC 80930100          sts _twi_err,R24
 00F0                   .dbline 47
 00F0           ;     break;
 00F0 17C1              xjmp L5
 00F2           L8:
 00F2                   .dbline 53
 00F2           ; 
 00F2           ; 
 00F2           ;     //STATE 08h: A start condition has been sent
 00F2           ;     //ACTION:    SLR+R/W are transmitted, ACK bit received
 00F2           ;     case 0x08 :
 00F2           ;     Twi_clear_start();    //Pas besoin fait en hard ???
 00F2 8091BC00          lds R24,188
 00F6 8F75              andi R24,95
 00F8 8093BC00          sts 188,R24
 00FC                   .dbline 54
 00FC           ;     Twi_set_data(twi_message.address<<1);
 00FC 20900300          lds R2,_twi_message
 0100 220C              lsl R2
 0102 2092BB00          sts 187,R2
 0106                   .dbline 55
 0106           ;     if ( twi_message.rw == TWI_READ )
 0106 80910400          lds R24,_twi_message+1
 010A 8130              cpi R24,1
 010C 29F4              brne L9
 010E                   .dbline 56
 010E           ;     {
 010E                   .dbline 57
 010E           ;                 Twi_set_data(Twi_get_data()+1); // Add 1 for Read bit in AdrWord    modify by zmq
 010E 8091BB00          lds R24,187
 0112 8F5F              subi R24,255    ; addi 1
 0114 8093BB00          sts 187,R24
 0118                   .dbline 58
 0118           ;     }
 0118           L9:
 0118                   .dbline 59
 0118           ;     Twi_set_aa(); //from here to 0x18 transmit or 0x40 receive
 0118 8091BC00          lds R24,188
 011C 8064              ori R24,64
 011E 8093BC00          sts 188,R24
 0122                   .dbline 60
 0122           ;     break;
 0122 FEC0              xjmp L5
 0124           L12:
 0124                   .dbline 65
 0124           ; 
 0124           ;     //STATE 10h: A repeated start condition has been sent
 0124           ;     //ACTION:    SLR+R/W are transmitted, ACK bit received
 0124           ;     case 0x10 :
 0124           ;     Twi_clear_start();          // Reset STA bit in SSCON
 0124 8091BC00          lds R24,188
 0128 8F75              andi R24,95
 012A 8093BC00          sts 188,R24
 012E                   .dbline 66
 012E           ;     Twi_set_data(twi_message.address<<1);
 012E 20900300          lds R2,_twi_message
 0132 220C              lsl R2
 0134 2092BB00          sts 187,R2
 0138                   .dbline 67
 0138           ;     if ( twi_message.rw == TWI_READ )
 0138 80910400          lds R24,_twi_message+1
 013C 8130              cpi R24,1
 013E 29F4              brne L13
 0140                   .dbline 68
 0140           ;     {
 0140                   .dbline 69
 0140           ;                       Twi_set_data(Twi_get_data()+1); // Add 1 for Read bit in AdrWord    modify by zmq
 0140 8091BB00          lds R24,187
 0144 8F5F              subi R24,255    ; addi 1
 0146 8093BB00          sts 187,R24
 014A                   .dbline 70
 014A           ;     }
 014A           L13:
 014A                   .dbline 71
 014A           ;     Twi_set_aa();               // wait on ACK bit
 014A 8091BC00          lds R24,188
 014E 8064              ori R24,64
 0150 8093BC00          sts 188,R24
 0154                   .dbline 72
 0154           ;     break;
 0154 E5C0              xjmp L5
 0156           L16:
 0156                   .dbline 78
 0156           ; 
 0156           ;     //STATE 18h:   SLR+W was transmitted, ACK bit received
 0156           ;     //ACTION:      Transmit data byte, ACK bit received
 0156           ;     //PREVIOUS STATE: 0x08 or 0x10
 0156           ;     case 0x18 :                 // master transmit, after sending
 0156           ;     twi_nb_transmited=0;        // slave address, now load data
 0156 2224              clr R2
 0158 20920000          sts _twi_nb_transmited,R2
 015C                   .dbline 79

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -