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

📄 uart.txt

📁 该模板使用于周立功公司研发的EasyARM2100系列开发板
💻 TXT
📖 第 1 页 / 共 3 页
字号:
;;;96        U0DLL = Fdiv % 256;						
000260  e1a00005          MOV      r0,r5
000264  e1a01fc5          ASR      r1,r5,#31
000268  e0851c21          ADD      r1,r5,r1,LSR #24
00026c  e1a01441          ASR      r1,r1,#8
000270  e0451401          SUB      r1,r5,r1,LSL #8
000274  e5c21000          STRB     r1,[r2,#0]
;;;97        U0LCR = 0x03;
000278  e3a00003          MOV      r0,#3
00027c  e1c21000          BIC      r1,r2,r0
000280  e5c1000c          STRB     r0,[r1,#0xc]
;;;98        
;;;99        U0FCR = 0x01;//   U0FCR = 0x81;                         // 设置FIFO控制寄存器,使能FIFO,并设置触发点为1字节。
000284  e3a00001          MOV      r0,#1
000288  e5c10008          STRB     r0,[r1,#8]
;;;100       U0IER = 0x01;                         // 设置中断使能寄存器,允许RBR中断,即接收中断
00028c  e5c10004          STRB     r0,[r1,#4]
;;;101         
;;;102       VICIntSelect &=~(1<<6);            // 设置所有通道为IRQ中断
000290  e3a00000          MOV      r0,#0
000294  e5100ff4          LDR      r0,[r0,#-0xff4]
000298  e3c00040          BIC      r0,r0,#0x40
00029c  e3a01000          MOV      r1,#0
0002a0  e5010ff4          STR      r0,[r1,#-0xff4]
;;;103       VICVectCntl5  = 0x20 | 6;          // UART0中断通道分配到IRQ slot 10,即优先级10
0002a4  e3a00026          MOV      r0,#0x26
0002a8  e5010dec          STR      r0,[r1,#-0xdec]
;;;104       VICVectAddr5 = (int)IRQ_UART0;     // 设置UART0向量地址为10
0002ac  e24f0fa2          ADR      r0,IRQ_UART0
0002b0  e5010eec          STR      r0,[r1,#-0xeec]
;;;105       VICIntEnable |=(1<<6);            // 使能UART0中断
0002b4  e3a00000          MOV      r0,#0
0002b8  e5100ff0          LDR      r0,[r0,#-0xff0]
0002bc  e3800040          ORR      r0,r0,#0x40
0002c0  e5010ff0          STR      r0,[r1,#-0xff0]
;;;106    }				
0002c4  e8bd4070          POP      {r4-r6,lr}
0002c8  e12fff1e          BX       lr
;;;107    	
                          ENDP

                  UART0_SendByte PROC
;;;116    void  UART0_SendByte(uint8 data)
;;;117    {  U0THR = data;				    // 发送数据
0002cc  e59f1310          LDR      r1,|L1.1508|
0002d0  e5c10000          STRB     r0,[r1,#0]
;;;118    
;;;119       while( (U0LSR&0x40)==0 );	    // 等待数据发送完毕
0002d4  e1a00000          MOV      r0,r0
                  |L1.728|
0002d8  e59f1304          LDR      r1,|L1.1508|
0002dc  e5d11014          LDRB     r1,[r1,#0x14]
0002e0  e3110040          TST      r1,#0x40
0002e4  0afffffb          BEQ      |L1.728|
;;;120    }
0002e8  e12fff1e          BX       lr
;;;121    /****************************************************************************
                          ENDP

                  IRQ_UART1 PROC
;;;128    void   __irq IRQ_UART1(void)
;;;129    { 
0002ec  e92d0007          PUSH     {r0-r2}
;;;130       uint8  i;
;;;131        if    ( (IO1SET&RY4) == 0 ) IO1SET |= RY4;	// 控制LED4点亮
0002f0  e59f1318          LDR      r1,|L1.1552|
0002f4  e5911014          LDR      r1,[r1,#0x14]
0002f8  e3110602          TST      r1,#0x200000
0002fc  1a000005          BNE      |L1.792|
000300  e59f1308          LDR      r1,|L1.1552|
000304  e5911014          LDR      r1,[r1,#0x14]
000308  e3811602          ORR      r1,r1,#0x200000
00030c  e59f22fc          LDR      r2,|L1.1552|
000310  e5821014          STR      r1,[r2,#0x14]
000314  ea000004          B        |L1.812|
                  |L1.792|
;;;132          else  IO1CLR |= RY4;    		 	// 控制LED4熄灭
000318  e59f12f0          LDR      r1,|L1.1552|
00031c  e591101c          LDR      r1,[r1,#0x1c]
000320  e3811602          ORR      r1,r1,#0x200000
000324  e59f22e4          LDR      r2,|L1.1552|
000328  e582101c          STR      r1,[r2,#0x1c]
                  |L1.812|
;;;133      
;;;134       if( 0x04==(U1IIR&0x0F))
00032c  e59f12e0          LDR      r1,|L1.1556|
000330  e5d11008          LDRB     r1,[r1,#8]
000334  e201100f          AND      r1,r1,#0xf
000338  e3510004          CMP      r1,#4
00033c  1a00002c          BNE      |L1.1012|
;;;135        {   
;;;136          
;;;137           switch(uart1_rec_flag)
000340  e59f12d0          LDR      r1,|L1.1560|
000344  e5d11000          LDRB     r1,[r1,#0]  ; uart1_rec_flag
000348  e3510000          CMP      r1,#0
00034c  0a000002          BEQ      |L1.860|
000350  e3510001          CMP      r1,#1
000354  1a000023          BNE      |L1.1000|
000358  ea000010          B        |L1.928|
                  |L1.860|
;;;138    		{
;;;139    		case 0:															
00035c  e1a00000          MOV      r0,r0
;;;140    		 for(i=0; i<8; i++)
000360  e3a00000          MOV      r0,#0
000364  ea000005          B        |L1.896|
                  |L1.872|
;;;141                { 
;;;142                rcv_buf1[i] = U1RBR;                 
000368  e59f12a4          LDR      r1,|L1.1556|
00036c  e5d11000          LDRB     r1,[r1,#0]
000370  e59f22a4          LDR      r2,|L1.1564|
000374  e7c21000          STRB     r1,[r2,r0]
000378  e2801001          ADD      r1,r0,#1              ;140
00037c  e20100ff          AND      r0,r1,#0xff           ;140
                  |L1.896|
000380  e3500008          CMP      r0,#8                 ;140
000384  bafffff7          BLT      |L1.872|
;;;143                }	
;;;144    		uart1_rec_flag++;													
000388  e59f1288          LDR      r1,|L1.1560|
00038c  e5d11000          LDRB     r1,[r1,#0]  ; uart1_rec_flag
000390  e2811001          ADD      r1,r1,#1
000394  e59f227c          LDR      r2,|L1.1560|
000398  e5c21000          STRB     r1,[r2,#0]  ; uart1_rec_flag
;;;145    		break;
00039c  ea000013          B        |L1.1008|
                  |L1.928|
;;;146    		case 1:
0003a0  e1a00000          MOV      r0,r0
;;;147    		   for(i=8; i<16; i++)
0003a4  e3a00008          MOV      r0,#8
0003a8  ea000005          B        |L1.964|
                  |L1.940|
;;;148                { 
;;;149                rcv_buf1[i] = U1RBR;                 
0003ac  e59f1260          LDR      r1,|L1.1556|
0003b0  e5d11000          LDRB     r1,[r1,#0]
0003b4  e59f2260          LDR      r2,|L1.1564|
0003b8  e7c21000          STRB     r1,[r2,r0]
0003bc  e2801001          ADD      r1,r0,#1              ;147
0003c0  e20100ff          AND      r0,r1,#0xff           ;147
                  |L1.964|
0003c4  e3500010          CMP      r0,#0x10              ;147
0003c8  bafffff7          BLT      |L1.940|
;;;150                }	
;;;151    			
;;;152    		uart1_rec_flag	=	0;											//接收结束
0003cc  e3a01000          MOV      r1,#0
0003d0  e59f2240          LDR      r2,|L1.1560|
0003d4  e5c21000          STRB     r1,[r2,#0]  ; uart1_rec_flag
;;;153    		rcv_new1 = 1;    // 设置接收到新的数据标志,表明RX数据可用。										//设置接收到新的数据标志
0003d8  e3a01001          MOV      r1,#1
0003dc  e59f223c          LDR      r2,|L1.1568|
0003e0  e5c21000          STRB     r1,[r2,#0]  ; rcv_new1
;;;154    	
;;;155    		break;
0003e4  ea000001          B        |L1.1008|
                  |L1.1000|
;;;156    		default:
0003e8  e1a00000          MOV      r0,r0
;;;157    		break;		
0003ec  e1a00000          MOV      r0,r0
                  |L1.1008|
0003f0  e1a00000          MOV      r0,r0                 ;145
                  |L1.1012|
;;;158    		}
;;;159         }  
;;;160          VICVectAddr = 0x00;              	    // 中断处理结束
0003f4  e3a01000          MOV      r1,#0
0003f8  e5011fd0          STR      r1,[r1,#-0xfd0]
;;;161      
;;;162    }     
0003fc  e8bd0007          POP      {r0-r2}
000400  e25ef004          SUBS     pc,lr,#4
;;;163    
                          ENDP

                  UART1_Ini PROC
;;;170    void  UART1_Ini(uint32 bps)
;;;171    {  uint16 Fdiv;
000404  e92d4070          PUSH     {r4-r6,lr}
000408  e1a04000          MOV      r4,r0
;;;172       U1LCR = 0x83;		                  // DLAB = 1,可设置波特率
00040c  e3a00083          MOV      r0,#0x83
000410  e59f11fc          LDR      r1,|L1.1556|
000414  e5c1000c          STRB     r0,[r1,#0xc]
;;;173       Fdiv = (Fpclk / 16) / bps;        // 设置波特率
000418  e1a01004          MOV      r1,r4
00041c  e59f01e8          LDR      r0,|L1.1548|
000420  ebfffffe          BL       __aeabi_uidivmod
000424  e1a05800          LSL      r5,r0,#16
000428  e1a05825          LSR      r5,r5,#16
;;;174       U1DLM = Fdiv / 256;							
00042c  e1a00005          MOV      r0,r5
000430  e1a01fc5          ASR      r1,r5,#31
000434  e0851c21          ADD      r1,r5,r1,LSR #24
000438  e1a01801          LSL      r1,r1,#16
00043c  e1a01c21          LSR      r1,r1,#24
000440  e59f21cc          LDR      r2,|L1.1556|
000444  e5c21004          STRB     r1,[r2,#4]
;;;175       U1DLL = Fdiv % 256;						
000448  e1a00005          MOV      r0,r5
00044c  e1a01fc5          ASR      r1,r5,#31
000450  e0851c21          ADD      r1,r5,r1,LSR #24
000454  e1a01441          ASR      r1,r1,#8
000458  e0451401          SUB      r1,r5,r1,LSL #8
00045c  e5c21000          STRB     r1,[r2,#0]
;;;176       U1LCR = 0x03;
000460  e3a00003          MOV      r0,#3
000464  e1c21000          BIC      r1,r2,r0
000468  e5c1000c          STRB     r0,[r1,#0xc]
;;;177       
;;;178       U1FCR = 0x81;                         // 设置FIFO控制寄存器,使能FIFO,并设置触发点为8字节。
00046c  e3a00081          MOV      r0,#0x81
000470  e5c10008          STRB     r0,[r1,#8]
;;;179       U1IER = 0x01;                         // 设置中断使能寄存器,允许RBR中断,即接收中断
000474  e3a00001          MOV      r0,#1
000478  e5c10004          STRB     r0,[r1,#4]
;;;180       //IO0SET=M485_EN;
;;;181      
;;;182      
;;;183       VICIntSelect = 0x00000000;            // 设置所有通道为IRQ中断
00047c  e3a00000          MOV      r0,#0
000480  e5000ff4          STR      r0,[r0,#-0xff4]
;;;184       VICVectCntl0 = 0x27;                  // UART0中断通道分配到IRQ slot 10,即优先级10
000484  e3a00027          MOV      r0,#0x27
000488  e3a01000          MOV      r1,#0
00048c  e5010e00          STR      r0,[r1,#-0xe00]
;;;185       VICVectAddr0 = (int)IRQ_UART1;        // 设置UART0向量地址为10
000490  e24f0f6b          ADR      r0,IRQ_UART1
000494  e5010f00          STR      r0,[r1,#-0xf00]
;;;186       VICIntEnable = 0x00000080;            // 使能UART0中断
000498  e3a00080          MOV      r0,#0x80
00049c  e5010ff0          STR      r0,[r1,#-0xff0]
;;;187    }					
0004a0  e8bd4070          POP      {r4-r6,lr}
0004a4  e12fff1e          BX       lr
;;;188    /****************************************************************************

⌨️ 快捷键说明

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