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

📄 iic.txt

📁 SMDK2442所有设备的驱动测试程序。运行monitor程序
💻 TXT
📖 第 1 页 / 共 5 页
字号:
;;;407                            //The last data has to be read with no ack.
;;;408                if((_iicDataCount)==0)
000848  e51f0170          LDR      r0,|L1.1760|
00084c  e5900000          LDR      r0,[r0,#0]  ; _iicDataCount
000850  e3500000          CMP      r0,#0
000854  1a000003          BNE      |L1.2152|
;;;409                    rIICCON = 0x2f;                 //Resumes IIC operation with NOACK.  
000858  e3a0002f          MOV      r0,#0x2f
00085c  e3a01454          MOV      r1,#0x54000000
000860  e5810000          STR      r0,[r1,#0]
000864  ea000002          B        |L1.2164|
;;;410                else 
;;;411                    rIICCON = 0xaf;                 //Resumes IIC operation with ACK
                  |L1.2152|
000868  e3a000af          MOV      r0,#0xaf
00086c  e3a01454          MOV      r1,#0x54000000
000870  e5810000          STR      r0,[r1,#0]
;;;412                break;
                  |L1.2164|
000874  ea00003e          B        |L1.2420|
;;;413    
;;;414            case WRDATA:
;;;415                if((_iicDataCount--)==0)
                  |L1.2168|
000878  e51f01a0          LDR      r0,|L1.1760|
00087c  e5900000          LDR      r0,[r0,#0]  ; _iicDataCount
000880  e2401001          SUB      r1,r0,#1
000884  e51f01ac          LDR      r0,|L1.1760|
000888  e5902000          LDR      r2,[r0,#0]  ; _iicDataCount
00088c  e5801000          STR      r1,[r0,#0]  ; _iicDataCount
000890  e3520000          CMP      r2,#0
000894  1a000008          BNE      |L1.2236|
;;;416                {
;;;417                    rIICSTAT = 0xd0;                //stop MasTx condition 
000898  e3a000d0          MOV      r0,#0xd0
00089c  e3a01454          MOV      r1,#0x54000000
0008a0  e5810004          STR      r0,[r1,#4]
;;;418                    rIICCON  = 0xaf;                //resumes IIC operation.
0008a4  e3a000af          MOV      r0,#0xaf
0008a8  e3a01454          MOV      r1,#0x54000000
0008ac  e5810000          STR      r0,[r1,#0]
;;;419                    Delay(1);                       //wait until stop condtion is in effect.
0008b0  e3a00001          MOV      r0,#1
0008b4  ebfffffe          BL       Delay
;;;420                           //The pending bit will not be set after issuing stop condition.
;;;421                    break;    
0008b8  ea00002d          B        |L1.2420|
;;;422                }
;;;423                rIICDS = _iicData[_iicPt++];        //_iicData[0] has dummy.
                  |L1.2236|
0008bc  e51f01ec          LDR      r0,|L1.1752|
0008c0  e5900000          LDR      r0,[r0,#0]  ; _iicPt
0008c4  e2801001          ADD      r1,r0,#1
0008c8  e51f21f8          LDR      r2,|L1.1752|
0008cc  e5821000          STR      r1,[r2,#0]  ; _iicPt
0008d0  e51f11fc          LDR      r1,|L1.1756|
0008d4  e7d10000          LDRB     r0,[r1,r0]
0008d8  e3a01454          MOV      r1,#0x54000000
0008dc  e581000c          STR      r0,[r1,#0xc]
;;;424                for(i=0;i<10;i++);                  //for setup time until rising edge of IICSCL
0008e0  e3a04000          MOV      r4,#0
                  |L1.2276|
0008e4  e354000a          CMP      r4,#0xa
0008e8  2a000001          BCS      |L1.2292|
0008ec  e2844001          ADD      r4,r4,#1
0008f0  eafffffb          B        |L1.2276|
;;;425                rIICCON = 0xaf;                     //resumes IIC operation.
                  |L1.2292|
0008f4  e3a000af          MOV      r0,#0xaf
0008f8  e3a01454          MOV      r1,#0x54000000
0008fc  e5810000          STR      r0,[r1,#0]
;;;426                break;
000900  ea00001b          B        |L1.2420|
;;;427    
;;;428            case SETRDADDR:
;;;429    //          Uart_Printf("[S%d]",_iicDataCount);
;;;430                if((_iicDataCount--)==0)
                  |L1.2308|
000904  e51f022c          LDR      r0,|L1.1760|
000908  e5900000          LDR      r0,[r0,#0]  ; _iicDataCount
00090c  e2401001          SUB      r1,r0,#1
000910  e51f0238          LDR      r0,|L1.1760|
000914  e5902000          LDR      r2,[r0,#0]  ; _iicDataCount
000918  e5801000          STR      r1,[r0,#0]  ; _iicDataCount
00091c  e3520000          CMP      r2,#0
000920  1a000000          BNE      |L1.2344|
;;;431                {
;;;432                    break;                  //IIC operation is stopped because of IICCON[4]    
000924  ea000012          B        |L1.2420|
;;;433                }
;;;434                rIICDS = _iicData[_iicPt++];
                  |L1.2344|
000928  e51f0258          LDR      r0,|L1.1752|
00092c  e5900000          LDR      r0,[r0,#0]  ; _iicPt
000930  e2801001          ADD      r1,r0,#1
000934  e51f2264          LDR      r2,|L1.1752|
000938  e5821000          STR      r1,[r2,#0]  ; _iicPt
00093c  e51f1268          LDR      r1,|L1.1756|
000940  e7d10000          LDRB     r0,[r1,r0]
000944  e3a01454          MOV      r1,#0x54000000
000948  e581000c          STR      r0,[r1,#0xc]
;;;435                for(i=0;i<10;i++);          //for setup time until rising edge of IICSCL
00094c  e3a04000          MOV      r4,#0
                  |L1.2384|
000950  e354000a          CMP      r4,#0xa
000954  2a000001          BCS      |L1.2400|
000958  e2844001          ADD      r4,r4,#1
00095c  eafffffb          B        |L1.2384|
;;;436                rIICCON = 0xaf;             //resumes IIC operation.
                  |L1.2400|
000960  e3a000af          MOV      r0,#0xaf
000964  e3a01454          MOV      r1,#0x54000000
000968  e5810000          STR      r0,[r1,#0]
;;;437                break;
00096c  ea000000          B        |L1.2420|
;;;438    
;;;439            default:
;;;440                break;      
                  |L1.2416|
000970  e1a00000          NOP      
;;;441        }
;;;442    }
                  |L1.2420|
000974  e8bd8038          LDMFD    sp!,{r3-r5,pc}
                          ENDP

                  Run_IicPoll PROC
;;;371    void Run_IicPoll(void)
;;;372    {
000978  e92d4008          STMFD    sp!,{r3,lr}
;;;373        if(rIICCON & 0x10)                  //Tx/Rx Interrupt Enable
00097c  e3a00454          MOV      r0,#0x54000000
000980  e5900000          LDR      r0,[r0,#0]
000984  e3100010          TST      r0,#0x10
000988  0a000000          BEQ      |L1.2448|
;;;374           IicPoll();
00098c  ebfffffe          BL       IicPoll
;;;375    }       
                  |L1.2448|
000990  e8bd8008          LDMFD    sp!,{r3,pc}
                          ENDP

                  _Rd24C080 PROC
;;;344    void _Rd24C080(U32 slvAddr,U32 addr,U8 *data)
;;;345    {
000994  e92d4070          STMFD    sp!,{r4-r6,lr}
000998  e1a04000          MOV      r4,r0
00099c  e1a05001          MOV      r5,r1
0009a0  e1a06002          MOV      r6,r2
;;;346        _iicMode      = SETRDADDR;
0009a4  e3a00004          MOV      r0,#4
0009a8  e51f12dc          LDR      r1,|L1.1748|
0009ac  e5810000          STR      r0,[r1,#0]  ; _iicMode
;;;347        _iicPt        = 0;
0009b0  e3a00000          MOV      r0,#0
0009b4  e51f12e4          LDR      r1,|L1.1752|
0009b8  e5810000          STR      r0,[r1,#0]  ; _iicPt
;;;348        _iicData[0]   = (U8)addr;
0009bc  e51f02e8          LDR      r0,|L1.1756|
0009c0  e5c05000          STRB     r5,[r0,#0]  ; _iicData
;;;349        _iicDataCount = 1;
0009c4  e3a00001          MOV      r0,#1
0009c8  e51f12f0          LDR      r1,|L1.1760|
0009cc  e5810000          STR      r0,[r1,#0]  ; _iicDataCount
;;;350    
;;;351        rIICDS   = slvAddr;
0009d0  e3a00454          MOV      r0,#0x54000000
0009d4  e580400c          STR      r4,[r0,#0xc]
;;;352        rIICSTAT = 0xf0;                    //MasTx,Start  
0009d8  e3a000f0          MOV      r0,#0xf0
0009dc  e3a01454          MOV      r1,#0x54000000
0009e0  e5810004          STR      r0,[r1,#4]
;;;353          //Clearing the pending bit isn't needed because the pending bit has been cleared.
;;;354        while(_iicDataCount!=-1)
0009e4  e1a00000          NOP      
                  |L1.2536|
0009e8  e51f0310          LDR      r0,|L1.1760|
0009ec  e5900000          LDR      r0,[r0,#0]  ; _iicDataCount
0009f0  e3700001          CMN      r0,#1
0009f4  0a000001          BEQ      |L1.2560|
;;;355            Run_IicPoll();
0009f8  ebfffffe          BL       Run_IicPoll
0009fc  eafffff9          B        |L1.2536|
;;;356    
;;;357        _iicMode      = RDDATA;
                  |L1.2560|
000a00  e3a00003          MOV      r0,#3
000a04  e51f1338          LDR      r1,|L1.1748|
000a08  e5810000          STR      r0,[r1,#0]  ; _iicMode
;;;358        _iicPt        = 0;
000a0c  e3a00000          MOV      r0,#0
000a10  e51f1340          LDR      r1,|L1.1752|
000a14  e5810000          STR      r0,[r1,#0]  ; _iicPt
;;;359        _iicDataCount = 1;
000a18  e3a00001          MOV      r0,#1
000a1c  e51f1344          LDR      r1,|L1.1760|
000a20  e5810000          STR      r0,[r1,#0]  ; _iicDataCount
;;;360        
;;;361        rIICDS   = slvAddr;
000a24  e3a00454          MOV      r0,#0x54000000
000a28  e580400c          STR      r4,[r0,#0xc]
;;;362        rIICSTAT = 0xb0;                    //Master Rx,Start
000a2c  e3a000b0          MOV      r0,#0xb0
000a30  e3a01454          MOV      r1,#0x54000000
000a34  e5810004          STR      r0,[r1,#4]
;;;363        rIICCON  = 0xaf;                    //Resumes IIC operation.   
000a38  e3a000af          MOV      r0,#0xaf
000a3c  e3a01454          MOV      r1,#0x54000000
000a40  e5810000          STR      r0,[r1,#0]
;;;364        while(_iicDataCount!=-1)
000a44  e1a00000          NOP      
                  |L1.2632|
000a48  e51f0370          LDR      r0,|L1.1760|
000a4c  e5900000          LDR      r0,[r0,#0]  ; _iicDataCount
000a50  e3700001          CMN      r0,#1
000a54  0a000001          BEQ      |L1.2656|
;;;365            Run_IicPoll();
000a58  ebfffffe          BL       Run_IicPoll
000a5c  eafffff9          B        |L1.2632|
;;;366    
;;;367        *data = _iicData[1];
                  |L1.2656|
000a60  e51f038c          LDR      r0,|L1.1756|
000a64  e5d00001          LDRB     r0,[r0,#1]  ; _iicData
000a68  e5c60000          STRB     r0,[r6,#0]
;;;368    }
000a6c  e8bd8070          LDMFD    sp!,{r4-r6,pc}
                          ENDP

                  _Wr24C080 PROC
;;;306    void _Wr24C080(U32 slvAddr,U32 addr,U8 data)
;;;307    {
000a70  e92d4070          STMFD    sp!,{r4-r6,lr}
000a74  e1a04000          MOV      r4,r0
000a78  e1a05001          MOV      r5,r1
000a7c  e1a06002          MOV      r6,r2
;;;308        _iicMode      = WRDATA;
000a80  e3a00001          MOV      r0,#1
000a84  e51f13b8          LDR      r1,|L1.1748|
000a88  e5810000          STR      r0,[r1,#0]  ; _iicMode
;;;309        _iicPt        = 0;
000a8c  e3a00000          MOV      r0,#0
000a90  e51f13c0          LDR      r1,|L1.1752|
000a94  e5810000          STR      r0,[r1,#0]  ; _iicPt
;;;310        _iicData[0]   = (U8)addr;
000a98  e51f03c4          LDR      r0,|L1.1756|
000a9c  e5c05000          STRB     r5,[r0,#0]  ; _iicData
;;;311        _iicData[1]   = data;
000aa0  e51f03cc          LDR      r0,|L1.1756|
000aa4  e5c06001          STRB     r6,[r0,#1]  ; _iicData
;;;312        _iicDataCount = 2;
000aa8  e3a00002          MOV      r0,#2
000aac  e51f13d4          LDR      r1,|L1.1760|
000ab0  e5810000          STR      r0,[r1,#0]  ; _iicDataCount
;;;313        
;;;314        rIICDS        = slvAddr;            //0xa0
000ab4  e3a00454          MOV      r0,#0x54000000
000ab8  e580400c          STR      r4,[r0,#0xc]
;;;315          //Master Tx mode, Start(Write), IIC-bus data output enable
;;;316          //Bus arbitration sucessful, Address as slave status flag Cleared,
;;;317          //Address zero status flag cleared, Last received bit is 0
;;;318        rIICSTAT      = 0xf0;      
000abc  e3a000f0          MOV      r0,#0xf0
000ac0  e3a01454          MOV      r1,#0x54000000
000ac4  e5810004          STR      r0,[r1,#4]
;;;319          //Clearing the pending bit isn't needed because the pending bit has been cleared.
;;;320        while(_iicDataCount!=-1)
000ac8  e1a00000          NOP      
                  |L1.2764|
000acc  e51f03f4          LDR      r0,|L1.1760|
000ad0  e5900000          LDR      r0,[r0,#0]  ; _iicDataCount
000ad4  e3700001          CMN      r0,#1
000ad8  0a000001          BEQ      |L1.2788|
;;;321           Run_IicPoll();
000adc  ebfffffe          BL       Run_IicPoll
000ae0  eafffff9          B        |L1.2764|
;;;322    
;;;323        _iicMode = POLLACK;
                  |L1.2788|
000ae4  e3a00002          MOV      r0,#2
000ae8  e51f141c          LDR      r1,|L1.1748|
000aec  e5810000          STR      r0,[r1,#0]  ; _iicMode
;;;324    
;;;325        while(1)
000af0  e1a00000          NOP      
                  |L1.2804|

⌨️ 快捷键说明

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