📄 nrf2401.txt
字号:
SetRxMode PROC
;;;136 void SetRxMode(void)
000284 b510 PUSH {r4,lr}
;;;137 {
;;;138 //NRF_DDR|=((1<<CS)|(1<<CE)|(1<<PWR_UP)|(1<<DATA)|(1<<CLK1));
;;;139 NRF_DDR &= 0xff000000; //PA0-5
000286 4860 LDR r0,|L1.1032|
000288 6800 LDR r0,[r0,#0]
00028a f000407f AND r0,r0,#0xff000000
00028e 495c LDR r1,|L1.1024|
000290 f8c10800 STR r0,[r1,#0x800]
;;;140 NRF_DDR |= 0x00333333; //推挽输出
000294 485c LDR r0,|L1.1032|
000296 6800 LDR r0,[r0,#0]
000298 495d LDR r1,|L1.1040|
00029a ea400001 ORR r0,r0,r1
00029e 4958 LDR r1,|L1.1024|
0002a0 f8c10800 STR r0,[r1,#0x800]
;;;141 NRF_PORT |= 0x003F;
0002a4 4608 MOV r0,r1
0002a6 f8d0080c LDR r0,[r0,#0x80c]
0002aa f040003f ORR r0,r0,#0x3f
0002ae f8c1080c STR r0,[r1,#0x80c]
;;;142 //设置为配置模式
;;;143 //PWR_UP = 1;
;;;144 //CE=0;
;;;145 //CS=1;
;;;146 PWR_UP_SET();
0002b2 4608 MOV r0,r1
0002b4 f8d0080c LDR r0,[r0,#0x80c]
0002b8 f0400001 ORR r0,r0,#1
0002bc f8c1080c STR r0,[r1,#0x80c]
;;;147 CE_CLR();
0002c0 4608 MOV r0,r1
0002c2 f8d0080c LDR r0,[r0,#0x80c]
0002c6 f0200002 BIC r0,r0,#2
0002ca f8c1080c STR r0,[r1,#0x80c]
;;;148 CS_SET();
0002ce 4608 MOV r0,r1
0002d0 f8d0080c LDR r0,[r0,#0x80c]
0002d4 f0400004 ORR r0,r0,#4
0002d8 4948 LDR r1,|L1.1020|
0002da 6008 STR r0,[r1,#0]
;;;149 Delay_nUS(600);
0002dc f44f7016 MOV r0,#0x258
0002e0 f7fffffe BL delay_us
;;;150 //配置寄存器0 字节RXEN 设置为 1:接收模式
;;;151 //DATA =1;
;;;152 //CLK1=1;
;;;153 //CLK1=0;
;;;154 DATA_SET();
0002e4 4846 LDR r0,|L1.1024|
0002e6 f8d0080c LDR r0,[r0,#0x80c]
0002ea f0400020 ORR r0,r0,#0x20
0002ee 4944 LDR r1,|L1.1024|
0002f0 f8c1080c STR r0,[r1,#0x80c]
;;;155 CLK1_SET();
0002f4 4608 MOV r0,r1
0002f6 f8d0080c LDR r0,[r0,#0x80c]
0002fa f0400010 ORR r0,r0,#0x10
0002fe f8c1080c STR r0,[r1,#0x80c]
;;;156 CLK1_CLR();
000302 4608 MOV r0,r1
000304 f8d0080c LDR r0,[r0,#0x80c]
000308 f0200010 BIC r0,r0,#0x10
00030c f8c1080c STR r0,[r1,#0x80c]
;;;157 //设置为Activemodes(Rx)
;;;158 //CS=0;
;;;159 //CE=1;
;;;160 CS_CLR();
000310 4608 MOV r0,r1
000312 f8d0080c LDR r0,[r0,#0x80c]
000316 f0200004 BIC r0,r0,#4
00031a f8c1080c STR r0,[r1,#0x80c]
;;;161 CE_SET()
00031e 4608 MOV r0,r1
000320 f8d0080c LDR r0,[r0,#0x80c]
000324 f0400002 ORR r0,r0,#2
000328 4934 LDR r1,|L1.1020|
00032a 6008 STR r0,[r1,#0]
;;;162 Delay_nUS(600);
00032c f44f7016 MOV r0,#0x258
000330 f7fffffe BL delay_us
;;;163
;;;164 //NRF_DDR&=~(1<<DATA);
;;;165 NRF2401_DATA_IN;
000334 4832 LDR r0,|L1.1024|
000336 f8d00800 LDR r0,[r0,#0x800]
00033a f4200070 BIC r0,r0,#0xf00000
00033e 4930 LDR r1,|L1.1024|
000340 f8c10800 STR r0,[r1,#0x800]
000344 4608 MOV r0,r1
000346 f8d00800 LDR r0,[r0,#0x800]
00034a f4400000 ORR r0,r0,#0x800000
00034e f8c10800 STR r0,[r1,#0x800]
000352 4608 MOV r0,r1
000354 f8d0080c LDR r0,[r0,#0x80c]
000358 f0400020 ORR r0,r0,#0x20
00035c f8c1080c STR r0,[r1,#0x80c]
;;;166 }
000360 bd10 POP {r4,pc}
;;;167
ENDP
nRF2401_TxPacket PROC
;;;168 //nRF2401 数据发送函数
;;;169 void nRF2401_TxPacket(unsigned char* p_TxBuf)
000362 b570 PUSH {r4-r6,lr}
;;;170 {
000364 4605 MOV r5,r0
;;;171 unsigned char i = 0;
000366 2400 MOVS r4,#0
;;;172 static unsigned char TxAddress[]={0xcc,0xcc,0xcc,0xcc};//接收方通道硬件地址
;;;173 unsigned char variable2;
;;;174 CE_SET();
000368 4824 LDR r0,|L1.1020|
00036a 6800 LDR r0,[r0,#0]
00036c f0400002 ORR r0,r0,#2
000370 4923 LDR r1,|L1.1024|
000372 f8c1080c STR r0,[r1,#0x80c]
;;;175 for (i=0;i< (ADDR_W/8);i++) //写入接收地址(按字节对齐)
000376 bf00 NOP
000378 e006 B |L1.904|
|L1.890|
;;;176 {
;;;177 variable2=TxAddress[i];
00037a 4827 LDR r0,|L1.1048|
00037c 5d06 LDRB r6,[r0,r4]
;;;178 ByteWrite(variable2);
00037e 4630 MOV r0,r6
000380 f7fffffe BL ByteWrite
000384 1c60 ADDS r0,r4,#1 ;175
000386 b2c4 UXTB r4,r0 ;175
|L1.904|
000388 2c05 CMP r4,#5 ;175
00038a dbf6 BLT |L1.890|
;;;179 }
;;;180 for (i=0;i<(DATA1_W/8);i++) //写入需要发送的数据(按字节对齐)
00038c 2400 MOVS r4,#0
00038e e005 B |L1.924|
|L1.912|
;;;181 {
;;;182 variable2 = p_TxBuf[i];
000390 5d2e LDRB r6,[r5,r4]
;;;183 ByteWrite(variable2);
000392 4630 MOV r0,r6
000394 f7fffffe BL ByteWrite
000398 1c60 ADDS r0,r4,#1 ;180
00039a b2c4 UXTB r4,r0 ;180
|L1.924|
00039c 2c0a CMP r4,#0xa ;180
00039e dbf7 BLT |L1.912|
;;;184 }
;;;185 CE_CLR(); //CE=0; //CE 置低使发送有效
0003a0 4816 LDR r0,|L1.1020|
0003a2 6800 LDR r0,[r0,#0]
0003a4 f0200002 BIC r0,r0,#2
0003a8 4915 LDR r1,|L1.1024|
0003aa f8c1080c STR r0,[r1,#0x80c]
;;;186 Delay_nUS(200);
0003ae f04f00c8 MOV r0,#0xc8
0003b2 f7fffffe BL delay_us
;;;187 }
0003b6 bd70 POP {r4-r6,pc}
;;;188
ENDP
nRF2401_RxPacket PROC
;;;191 // 1:接收到数据
;;;192 unsigned char nRF2401_RxPacket(unsigned char* p_RxBuf)
0003b8 b510 PUSH {r4,lr}
;;;193 {
0003ba 4603 MOV r3,r0
;;;194 unsigned char i = 0;
0003bc 2400 MOVS r4,#0
;;;195 //NRF_DDR &= ~(1<<DR1);
;;;196 //DR1_SET();
;;;197 NRF2401_DR1_IN;
0003be 4812 LDR r0,|L1.1032|
0003c0 6800 LDR r0,[r0,#0]
0003c2 f4204070 BIC r0,r0,#0xf000
0003c6 490e LDR r1,|L1.1024|
0003c8 f8c10800 STR r0,[r1,#0x800]
0003cc 4608 MOV r0,r1
0003ce f8d00800 LDR r0,[r0,#0x800]
0003d2 f4404000 ORR r0,r0,#0x8000
0003d6 f8c10800 STR r0,[r1,#0x800]
0003da 4608 MOV r0,r1
0003dc f8d0080c LDR r0,[r0,#0x80c]
0003e0 f0400008 ORR r0,r0,#8
0003e4 f8c1080c STR r0,[r1,#0x80c]
;;;198 if(DR1_STATE)
0003e8 4806 LDR r0,|L1.1028|
0003ea 6800 LDR r0,[r0,#0]
0003ec f0000008 AND r0,r0,#8
0003f0 2808 CMP r0,#8
0003f2 d11d BNE |L1.1072|
;;;199 {
;;;200 for (i=0; i<DATA1_W/8; i++)
0003f4 bf00 NOP
0003f6 e017 B |L1.1064|
|L1.1016|
DCD Data_Buffer
|L1.1020|
DCD 0x4001080c
|L1.1024|
DCD 0x40010000
|L1.1028|
DCD 0x40010808
|L1.1032|
DCD 0x40010800
|L1.1036|
DCD 0x40021000
|L1.1040|
DCD 0x00333333
|L1.1044|
DCD nRF2401_Conf
|L1.1048|
DCD TxAddress
|L1.1052|
;;;201 {
;;;202 *p_RxBuf = ByteRead();
00041c f7fffffe BL ByteRead
000420 7018 STRB r0,[r3,#0]
;;;203 p_RxBuf ++;
000422 1c5b ADDS r3,r3,#1
000424 1c60 ADDS r0,r4,#1 ;200
000426 b2c4 UXTB r4,r0 ;200
|L1.1064|
000428 2c0a CMP r4,#0xa ;200
00042a dbf7 BLT |L1.1052|
;;;204 }
;;;205 return 1;
00042c 2001 MOVS r0,#1
|L1.1070|
;;;206 }
;;;207 return 0;
;;;208 }
00042e bd10 POP {r4,pc}
|L1.1072|
000430 2000 MOVS r0,#0 ;207
000432 e7fc B |L1.1070|
;;;209 //新增函数,功能上与UART模块部分
ENDP
Get_PC_2401_Rate PROC
;;;232 */
;;;233 unsigned char Get_PC_2401_Rate(long int* p_Rate)
000434 b570 PUSH {r4-r6,lr}
;;;234 {
000436 4605 MOV r5,r0
;;;235 static unsigned char Temp_Array[30] = {0};
;;;236 unsigned char i =0;
000438 2400 MOVS r4,#0
;;;237 long int Temp = 0;
00043a 2600 MOVS r6,#0
;;;238 static long int Temp_Rate = 0;
;;;239
;;;240 static unsigned char ch_CMD = 0;
;;;241 if(nRF2401_RxPacket(Temp_Array))
00043c 4815 LDR r0,|L1.1172|
00043e f7fffffe BL nRF2401_RxPacket
000442 b318 CBZ r0,|L1.1164|
;;;242 {
;;;243 if((Temp_Array[0] == 0xaa)&&(Temp_Array[8] == 0x55))
000444 4813 LDR r0,|L1.1172|
000446 7800 LDRB r0,[r0,#0] ; Temp_Array
000448 28aa CMP r0,#0xaa
00044a d11c BNE |L1.1158|
00044c 4811 LDR r0,|L1.1172|
00044e 7a00 LDRB r0,[r0,#8] ; Temp_Array
000450 2855 CMP r0,#0x55
000452 d118 BNE |L1.1158|
;;;244 {
;;;245 Temp_Rate = 0;
000454 2000 MOVS r0,#0
000456 4910 LDR r1,|L1.1176|
000458 6008 STR r0,[r1,#0] ; Temp_Rate
;;;246 for(i=3; i<7; i++)
00045a 2403 MOVS r4,#3
00045c e00d B |L1.1146|
|L1.1118|
;;;247 {
;;;248 Temp = Temp_Array[i];
00045e 480d LDR r0,|L1.1172|
000460 5d06 LDRB r6,[r0,r4]
;;;249 Temp_Rate |= Temp_Array[i]<<((6-i)<<3);//8*(6-i)
000462 5d00 LDRB r0,[r0,r4]
000464 f1c40106 RSB r1,r4,#6
000468 00c9 LSLS r1,r1,#3
00046a 4088 LSLS r0,r0,r1
00046c 490a LDR r1,|L1.1176|
00046e 6809 LDR r1,[r1,#0] ; Temp_Rate
000470 4308 ORRS r0,r0,r1
000472 4909 LDR r1,|L1.1176|
000474 6008 STR r0,[r1,#0] ; Temp_Rate
000476 1c60 ADDS r0,r4,#1 ;246
000478 b2c4 UXTB r4,r0 ;246
|L1.1146|
00047a 2c07 CMP r4,#7 ;246
00047c dbef BLT |L1.1118|
;;;250 }
;;;251 ch_CMD = Temp_Array[2];
00047e 4805 LDR r0,|L1.1172|
000480 7880 LDRB r0,[r0,#2] ; Temp_Array
000482 4906 LDR r1,|L1.1180|
000484 7008 STRB r0,[r1,#0]
|L1.1158|
;;;252 }
;;;253 *p_Rate = Temp_Rate;
000486 4804 LDR r0,|L1.1176|
000488 6800 LDR r0,[r0,#0] ; Temp_Rate
00048a 6028 STR r0,[r5,#0]
|L1.1164|
;;;254 }
;;;255 return ch_CMD;
00048c 4803 LDR r0,|L1.1180|
00048e 7800 LDRB r0,[r0,#0] ; ch_CMD
;;;256 }
000490 bd70 POP {r4-r6,pc}
;;;257
ENDP
000492 0000 DCW 0x0000
|L1.1172|
DCD Temp_Array
|L1.1176|
DCD Temp_Rate
|L1.1180|
DCD ch_CMD
AREA ||.bss||, DATA, NOINIT, ALIGN=0
Temp_Array
% 30
AREA ||.data||, DATA, ALIGN=2
nRF2401_Conf
000000 8e081c50 DCB 0x8e,0x08,0x1c,0x50
000004 50aaab55 DCB 0x50,0xaa,0xab,0x55
000008 abaaaaab DCB 0xab,0xaa,0xaa,0xab
00000c 55abaaa3 DCB 0x55,0xab,0xaa,0xa3
000010 ef91 DCB 0xef,0x91
TxAddress
000012 cccc DCB 0xcc,0xcc
000014 cccc0000 DCB 0xcc,0xcc,0x00,0x00
Temp_Rate
DCD 0x00000000
ch_CMD
00001c 00 DCB 0x00
Data_Buffer
00001d 00 DCB 0x00
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -