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

📄 cnc2119.txt

📁 基于ARM7与CAN总线的加工中心面板控制系统软件。选用ARM单片机且带CAN接口的lpc2119芯片
💻 TXT
📖 第 1 页 / 共 5 页
字号:
;;;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 + -