📄 cnc2119.txt
字号:
;;;272 uint8 key;
;;;273 CH452I2CStart(); //启动总线
;;;274 CH452I2CWrByte((uint8)(CH452_GET_KEY>>7)&CH452_I2C_MASK|0x01|CH452_I2C_ADDR1); // 若有两个CH452并连,当ADDR=0时,需修改为CH452_I2C_ADDR0
;;;275 key=CH452I2CRdByte(); //读取数据
;;;276 CH452I2CStop(); //结束总线
;;;277 return(key);
;;;278 }
ENDP
CH452Init PROC
;;;286 void CH452Init(void)
;;;287 {
0002ac e52de004 PUSH {lr}
0002b0 e59f0a8c LDR r0,|L1.3396|
0002b4 ebfffffe BL CH452I2CWrite
0002b8 e3a00c05 MOV r0,#0x500
0002bc ebfffffe BL CH452I2CWrite
0002c0 e59f0a80 LDR r0,|L1.3400|
0002c4 ebfffffe BL CH452I2CWrite
0002c8 e49de004 POP {lr}
0002cc e12fff1e BX lr
;;;288 //LED指示
;;;289 CH452I2CWrite(CH452_SYSON1); //两线制方式,如果SDA用做按键中断输出,那么命令应该为(0x04,0x23)
;;;290 CH452I2CWrite(CH452_DSP); // BCD译码,8个数码管
;;;291 //单按按键
;;;292 CH452I2CWrite(CH452_SYSON2); //两线制方式,如果SDA用做按键中断输出,那么命令应该为(0x04,0x23)
;;;293 }
ENDP
IRQ_CAN PROC
;;;342 void IRQ_CAN(void) __irq
;;;343 {
|L1.720|
0002d0 e92d0003 PUSH {r0,r1}
0002d4 e59f0a70 LDR r0,|L1.3404|
0002d8 e5d0000c LDRB r0,[r0,#0xc]
0002dc e59f1a6c LDR r1,|L1.3408|
0002e0 e5810000 STR r0,[r1,#0] ; val
0002e4 e59f0a60 LDR r0,|L1.3404|
0002e8 e5d00020 LDRB r0,[r0,#0x20]
0002ec e2000cff AND r0,r0,#0xff00
0002f0 e59f1a54 LDR r1,|L1.3404|
0002f4 e5c10030 STRB r0,[r1,#0x30]
0002f8 e1a00001 MOV r0,r1
0002fc e5d00024 LDRB r0,[r0,#0x24]
000300 e5c10034 STRB r0,[r1,#0x34]
000304 e1a00001 MOV r0,r1
000308 e5d00028 LDRB r0,[r0,#0x28]
00030c e5c10038 STRB r0,[r1,#0x38]
000310 e1a00001 MOV r0,r1
000314 e5d00028 LDRB r0,[r0,#0x28]
000318 e59f1a30 LDR r1,|L1.3408|
00031c e5810000 STR r0,[r1,#0] ; val
000320 e3a00021 MOV r0,#0x21
000324 e59f1a20 LDR r1,|L1.3404|
000328 e5c10004 STRB r0,[r1,#4]
00032c e3a00004 MOV r0,#4
000330 e5c10004 STRB r0,[r1,#4]
000334 e3a00000 MOV r0,#0
000338 e5000fd0 STR r0,[r0,#-0xfd0]
00033c e8bd0003 POP {r0,r1}
000340 e25ef004 SUBS pc,lr,#4
;;;344
;;;345 val=CAN1ICR; //清除中断方式
;;;346 CAN1TFI1=CAN1RFS&0xff00;
;;;347 //接收到的帧信息写入发送帧信息寄存器
;;;348 CAN1TID1=CAN1RID; //接收到的帧ID写入发送帧ID寄存器
;;;349 CAN1TDA1=CAN1RDA; //前4字节数据定入发送前4字节寄存器
;;;350 val=CAN1RDA; //后4字节数据定入发送后4字节寄存器
;;;351 CAN1CMR=1<<5|1; //选择第一缓冲并启动发送
;;;352 CAN1CMR=0x04; //释放接收缓冲
;;;353 VICVectAddr=0; //通知中断结束
;;;354 }
ENDP
InitCAN PROC
;;;302 {
;;;303 PCONP|=~((uint32)0X01<<13);
000344 e59f0a08 LDR r0,|L1.3412|
000348 e59000c4 LDR r0,[r0,#0xc4]
00034c e3e01a02 MVN r1,#0x2000
000350 e1800001 ORR r0,r0,r1
000354 e59f19f8 LDR r1,|L1.3412|
000358 e58100c4 STR r0,[r1,#0xc4]
00035c e241081d SUB r0,r1,#0x1d0000
000360 e5900004 LDR r0,[r0,#4]
000364 e3800702 ORR r0,r0,#0x80000
000368 e241181d SUB r1,r1,#0x1d0000
00036c e5810004 STR r0,[r1,#4]
000370 e2810906 ADD r0,r1,#0x18000
000374 e5d00000 LDRB r0,[r0,#0]
000378 e3800001 ORR r0,r0,#1
00037c e2811906 ADD r1,r1,#0x18000
000380 e5c10000 STRB r0,[r1,#0]
000384 e1a00001 MOV r0,r1
000388 e5d00014 LDRB r0,[r0,#0x14]
00038c e3800003 ORR r0,r0,#3
000390 e5c10014 STRB r0,[r1,#0x14]
000394 e3a00060 MOV r0,#0x60
000398 e5c10018 STRB r0,[r1,#0x18]
00039c e3a00001 MOV r0,#1
0003a0 e5c10010 STRB r0,[r1,#0x10]
0003a4 e1c10000 BIC r0,r1,r0
0003a8 e5d00000 LDRB r0,[r0,#0]
0003ac e20000fe AND r0,r0,#0xfe
0003b0 e5c10000 STRB r0,[r1,#0]
0003b4 e3a00000 MOV r0,#0
0003b8 e5000ff4 STR r0,[r0,#-0xff4]
0003bc e3a00037 MOV r0,#0x37
0003c0 e3a01000 MOV r1,#0
0003c4 e5010e00 STR r0,[r1,#-0xe00]
0003c8 e24f0c01 ADR r0,|L1.720|
0003cc e5010f00 STR r0,[r1,#-0xf00]
0003d0 e3a00000 MOV r0,#0
0003d4 e5100ff0 LDR r0,[r0,#-0xff0]
0003d8 e3800301 ORR r0,r0,#0x4000000
0003dc e3800702 ORR r0,r0,#0x80000
0003e0 e5010ff0 STR r0,[r1,#-0xff0]
0003e4 e3a00003 MOV r0,#3
0003e8 e59f1968 LDR r1,|L1.3416|
0003ec e5c10000 STRB r0,[r1,#0]
0003f0 e12fff1e BX lr
;;;304 PINSEL1=PINSEL1|0x02<<18;
;;;305 CAN1MOD=CAN1MOD|0X01; //软件复位CAN1控制器
;;;306 //CAN1CMR=0X10;
;;;307 CAN1BTR|=BPS_1000K;
;;;308 CAN1EWL=0X60;
;;;309 CAN1IER=0X01;
;;;310 CAN1MOD=CAN1MOD&0XFE; //软件复位CAN1控制器
;;;311 VICIntSelect=0x00000000;
;;;312 VICVectCntl0=0x37;
;;;313 VICVectAddr0=(int)IRQ_CAN; //设置CAN1为非向量中断
;;;314 VICIntEnable|=(1<<19)|(1<<26); //使能CAN1、CAN2中断通道
;;;315 CANAFMR=0x03; //设置验收过滤模式为旁路模式
;;;316 //while(1); //等待中断
;;;317 }
ENDP
SendData PROC
;;;324 uint8 SendData(uint32 data)
;;;325 { //CAN1为键盘接口
0003f4 e1a01000 MOV r1,r0
0003f8 e59f094c LDR r0,|L1.3404|
0003fc e5d00030 LDRB r0,[r0,#0x30]
000400 e59f2944 LDR r2,|L1.3404|
000404 e5c20030 STRB r0,[r2,#0x30]
000408 e3a00020 MOV r0,#0x20
00040c e5c20034 STRB r0,[r2,#0x34]
000410 e5c21038 STRB r1,[r2,#0x38]
000414 e3a00021 MOV r0,#0x21
000418 e5c20004 STRB r0,[r2,#4]
00041c e1a00000 MOV r0,r0
|L1.1056|
000420 e59f0924 LDR r0,|L1.3404|
000424 e5d00008 LDRB r0,[r0,#8]
000428 e3100001 TST r0,#1
00042c 0afffffb BEQ |L1.1056|
000430 e3a00004 MOV r0,#4
000434 e59f2910 LDR r2,|L1.3404|
000438 e5c20004 STRB r0,[r2,#4]
00043c e3a00001 MOV r0,#1
000440 e12fff1e BX lr
;;;326 //InitCAN();
;;;327 CAN1TFI1|=(0<<31)|(0<<30)|(2<<16); //帧信息:标准数据帧,8位数据
;;;328 CAN1TID1=0x0020; //帧ID:0xAA
;;;329 CAN1TDA1=data; //前4字节数据
;;;330 //CAN1TDB1=keylist[row][col]>>32; //后4字节数据
;;;331 CAN1CMR=1<<5|1; //选择第一个缓冲并启动发送
;;;332 while((CAN1GSR&0X01)==0);
;;;333 CAN1CMR=0x04;
;;;334 return 1;
;;;335 }
ENDP
IRQ_UART0 PROC
;;;363 void IRQ_UART0(void) __irq
;;;364 {
|L1.1092|
000444 e92d0007 PUSH {r0-r2}
000448 e59f190c LDR r1,|L1.3420|
00044c e5d11008 LDRB r1,[r1,#8]
000450 e201100f AND r1,r1,#0xf
000454 e3510004 CMP r1,#4
000458 1a000002 BNE |L1.1128|
00045c e3a01001 MOV r1,#1
000460 e59f28f8 LDR r2,|L1.3424|
000464 e5c21000 STRB r1,[r2,#0] ; rcv_new
|L1.1128|
000468 e3a00000 MOV r0,#0
00046c ea000005 B |L1.1160|
|L1.1136|
000470 e59f18e4 LDR r1,|L1.3420|
000474 e5d11000 LDRB r1,[r1,#0]
000478 e59f28e4 LDR r2,|L1.3428|
00047c e7c21000 STRB r1,[r2,r0]
000480 e2801001 ADD r1,r0,#1
000484 e20100ff AND r0,r1,#0xff
|L1.1160|
000488 e3500002 CMP r0,#2
00048c bafffff7 BLT |L1.1136|
000490 e3a01000 MOV r1,#0
000494 e5011fd0 STR r1,[r1,#-0xfd0]
000498 e8bd0007 POP {r0-r2}
00049c e25ef004 SUBS pc,lr,#4
;;;365 uint8 i;
;;;366 if(0x04==(U0IIR&0X0F))
;;;367 rcv_new=1; //设置接收到新的数据标志
;;;368
;;;369 for(i=0;i<2;i++)
;;;370 {
;;;371 rcv_buf[i]=U0RBR; //读取FIFO数据,并清除中断标志
;;;372 }
;;;373 VICVectAddr=0x00; //中断结束
;;;374 }
ENDP
SendByte PROC
;;;382 {
;;;383 U0THR=data; //发送数据
0004a0 e59f18b4 LDR r1,|L1.3420|
0004a4 e5c10000 STRB r0,[r1,#0]
0004a8 e12fff1e BX lr
;;;384 //while((U0LSR&0x04)==0);
;;;385 }
ENDP
KeyDone PROC
;;;458 uint32 KeyDone(uint32 dat)
;;;459 {
0004ac e52de004 PUSH {lr}
0004b0 e1a01000 MOV r1,r0
0004b4 e241c040 SUB r12,r1,#0x40
0004b8 e35c002e CMP r12,#0x2e
0004bc 308ff10c ADDCC pc,pc,r12,LSL #2
0004c0 ea000129 B |L1.2412|
0004c4 ea00002c B |L1.1404|
0004c8 ea000055 B |L1.1572|
0004cc ea00007e B |L1.1740|
0004d0 ea0000a7 B |L1.1908|
0004d4 ea0000d0 B |L1.2076|
0004d8 ea0000f9 B |L1.2244|
0004dc ea000122 B |L1.2412|
0004e0 ea000121 B |L1.2412|
0004e4 ea00002b B |L1.1432|
0004e8 ea000054 B |L1.1600|
0004ec ea00007d B |L1.1768|
0004f0 ea0000a6 B |L1.1936|
0004f4 ea0000cf B |L1.2104|
0004f8 ea0000f8 B |L1.2272|
0004fc ea00011a B |L1.2412|
000500 ea000119 B |L1.2412|
000504 ea00002a B |L1.1460|
000508 ea000053 B |L1.1628|
00050c ea00007c B |L1.1796|
000510 ea0000a5 B |L1.1964|
000514 ea0000ce B |L1.2132|
000518 ea0000f7 B |L1.2300|
00051c ea000112 B |L1.2412|
000520 ea000111 B |L1.2412|
000524 ea000029 B |L1.1488|
000528 ea000052 B |L1.1656|
00052c ea00007b B |L1.1824|
000530 ea0000a4 B |L1.1992|
000534 ea0000cd B |L1.2160|
000538 ea0000f6 B |L1.2328|
00053c ea00010a B |L1.2412|
000540 ea000109 B |L1.2412|
000544 ea000028 B |L1.1516|
000548 ea000051 B |L1.1684|
00054c ea00007a B |L1.1852|
000550 ea0000a3 B |L1.2020|
000554 ea0000cc B |L1.2188|
000558 ea0000f5 B |L1.2356|
00055c ea000102 B |L1.2412|
000560 ea000101 B |L1.2412|
000564 ea000027 B |L1.1544|
000568 ea000050 B |L1.1712|
00056c ea000079 B |L1.1880|
000570 ea0000a2 B |L1.2048|
000574 ea0000cb B |L1.2216|
000578 ea0000f4 B |L1.2384|
|L1.1404|
00057c e1a00000 MOV r0,r0
000580 e3a02000 MOV r2,#0
000584 e3a03000 MOV r3,#0
000588 e3a0c040 MOV r12,#0x40
00058c e59fe7d4 LDR lr,|L1.3432|
000590 e5cec000 STRB r12,[lr,#0] ; nled
000594 ea0000f6 B |L1.2420|
|L1.1432|
000598 e1a00000 MOV r0,r0
00059c e3a02001 MOV r2,#1
0005a0 e3a03000 MOV r3,#0
0005a4 e3a0c048 MOV r12,#0x48
0005a8 e59fe7b8 LDR lr,|L1.3432|
0005ac e5cec000 STRB r12,[lr,#0] ; nled
0005b0 ea0000ef B |L1.2420|
|L1.1460|
0005b4 e1a00000 MOV r0,r0
0005b8 e3a02002 MOV r2,#2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -