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

📄 main.txt

📁 射频芯片nRF905例程
💻 TXT
📖 第 1 页 / 共 5 页
字号:
; generated by ARM/Thumb C/C++ Compiler, RVCT2.2 [Build 442] for uVision
; commandline ArmCC [--thumb --debug -c --asm --interleave -o.\Obj\main.o --device=DARMP -O0 --apcs=interwork -ID:\Keil\ARM\INC\Philips main.cpp]

                          THUMB

                          AREA ||.text||, CODE, READONLY, ALIGN=2

                  _Z12_delay_loop_j PROC ; _delay_loop_(unsigned)
;;;21     void _delay_loop_(unsigned int val)
;;;22     {
000000  2100              MOVS     r1,#0
;;;23     unsigned int i;
;;;24       for(i = 0; i < (val * 60); i ++);
000002  e000              B        |L1.6|
                  |L1.4|
000004  1c49              ADDS     r1,r1,#1
                  |L1.6|
000006  223c              MOVS     r2,#0x3c
000008  4342              MULS     r2,r0,r2
00000a  428a              CMP      r2,r1
00000c  d8fa              BHI      |L1.4|
;;;25     }
00000e  4770              BX       lr
                          ENDP

                  _ZN6LcdObj7LcdSendEc PROC ; LcdObj::LcdSend(char)
