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

📄 led_gpio.txt

📁 一个电力系统谐波检测的程序
💻 TXT
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.0 [Build 951] for uVision
; commandline ArmCC [--debug -c --asm --interleave -oled_gpio.o --device=DARMP --apcs=interwork -O0 -IC:\Keil\ARM\INC\Philips LED_GPIO\LED_GPIO.C]

                          ARM

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

                  SSP_Init PROC
;;;29     	  
;;;30         PCONP |= 1<<10;//SSP  POWER   ENABLE
000000  e59f00d4          LDR      r0,|L1.220|
000004  e59000c4          LDR      r0,[r0,#0xc4]
000008  e3800b01          ORR      r0,r0,#0x400
00000c  e59f10c8          LDR      r1,|L1.220|
000010  e58100c4          STR      r0,[r1,#0xc4]
;;;31         SSPCR0 = (0x01 << 8) |              // SCR  设置SPI时钟分频
000014  e59f00c4          LDR      r0,|L1.224|
000018  e2411965          SUB      r1,r1,#0x194000
00001c  e1c100b0          STRH     r0,[r1,#0]
;;;32                  (0x00 << 7) |              // CPHA 时钟输出相位,仅SPI模式有效 
;;;33                  (0x00 << 6) |              // CPOL 时钟输出极性,仅SPI模式有效
;;;34                  (0x00 << 4) |              // FRF  帧格式 00=SPI,01=SSI,10=Microwire,11=保留
;;;35                  (0x07 << 0);               // DSS  数据长度,0000-0010=保留,0011=4位,0111=8位,1111=16位
;;;36     
;;;37         SSPCR1 = (0x00 << 3) |              // SOD  从机输出禁能,1=禁止,0=允许
000020  e3a00002          MOV      r0,#2
000024  e5c10004          STRB     r0,[r1,#4]
;;;38                  (0x00 << 2) |              // MS   主从选择,0=主机,1=从机
;;;39                  (0x01 << 1) |              // SSE  SSP使能,1=允许SSP与其它设备通信
;;;40                  (0x00 << 0);               // LBM  回写模式        
;;;41         SSPCPSR = 0x52;  						 //预分频
000028  e3a00052          MOV      r0,#0x52
00002c  e5c10010          STRB     r0,[r1,#0x10]
;;;42     //	SSPIMSC = 0x02;  						   
;;;43        // SSPICR  = 0x03;                     // 中断清除寄存器
;;;44     
;;;45         /*VICVectCntl2 = (0x20 | 11);         		// SSP中断为最高优先级
;;;46         VICVectAddr2 = (int)SSP_IRQ;        		// 设置中断向量地址
;;;47         VICIntEnable = (1 << 11);           		// 允许SSP中断		  	*/
;;;48     }
000030  e12fff1e          BX       lr
                          ENDP

                  SSP_SendData PROC
;;;64     uint8  SSP_SendData(uint8 data)
;;;65     {  
000034  e1a01000          MOV      r1,r0
;;;66         IO1CLR = HC595_CS;			        // 选择从机   
000038  e3a00601          MOV      r0,#0x100000
00003c  e59f20a0          LDR      r2,|L1.228|
000040  e582001c          STR      r0,[r2,#0x1c]
;;;67         SSPDR = data;
000044  e1820140          ORR      r0,r2,r0,ASR #2
000048  e1c010b8          STRH     r1,[r0,#8]
;;;68         while( (SSPSR & 0x01) == 0 );	    // 等待TFE置位,即发送FIFO空   
00004c  e1a00000          MOV      r0,r0
                  |L1.80|
000050  e59f0090          LDR      r0,|L1.232|
000054  e5d0000c          LDRB     r0,[r0,#0xc]
000058  e3100001          TST      r0,#1
00005c  0afffffb          BEQ      |L1.80|
;;;69         IO1SET = HC595_CS;
000060  e3a00601          MOV      r0,#0x100000
000064  e59f2078          LDR      r2,|L1.228|
000068  e5820014          STR      r0,[r2,#0x14]
;;;70         return(SSPDR);
00006c  e1820140          ORR      r0,r2,r0,ASR #2
000070  e1d000b8          LDRH     r0,[r0,#8]
000074  e20000ff          AND      r0,r0,#0xff
;;;71     }
000078  e12fff1e          BX       lr
                          ENDP

                  SSP_READ_GPIO PROC
;;;85     		 
;;;86         IO0CLR =HC165_SH_LD;	//低电平是读取寄存器值	   
00007c  e3a01601          MOV      r1,#0x100000
000080  e59f205c          LDR      r2,|L1.228|
000084  e582100c          STR      r1,[r2,#0xc]
;;;87              while (0== (SSPSR & 0x4)); //如果接受FIFO为空时就在此循环等待
000088  e1a00000          MOV      r0,r0
                  |L1.140|
00008c  e59f1054          LDR      r1,|L1.232|
000090  e5d1100c          LDRB     r1,[r1,#0xc]
000094  e3110004          TST      r1,#4
000098  0afffffb          BEQ      |L1.140|
;;;88     	     temp  =SSPDR;
00009c  e59f1044          LDR      r1,|L1.232|
0000a0  e1d110b8          LDRH     r1,[r1,#8]
0000a4  e20100ff          AND      r0,r1,#0xff
;;;89     	IO0SET =HC165_SH_LD;  //高电平时允许移位
0000a8  e3a01601          MOV      r1,#0x100000
0000ac  e59f2030          LDR      r2,|L1.228|
0000b0  e5821004          STR      r1,[r2,#4]
;;;90     	 return  temp;
;;;91     }   
0000b4  e12fff1e          BX       lr
                          ENDP

                  SSP_SEND_LED PROC
;;;97     uint8 SSP_SEND_LED(int num)
;;;98     {
0000b8  e92d4010          PUSH     {r4,lr}
0000bc  e1a03000          MOV      r3,r0
;;;99           volatile uint8 rcv;
;;;100       	  rcv=SSP_SendData(DISP_TAB[num]);
0000c0  e59f1024          LDR      r1,|L1.236|
0000c4  e7d10003          LDRB     r0,[r1,r3]
0000c8  ebfffffe          BL       SSP_SendData
0000cc  e1a04000          MOV      r4,r0
;;;101    	  return  rcv;
0000d0  e1a00004          MOV      r0,r4
0000d4  e8bd4010          POP      {r4,lr}
;;;102    }
0000d8  e12fff1e          BX       lr
                  |L1.220|
0000dc  e01fc000          DCD      0xe01fc000
                  |L1.224|
0000e0  00000107          DCD      0x00000107
                  |L1.228|
0000e4  e0028000          DCD      0xe0028000
                  |L1.232|
0000e8  e0068000          DCD      0xe0068000
                  |L1.236|
0000ec  00000000          DCD      DISP_TAB
                          ENDP



                          AREA ||.constdata.1||, DATA, READONLY, ALIGN=0

                  DISP_TAB
                          DCB      0xc0,0xf9,0xa4,0xb0
                          DCB      0x99,0x92,0x82,0xf8
                          DCB      0x80,0x90,0x88,0x83
                          DCB      0xc6,0xa1,0x86,0x8e

⌨️ 快捷键说明

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