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

📄 simulatei2c.s79

📁 用于监视I2C通信总线
💻 S79
📖 第 1 页 / 共 3 页
字号:
??DataTable4:
        DC32     0x791c
//  111 

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock4 Using cfiCommon0
        CFI Function data_to_ascii
        THUMB
//  112 uint8 data_to_ascii(uint8 data)
//  113 {
//  114   if(data<10)
data_to_ascii:
        CMP      R0,#+10
        ITTT    CC 
//  115   {
//  116     return(data+0x30);
        ADDCC    R0,R0,#+48
        UXTBCC   R0,R0
        BXCC     LR
//  117   }
//  118   else
//  119   {
//  120     return(data-10+0x41);
        ADDS     R0,R0,#+55
        UXTB     R0,R0
        BX       LR               ;; return
        CFI EndBlock cfiBlock4
//  121   }
//  122     
//  123 }
//  124 
//  125 //void SCL_DET(void)//at exit 0,  pa 0

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock5 Using cfiCommon0
        CFI Function EXTI0_IRQHandler
        THUMB
//  126 void EXTI0_IRQHandler(void)
//  127 { 
//  128   uint8 i;
//  129   if(si2c1.status==BUSY)
EXTI0_IRQHandler:
        LDR.N    R1,??DataTable16  ;; si2c1
        PUSH     {R4,R5,LR}
        CFI ?RET Frame(CFA, -4)
        CFI R5 Frame(CFA, -8)
        CFI R4 Frame(CFA, -12)
        CFI CFA R13+12
        LDRB     R0,[R1, #+0]
        CMP      R0,#+2
        BNE.N    ??EXTI0_IRQHandler_0
//  130   
//  131   //if(1)
//  132   {
//  133     i=BitTst(GPIOA->IDR,1);
        LDR.N    R0,??DataTable12  ;; 0x40010808
        LDR      R2,[R0, #+0]
        MOVS     R0,#+2
        ANDS     R0,R0,R2
//  134     if(si2c1.bitcount<8)
        LDR.N    R2,??EXTI0_IRQHandler_1  ;; 0x7928
        ADDS     R1,R1,R2
        LDR      R3,[R1, #+4]
        LDRB     R2,[R1, #+0]
        CMP      R3,#+8
        BCS.N    ??EXTI0_IRQHandler_2
//  135     {
//  136       //if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1))//sda high
//  137       if(i)
        MOVS     R4,#+1
        MOVS     R5,#+7
        SUBS     R5,R5,R3
        LSLS     R4,R4,R5
        CMP      R0,#+0
        ITEE    EQ 
        BICEQ    R2,R2,R4
//  138       {
//  139         BitSet(si2c1.nowbyte,7-si2c1.bitcount);
        ORRNE    R4,R4,R2
        MOVNE    R2,R4
        STRB     R2,[R1, #+0]
//  140       }
//  141       else
//  142       {
//  143         BitClr(si2c1.nowbyte,7-si2c1.bitcount);
//  144       }
//  145       si2c1.bitcount++;
        ADDS     R3,R3,#+1
        STR      R3,[R1, #+4]
        B.N      ??EXTI0_IRQHandler_0
//  146     }
//  147     else
//  148     {
//  149       //WINDOW_In(data_to_ascii(si2c1.nowbyte>>4));
//  150       //WINDOW_In(data_to_ascii(si2c1.nowbyte&0xf));
//  151       if(!tempp_choise)
??EXTI0_IRQHandler_2:
        LDR.N    R0,??DataTable19  ;; tempp_choise
        LDRH     R3,[R0, #+0]
        CBNZ     R3,??EXTI0_IRQHandler_3
//  152       {
//  153         tempp1[tempp_count1++]=si2c1.nowbyte;
        LDR.N    R4,??DataTable20  ;; tempp1
        LDR      R3,[R0, #+4]
        STRH     R2,[R4, R3, LSL #+1]
        ADDS     R3,R3,#+1
        STR      R3,[R0, #+4]
        B.N      ??EXTI0_IRQHandler_4
//  154       }
//  155       else
//  156       {
//  157         tempp2[tempp_count2++]=si2c1.nowbyte;
??EXTI0_IRQHandler_3:
        LDR.N    R4,??DataTable21  ;; tempp2
        LDR      R3,[R0, #+8]
        STRH     R2,[R4, R3, LSL #+1]
        ADDS     R3,R3,#+1
        STR      R3,[R0, #+8]
//  158       }
//  159      
//  160       /*
//  161       if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1))//sda high, nack
//  162       {
//  163         //WINDOW_In('n');
//  164         //WINDOW_In(' ');
//  165         if(!tempp_choise)
//  166         {
//  167           tempp1[tempp_count1++]=0x400;
//  168         }
//  169         else
//  170         {
//  171           tempp2[tempp_count2++]=0x400;
//  172         }
//  173       }
//  174       else
//  175       {
//  176         //WINDOW_In('a');
//  177         //WINDOW_In(' ');
//  178         if(!tempp_choise)
//  179         {
//  180           tempp1[tempp_count1++]=0x300;
//  181         }
//  182         else
//  183         {
//  184           tempp2[tempp_count2++]=0x300;
//  185         }
//  186         
//  187       }*/
//  188       si2c1.bitcount=0;
??EXTI0_IRQHandler_4:
        MOVS     R0,#+0
        STR      R0,[R1, #+4]
        B.N      ??EXTI0_IRQHandler_0
//  189     }
//  190   }
//  191   
//  192   while (((EXTI->PR & 1)) && (EXTI->IMR & 1))
//  193   { 
//  194   //EXTI_ClearITPendingBit(EXTI_Line0);
//  195    EXTI->PR = 1;
??EXTI0_IRQHandler_5:
        MOVS     R1,#+1
        STR      R1,[R0, #+0]
//  196   }
??EXTI0_IRQHandler_0:
        LDR.N    R0,??DataTable17  ;; 0x40010414
        LDR      R1,[R0, #+0]
        LSLS     R1,R1,#+31
        BPL.N    ??EXTI0_IRQHandler_6
        LDR.N    R1,??DataTable18  ;; 0x40010400
        LDR      R1,[R1, #+0]
        LSLS     R1,R1,#+31
        BMI.N    ??EXTI0_IRQHandler_5
//  197 }
??EXTI0_IRQHandler_6:
        POP      {R4,R5,PC}
        DATA
??EXTI0_IRQHandler_1:
        DC32     0x7928
        CFI EndBlock cfiBlock5
//  198 
//  199 //void SDA_DET(void)//at exit 1,pa 1

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock6 Using cfiCommon0
        CFI Function EXTI1_IRQHandler
        THUMB
//  200 void EXTI1_IRQHandler(void)
//  201 {
//  202   //sda low and scl high, det a start condition on i2c bus
//  203     //if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0))
//  204     if(BitTst(GPIOA->IDR,0))
EXTI1_IRQHandler:
        LDR.N    R1,??DataTable12  ;; 0x40010808
        PUSH     {R0,R4-R11,LR}
        CFI ?RET Frame(CFA, -4)
        CFI R11 Frame(CFA, -8)
        CFI R10 Frame(CFA, -12)
        CFI R9 Frame(CFA, -16)
        CFI R8 Frame(CFA, -20)
        CFI R7 Frame(CFA, -24)
        CFI R6 Frame(CFA, -28)
        CFI R5 Frame(CFA, -32)
        CFI R4 Frame(CFA, -36)
        CFI CFA R13+40
        MOVS     R0,#+2
        MOV      R8,R0
        LDR      R0,[R1, #+0]
        LSLS     R0,R0,#+31
        BPL.N    ??EXTI1_IRQHandler_0
//  205     {
//  206       //if((GPIO_ReadInputData(GPIOA)&0x3)==1)
//  207       //if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1))
//  208       if(!BitTst(GPIOA->IDR,1))
        LDR.N    R0,??DataTable19  ;; tempp_choise
        LDR.N    R3,??DataTable20  ;; tempp1
        LDR.N    R4,??DataTable21  ;; tempp2
        LDR.N    R5,??EXTI1_IRQHandler_1  ;; 0x40010408
        LDR      R2,[R0, #+4]
        LDR.N    R6,??DataTable16  ;; si2c1
        ADDS     R9,R3,R2, LSL #+1
        LDR      R3,[R0, #+8]
        ADDS     R2,R2,#+1
        MOV      R11,R2
        LDRH     R2,[R0, #+0]
        ADDS     R10,R4,R3, LSL #+1
        ADDS     R3,R3,#+1
        STR      R3,[SP, #+0]
        LDR      R1,[R1, #+0]
        LDR.N    R3,??EXTI1_IRQHandler_1+0x4  ;; 0x4001040c
        MVNS     R4,#+2
        LSLS     R1,R1,#+30
        BMI.N    ??EXTI1_IRQHandler_2
//  209       {
//  210         //si2c1.nowbyte=0;
//  211         //si2c1.bitcount=0;
//  212         if(!tempp_choise)
        LSRS     R1,R3,#+22
        CBNZ     R2,??EXTI1_IRQHandler_3
//  213         {
//  214           tempp1[tempp_count1++]=0x100;
        STRH     R1,[R9, #+0]
        STR      R11,[R0, #+4]
        B.N      ??EXTI1_IRQHandler_4
//  215         }
//  216         else
//  217         {
//  218           tempp2[tempp_count2++]=0x100;
??EXTI1_IRQHandler_3:
        STRH     R1,[R10, #+0]
        LDR      R1,[SP, #+0]
        STR      R1,[R0, #+8]
//  219         }
//  220         //WINDOW_In('s');
//  221         //WINDOW_In('\n');
//  222         si2c1.status=BUSY;
??EXTI1_IRQHandler_4:
        MOVS     R0,#+2
        STRB     R0,[R6, #+0]
//  223         BitClr(EXTI->FTSR,1);
        LDR      R0,[R3, #+0]
        ANDS     R4,R4,R0
        STR      R4,[R3, #+0]
//  224         BitSet(EXTI->RTSR,1);
        LDR      R0,[R5, #+0]
        ORRS     R0,R0,#0x2
        STR      R0,[R5, #+0]
        B.N      ??EXTI1_IRQHandler_0
//  225       }
//  226       
//  227       
//  228       //sda high and scl high, det a stop condition on i2c bus
//  229       
//  230       //else if((GPIO_ReadInputData(GPIOA))&0x3==3)
//  231       //else if((GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0))/*&&(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1))*/)
//  232       else
//  233       {
//  234         //si2c1.nowbyte=0;
//  235         si2c1.bitcount=0;
??EXTI1_IRQHandler_2:
        LDR.N    R7,??EXTI1_IRQHandler_1+0x8  ;; 0x792c
        MOVS     R1,#+0
        STR      R1,[R6, R7]
//  236         if(!tempp_choise)
        LSRS     R7,R3,#+21
        CBNZ     R2,??EXTI1_IRQHandler_5
//  237         {
//  238           tempp1[tempp_count1++]=0x200;
        STRH     R7,[R9, #+0]
        STR      R11,[R0, #+4]
        B.N      ??EXTI1_IRQHandler_6
//  239         }
//  240         else
//  241         {
//  242           tempp2[tempp_count2++]=0x200;
??EXTI1_IRQHandler_5:
        STRH     R7,[R10, #+0]
        LDR      R2,[SP, #+0]
        STR      R2,[R0, #+8]
//  243         }
//  244         //WINDOW_In('\n');
//  245         //WINDOW_In('p');
//  246         //WINDOW_In('\n');
//  247         si2c1.status=WAITING;
??EXTI1_IRQHandler_6:
        STRB     R1,[R6, #+0]
//  248         BitClr(EXTI->RTSR,1);
        LDR      R0,[R5, #+0]
        ANDS     R4,R4,R0
        STR      R4,[R5, #+0]
//  249         BitSet(EXTI->FTSR,1);
        LDR      R0,[R3, #+0]
        ORRS     R0,R0,#0x2
        STR      R0,[R3, #+0]
        B.N      ??EXTI1_IRQHandler_0
//  250       }
//  251     }
//  252 
//  253  while (((EXTI->PR & 2)) && (EXTI->IMR & 2))
//  254  {
//  255   //EXTI_ClearITPendingBit(EXTI_Line1);
//  256    EXTI->PR = 2;
??EXTI1_IRQHandler_7:
        STR      R8,[R0, #+0]
//  257  }
??EXTI1_IRQHandler_0:
        LDR.N    R0,??DataTable17  ;; 0x40010414
        LDR      R1,[R0, #+0]
        LSLS     R1,R1,#+30
        BPL.N    ??EXTI1_IRQHandler_8
        LDR.N    R1,??DataTable18  ;; 0x40010400
        LDR      R1,[R1, #+0]
        LSLS     R1,R1,#+30
        BMI.N    ??EXTI1_IRQHandler_7
//  258 }
??EXTI1_IRQHandler_8:
        POP      {R0,R4-R11,PC}   ;; return
        DATA
??EXTI1_IRQHandler_1:
        DC32     0x40010408
        DC32     0x4001040c
        DC32     0x792c
        CFI EndBlock cfiBlock6

        RSEG CODE:CODE:NOROOT(2)
        DATA
??DataTable12:
        DC32     0x40010808

        RSEG CODE:CODE:NOROOT(2)
        DATA
??DataTable16:
        DC32     si2c1

        RSEG CODE:CODE:NOROOT(2)
        DATA
??DataTable17:
        DC32     0x40010414

        RSEG CODE:CODE:NOROOT(2)
        DATA
??DataTable18:
        DC32     0x40010400
//  259 

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock7 Using cfiCommon0
        CFI Function data_convert
        THUMB
//  260 void data_convert(void)
//  261 {
//  262   int32 i;
//  263   //data in
//  264   if(!tempp_choise)
data_convert:
        LDR.N    R0,??DataTable19  ;; tempp_choise
        PUSH     {R4-R7,LR}
        CFI ?RET Frame(CFA, -4)
        CFI R7 Frame(CFA, -8)
        CFI R6 Frame(CFA, -12)
        CFI R5 Frame(CFA, -16)
        CFI R4 Frame(CFA, -20)
        CFI CFA R13+20
        MOVS     R6,#+0
        LDRH     R1,[R0, #+0]

⌨️ 快捷键说明

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