;;;446    void LcdObj::LcdSend(char cData)
;;;447    {
000010  b570              PUSH     {r4-r6,lr}
000012  0006              MOVS     r6,r0
000014  000c              MOVS     r4,r1
;;;448    unsigned char i;
;;;449      _delay_loop_(1);
000016  2001              MOVS     r0,#1
000018  f7ff fffe         BL       _Z12_delay_loop_j
;;;450      for (i = 0; i < 8; i ++) {
00001c  2500              MOVS     r5,#0
00001e  e016              B        |L1.78|
;;;451    //    _delay_loop_(1);
;;;452        IOCLR1 = (1 << LCDSCK);
                  |L1.32|
000020  2001              MOVS     r0,#1
000022  0480              LSLS     r0,r0,#18
000024  49e9              LDR      r1,|L1.972|
000026  61c8              STR      r0,[r1,#0x1c]
;;;453    //    _delay_loop_(1);
;;;454        if (cData & 0x80) {//MSB最高位为1时
000028  2080              MOVS     r0,#0x80
00002a  4204              TST      r4,r0
00002c  d002              BEQ      |L1.52|
;;;455          IOSET1 = (1 << LCDSID);
00002e  0300              LSLS     r0,r0,#12
000030  6148              STR      r0,[r1,#0x14]
000032  e003              B        |L1.60|
;;;456    	}
;;;457    	else {
;;;458          IOCLR1 = (1 << LCDSID);
                  |L1.52|
000034  2001              MOVS     r0,#1
000036  04c0              LSLS     r0,r0,#19
000038  49e4              LDR      r1,|L1.972|
00003a  61c8              STR      r0,[r1,#0x1c]
;;;459    	}
;;;460    //    _delay_loop_(1);
;;;461    	cData <<= 1;
                  |L1.60|
00003c  0660              LSLS     r0,r4,#25
00003e  0e04              LSRS     r4,r0,#24
;;;462        IOSET1 = (1 << LCDSCK);
000040  2001              MOVS     r0,#1
000042  0480              LSLS     r0,r0,#18
000044  49e1              LDR      r1,|L1.972|
000046  6148              STR      r0,[r1,#0x14]
000048  1c68              ADDS     r0,r5,#1              ;450
00004a  0605              LSLS     r5,r0,#24             ;450
00004c  0e2d              LSRS     r5,r5,#24             ;450
                  |L1.78|
00004e  2d08              CMP      r5,#8                 ;450
000050  dbe6              BLT      |L1.32|               ;450
;;;463    //    _delay_loop_(1);
;;;464      }	
;;;465    }
000052  bc70              POP      {r4-r6}
000054  bc08              POP      {r3}
000056  4718              BX       r3
                          ENDP

                  _ZN6LcdObj11LcdSendDataEc PROC ; LcdObj::LcdSendData(char)
;;;501    void LcdObj::LcdSendData(char cData)
;;;502    {
000058  b530              PUSH     {r4,r5,lr}
00005a  0005              MOVS     r5,r0
00005c  000c              MOVS     r4,r1
;;;503    /*--------------------------------------------------------
;;;504        发送同步脉冲11111 WR(0) RS(0) 0发送顺序从左至右)
;;;505    --------------------------------------------------------*/
;;;506      IOSET1 = (1 << LCDCS);//SS=1,启动SPI
00005e  2001              MOVS     r0,#1
000060  0440              LSLS     r0,r0,#17
000062  49da              LDR      r1,|L1.972|
000064  6148              STR      r0,[r1,#0x14]
;;;507      LcdSend(0xfa);//发送LCD显示数据
000066  21fa              MOVS     r1,#0xfa
000068  0028              MOVS     r0,r5
00006a  f7ff fffe         BL       _ZN6LcdObj7LcdSendEc
;;;508      LcdSend(cData & 0xf0);//发送高4位LCD显示数据
00006e  20f0              MOVS     r0,#0xf0
000070  0021              MOVS     r1,r4
000072  4001              ANDS     r1,r1,r0
000074  0028              MOVS     r0,r5
000076  f7ff fffe         BL       _ZN6LcdObj7LcdSendEc
;;;509      LcdSend(cData << 4);//发送低4位LCD显示数据
00007a  0720              LSLS     r0,r4,#28
00007c  0e01              LSRS     r1,r0,#24
00007e  0028              MOVS     r0,r5
000080  f7ff fffe         BL       _ZN6LcdObj7LcdSendEc
;;;510      IOCLR1 = (1 << LCDCS);//SS=0,关闭SPI
000084  2001              MOVS     r0,#1
000086  0440              LSLS     r0,r0,#17
000088  49d0              LDR      r1,|L1.972|
00008a  61c8              STR      r0,[r1,#0x1c]
;;;511      _delay_loop_(72);//st7920要求等待延时72uS
00008c  2048              MOVS     r0,#0x48
00008e  f7ff fffe         BL       _Z12_delay_loop_j
;;;512    }
000092  bc30              POP      {r4,r5}
000094  bc08              POP      {r3}
000096  4718              BX       r3
                          ENDP

                  _ZN6LcdObj14LcdSendCommandEc PROC ; LcdObj::LcdSendCommand(char)
;;;483    void LcdObj::LcdSendCommand(char cCommand)
;;;484    {
000098  b530              PUSH     {r4,r5,lr}
00009a  0005              MOVS     r5,r0
00009c  000c              MOVS     r4,r1
;;;485    /*--------------------------------------------------------
;;;486        发送同步脉冲11111 WR(0) RS(0) 0发送顺序从左至右)
;;;487    --------------------------------------------------------*/
;;;488      IOSET1 = (1 << LCDCS);//SS=1,启动SPI
00009e  2001              MOVS     r0,#1
0000a0  0440              LSLS     r0,r0,#17
0000a2  49ca              LDR      r1,|L1.972|
0000a4  6148              STR      r0,[r1,#0x14]
;;;489      LcdSend(0xf8);//发送LCD控制命令
0000a6  21f8              MOVS     r1,#0xf8
0000a8  0028              MOVS     r0,r5
0000aa  f7ff fffe         BL       _ZN6LcdObj7LcdSendEc
;;;490      LcdSend(cCommand & 0xf0);//发送高4位LCD控制命令
0000ae  20f0              MOVS     r0,#0xf0
0000b0  0021              MOVS     r1,r4
0000b2  4001              ANDS     r1,r1,r0
0000b4  0028              MOVS     r0,r5
0000b6  f7ff fffe         BL       _ZN6LcdObj7LcdSendEc
;;;491      LcdSend(cCommand << 4);//发送低4位LCD控制命令
0000ba  0720              LSLS     r0,r4,#28
0000bc  0e01              LSRS     r1,r0,#24
0000be  0028              MOVS     r0,r5
0000c0  f7ff fffe         BL       _ZN6LcdObj7LcdSendEc
;;;492      IOCLR1 = (1 << LCDCS);//SS=0,关闭SPI
0000c4  2001              MOVS     r0,#1
0000c6  0440              LSLS     r0,r0,#17
0000c8  49c0              LDR      r1,|L1.972|
0000ca  61c8              STR      r0,[r1,#0x1c]
;;;493      if (cCommand == 0x01) _delay_loop_(1600);//1.6mS
0000cc  2c01              CMP      r4,#1
0000ce  d104              BNE      |L1.218|
0000d0  2019              MOVS     r0,#0x19
0000d2  0180              LSLS     r0,r0,#6
0000d4  f7ff fffe         BL       _Z12_delay_loop_j
0000d8  e002              B        |L1.224|
;;;494      else _delay_loop_(72);//st7920要求等待72uS
                  |L1.218|
0000da  2048              MOVS     r0,#0x48
0000dc  f7ff fffe         BL       _Z12_delay_loop_j
;;;495    }
                  |L1.224|
0000e0  bc30              POP      {r4,r5}
0000e2  bc08              POP      {r3}
0000e4  4718              BX       r3
                          ENDP

                  _ZN6LcdObj16LcdDisplayBufferEv PROC ; LcdObj::LcdDisplayBuffer()
;;;539    void LcdObj::LcdDisplayBuffer(void)
;;;540    {
0000e6  b570              PUSH     {r4-r6,lr}
0000e8  0004              MOVS     r4,r0
;;;541    unsigned char i, j;
;;;542      for (i = 0; i < 4; i ++) {//4行汉字
0000ea  2500              MOVS     r5,#0
0000ec  e022              B        |L1.308|
;;;543        if (LcdRowWriteEnable[i]) {//允许此行刷新汉字显示
                  |L1.238|
0000ee  1ce0              ADDS     r0,r4,#3
0000f0  5d40              LDRB     r0,[r0,r5]
0000f2  2800              CMP      r0,#0
0000f4  d01b              BEQ      |L1.302|
;;;544          LcdSendCommand(0x80 + (i & 1) * 16 + (i >> 1) * 8);//移动光标
0000f6  07e8              LSLS     r0,r5,#31
0000f8  0ec0              LSRS     r0,r0,#27
0000fa  3080              ADDS     r0,r0,#0x80
0000fc  106a              ASRS     r2,r5,#1
0000fe  00d2              LSLS     r2,r2,#3
000100  1880              ADDS     r0,r0,r2
000102  0601              LSLS     r1,r0,#24
000104  0e09              LSRS     r1,r1,#24
000106  0020              MOVS     r0,r4
000108  f7ff fffe         BL       _ZN6LcdObj14LcdSendCommandEc
;;;545          for (j = 0; j < 16; j ++) {//每行8个汉字16个字符
00010c  2600              MOVS     r6,#0
00010e  e009              B        |L1.292|
;;;546            LcdSendData(LcdBuffer[i][j]);//刷新显示字符
                  |L1.272|
000110  012a              LSLS     r2,r5,#4
000112  1de0              ADDS     r0,r4,#7
000114  1810              ADDS     r0,r2,r0
000116  5d81              LDRB     r1,[r0,r6]
000118  0020              MOVS     r0,r4
00011a  f7ff fffe         BL       _ZN6LcdObj11LcdSendDataEc
00011e  1c70              ADDS     r0,r6,#1              ;545
000120  0606              LSLS     r6,r0,#24             ;545
000122  0e36              LSRS     r6,r6,#24             ;545
                  |L1.292|
000124  2e10              CMP      r6,#0x10              ;545
000126  dbf3              BLT      |L1.272|              ;545
;;;547          }
;;;548    	  LcdRowWriteEnable[i] = 0;//过后不允许此行刷新汉字显示
000128  2100              MOVS     r1,#0
00012a  1ce0              ADDS     r0,r4,#3
00012c  5541              STRB     r1,[r0,r5]
                  |L1.302|
00012e  1c68              ADDS     r0,r5,#1              ;542
000130  0605              LSLS     r5,r0,#24             ;542
000132  0e2d              LSRS     r5,r5,#24             ;542
                  |L1.308|
000134  2d04              CMP      r5,#4                 ;542
000136  dbda              BLT      |L1.238|              ;542
;;;549    	}
;;;550      }
;;;551    }
000138  bc70              POP      {r4-r6}
00013a  bc08              POP      {r3}
00013c  4718              BX       r3
                          ENDP

                  _ZN6LcdObj10LcdDisplayEPKc PROC ; LcdObj::LcdDisplay(const char*)
;;;554    void LcdObj::LcdDisplay(const char * string)
;;;555    {
00013e  b430              PUSH     {r4,r5}
;;;556      while(*string) {
000140  e009              B        |L1.342|
;;;557        LcdBuffer[LcdRow][LcdCol ++] = *string ++;
                  |L1.322|
000142  780b              LDRB     r3,[r1,#0]
000144  7844              LDRB     r4,[r0,#1]
000146  1c62              ADDS     r2,r4,#1
000148  7042              STRB     r2,[r0,#1]
00014a  7802              LDRB     r2,[r0,#0]
00014c  0115              LSLS     r5,r2,#4
00014e  1dc2              ADDS     r2,r0,#7
000150  18aa              ADDS     r2,r5,r2
000152  5513              STRB     r3,[r2,r4]
000154  1c49              ADDS     r1,r1,#1
                  |L1.342|
000156  780a              LDRB     r2,[r1,#0]
000158  2a00              CMP      r2,#0
00015a  d1f2              BNE      |L1.322|
;;;558      }
;;;559    }
00015c  bc30              POP      {r4,r5}
00015e  4770              BX       lr
                          ENDP

                  _ZN6LcdObj16SetLcdDisplayPosEhh PROC ; LcdObj::SetLcdDisplayPos(unsigned char, unsigned char)
;;;515    void LcdObj::SetLcdDisplayPos(unsigned char row, unsigned char col)
;;;516    {
000160  b410              PUSH     {r4}
;;;517      row &= 0x03;//4行汉字
000162  0789              LSLS     r1,r1,#30
000164  0f89              LSRS     r1,r1,#30
;;;518      col &= 0x0f;//每行8个汉字16个字符
000166  0712              LSLS     r2,r2,#28
000168  0f12              LSRS     r2,r2,#28
;;;519      LcdRow = row;
00016a  7001              STRB     r1,[r0,#0]
;;;520      LcdCol = col;
00016c  7042              STRB     r2,[r0,#1]
;;;521      LcdRowWriteEnable[row] = 1;//允许此行刷新汉字显示
00016e  2401              MOVS     r4,#1
000170  1cc3              ADDS     r3,r0,#3
000172  545c              STRB     r4,[r3,r1]
;;;522    }
000174  bc10              POP      {r4}
000176  4770              BX       lr
                          ENDP

                  _Z8BeepTaskv PROC ; BeepTask()
;;;643    
;;;644    void BeepTask (void) __task {
000178  b570              PUSH     {r4-r6,lr}
;;;645    OS_RESULT result;
;;;646    unsigned int i;	
;;;647      for (;;) {
00017a  46c0              MOV      r8,r8
;;;648        result = os_evt_wait_or(0xffff, 0xffff);//等待BeepTask任务事件发生
                  |L1.380|
00017c  2200              MOVS     r2,#0
00017e  4994              LDR      r1,|L1.976|
000180  0008              MOVS     r0,r1
000182  f7ff fffe         BL       os_evt_wait
000186  0004              MOVS     r4,r0
;;;649    	if(result == OS_R_EVT) {
000188  2c02              CMP      r4,#2
00018a  d1f7              BNE      |L1.380|
;;;650    	  i = os_evt_get();
00018c  f7ff fffe         BL       os_evt_get

⌨️ 快捷键说明

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