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

📄 uart.s

📁 Cortex-M4+example
💻 S
📖 第 1 页 / 共 2 页
字号:
        DATA
??DataTable0_3:
        DC32     0x4006b000

        SECTION `.text`:CODE:NOROOT(2)
        SECTION_TYPE SHT_PROGBITS, 0
        DATA
??DataTable0_4:
        DC32     0x4004b010

        SECTION `.text`:CODE:NOROOT(2)
        SECTION_TYPE SHT_PROGBITS, 0
        DATA
??DataTable0_5:
        DC32     0x4004b00c

        SECTION `.text`:CODE:NOROOT(2)
        SECTION_TYPE SHT_PROGBITS, 0
        DATA
??DataTable0_6:
        DC32     0x4006c000

        SECTION `.text`:CODE:NOROOT(2)
        SECTION_TYPE SHT_PROGBITS, 0
        DATA
??DataTable0_7:
        DC32     0x4004c00c

        SECTION `.text`:CODE:NOROOT(2)
        SECTION_TYPE SHT_PROGBITS, 0
        DATA
??DataTable0_8:
        DC32     0x4004c008

        SECTION `.text`:CODE:NOROOT(2)
        SECTION_TYPE SHT_PROGBITS, 0
        DATA
??DataTable0_9:
        DC32     0x4006d000

        SECTION `.text`:CODE:NOROOT(2)
        SECTION_TYPE SHT_PROGBITS, 0
        DATA
??DataTable0_10:
        DC32     0x4004b044

        SECTION `.text`:CODE:NOROOT(2)
        SECTION_TYPE SHT_PROGBITS, 0
        DATA
??DataTable0_11:
        DC32     0x4004b040

        SECTION `.text`:CODE:NOROOT(2)
        SECTION_TYPE SHT_PROGBITS, 0
        DATA
??DataTable0_12:
        DC32     0x400ea000

        SECTION `.text`:CODE:NOROOT(2)
        SECTION_TYPE SHT_PROGBITS, 0
        DATA
??DataTable0_13:
        DC32     0x4004d060

        SECTION `.text`:CODE:NOROOT(2)
        SECTION_TYPE SHT_PROGBITS, 0
        DATA
??DataTable0_14:
        DC32     0x4004d064

        SECTION `.text`:CODE:NOROOT(2)
        SECTION_TYPE SHT_PROGBITS, 0
        DATA
??DataTable0_15:
        DC32     0x400eb000

        SECTION `.text`:CODE:NOROOT(2)
        SECTION_TYPE SHT_PROGBITS, 0
        DATA
??DataTable0_16:
        DC32     0x4004d020

        SECTION `.text`:CODE:NOROOT(2)
        SECTION_TYPE SHT_PROGBITS, 0
        DATA
??DataTable0_17:
        DC32     0x4004d024

        SECTION `.text`:CODE:NOROOT(2)
        SECTION_TYPE SHT_PROGBITS, 0
        DATA
??DataTable0_18:
        DC32     0x40048034

        SECTION `.text`:CODE:NOROOT(2)
        SECTION_TYPE SHT_PROGBITS, 0
        DATA
??DataTable0_19:
        DC32     0x40048028
//  104 
//  105 //-------------------------------------------------------------------------*
//  106 //函数名: uart_re1                                                         *
//  107 //功  能: 串行接受1个字节                                                  *
//  108 //参  数: uartch: 串口号                                                   *
//  109 //         ch:    接收到的字节                                             *
//  110 //返  回: 成功:1;失败:0                                                    *
//  111 //说  明:                                                                  *
//  112 //-------------------------------------------------------------------------*

        SECTION `.text`:CODE:NOROOT(1)
        THUMB
//  113 uint8 uart_re1 (UART_MemMapPtr uartch,uint8 *ch)
//  114 {
//  115     uint32 k;
//  116     
//  117     for (k = 0; k < 0xfbbb; k++)//有时间限制
uart_re1:
        MOVS     R2,#+0
        B.N      ??uart_re1_0
??uart_re1_1:
        ADDS     R2,R2,#+1
??uart_re1_0:
        MOVW     R3,#+64443
        CMP      R2,R3
        BCS.N    ??uart_re1_2
//  118 		if((UART_S1_REG(uartch) & UART_S1_RDRF_MASK)!= 0)//判断接收缓冲区是否满
        LDRB     R3,[R0, #+4]
        LSLS     R3,R3,#+26
        BPL.N    ??uart_re1_1
//  119 		{
//  120 			*ch = UART_D_REG(uartch);
        LDRB     R0,[R0, #+7]
        STRB     R0,[R1, #+0]
//  121 			return 1; 			//接受成功
        MOVS     R0,#+1
        B.N      ??uart_re1_3
//  122 		} 
//  123 	if(k>=0xfbbb) 
??uart_re1_2:
        MOVW     R0,#+64443
        CMP      R2,R0
        BCC.N    ??uart_re1_4
//  124 	{
//  125 		return 0;			//接受失败
        MOVS     R0,#+0
        B.N      ??uart_re1_3
//  126 	} 
//  127     return 0;
??uart_re1_4:
        MOVS     R0,#+0
??uart_re1_3:
        BX       LR               ;; return
//  128 }
//  129 
//  130 //-------------------------------------------------------------------------*
//  131 //函数名: uart_send1                                                       *
//  132 //功  能: 串行发送1个字节                                                  *
//  133 //参  数: uartch: 串口号                                                   *
//  134 //         ch:    要发送的字节                                             *
//  135 //返  回: 无                                                               *
//  136 //说  明:                                                                  *
//  137 //-------------------------------------------------------------------------*

        SECTION `.text`:CODE:NOROOT(1)
        THUMB
//  138 void uart_send1 (UART_MemMapPtr uartch, uint8 ch)
//  139 {
//  140     //等待发送缓冲区空
//  141     while(!(UART_S1_REG(uartch) & UART_S1_TDRE_MASK));
uart_send1:
??uart_send1_0:
        LDRB     R2,[R0, #+4]
        LSLS     R2,R2,#+24
        BPL.N    ??uart_send1_0
//  142     //发送数据
//  143     UART_D_REG(uartch) = (uint8)ch;
        STRB     R1,[R0, #+7]
//  144  }
        BX       LR               ;; return
//  145 
//  146 //-------------------------------------------------------------------------*
//  147 //函数名: uart_reN                                                         *
//  148 //功  能: 串行 接收n个字节                                                 *
//  149 //参  数: uartch: 串口号                                                   *
//  150 //        buff: 接收缓冲区                                                 *
//  151 //		  len:接收长度                                             *
//  152 //返  回: 1:成功;0:失败                                                    *
//  153 //说  明:                                                                  *
//  154 //-------------------------------------------------------------------------*

        SECTION `.text`:CODE:NOROOT(1)
        THUMB
//  155 uint8 uart_reN (UART_MemMapPtr uartch ,uint8* buff,uint16 len)
//  156 {
uart_reN:
        PUSH     {R3-R7,LR}
        MOVS     R4,R0
        MOVS     R5,R1
        MOVS     R6,R2
//  157     uint16 m=0; 
        MOVS     R7,#+0
        B.N      ??uart_reN_0
//  158     while (m < len)
//  159     { 	          
//  160   	    if(0==uart_re1(uartch,&buff[m]))
//  161   	    	return 0;  //接收失败
//  162   	    else m++;
??uart_reN_1:
        ADDS     R7,R7,#+1
??uart_reN_0:
        UXTH     R7,R7            ;; ZeroExt  R7,R7,#+16,#+16
        UXTH     R6,R6            ;; ZeroExt  R6,R6,#+16,#+16
        CMP      R7,R6
        BCS.N    ??uart_reN_2
        UXTH     R7,R7            ;; ZeroExt  R7,R7,#+16,#+16
        ADDS     R1,R7,R5
        MOVS     R0,R4
        BL       uart_re1
        CMP      R0,#+0
        BNE.N    ??uart_reN_1
        MOVS     R0,#+0
        B.N      ??uart_reN_3
//  163     } 
//  164     
//  165     return 1;          //接收成功
??uart_reN_2:
        MOVS     R0,#+1
??uart_reN_3:
        POP      {R1,R4-R7,PC}    ;; return
//  166     
//  167 }
//  168 
//  169 //-------------------------------------------------------------------------*
//  170 //函数名: uart_sendN                                                       *
//  171 //功  能: 串行 接收n个字节                                                 *
//  172 //参  数: uartch: 串口号                                                   *
//  173 //        buff: 发送缓冲区                                                 *
//  174 //		  len:发送长度                                             *
//  175 //返  回: 无                                                               *
//  176 //说  明:                                                                  *
//  177 //-------------------------------------------------------------------------*

        SECTION `.text`:CODE:NOROOT(1)
        THUMB
//  178 void uart_sendN (UART_MemMapPtr uartch ,uint8* buff,uint16 len)
//  179 {
uart_sendN:
        PUSH     {R3-R7,LR}
        MOVS     R4,R0
        MOVS     R5,R1
        MOVS     R6,R2
//  180     int i;
//  181 	for(i=0;i<len;i++)
        MOVS     R7,#+0
        B.N      ??uart_sendN_0
//  182     {
//  183 		uart_send1(uartch,buff[i]);
??uart_sendN_1:
        LDRB     R1,[R7, R5]
        MOVS     R0,R4
        BL       uart_send1
//  184     }
        ADDS     R7,R7,#+1
??uart_sendN_0:
        UXTH     R6,R6            ;; ZeroExt  R6,R6,#+16,#+16
        CMP      R7,R6
        BLT.N    ??uart_sendN_1
//  185 }
        POP      {R0,R4-R7,PC}    ;; return
//  186 
//  187 //-------------------------------------------------------------------------*
//  188 //函数名: enableuartreint                                                  *
//  189 //功  能: 开串口接收中断                                                   *
//  190 //参  数: uartch: 串口号                                                   *
//  191 //        irqno: 对应irq号                                                 *
//  192 //返  回: 无                                                               *
//  193 //说  明:                                                                  *
//  194 //-------------------------------------------------------------------------*

        SECTION `.text`:CODE:NOROOT(1)
        THUMB
//  195 void enableuartreint(UART_MemMapPtr uartch,uint8 irqno)
//  196 {
enableuartreint:
        PUSH     {R7,LR}
//  197 	UART_C2_REG(uartch)|=UART_C2_RIE_MASK;   //开放UART接收中断
        LDRB     R2,[R0, #+3]
        ORRS     R2,R2,#0x20
        STRB     R2,[R0, #+3]
//  198 	enable_irq(irqno);			 //开接收引脚的IRQ中断
        UXTB     R1,R1            ;; ZeroExt  R1,R1,#+24,#+24
        MOVS     R0,R1
        BL       enable_irq
//  199 }
        POP      {R0,PC}          ;; return
//  200 
//  201 //-------------------------------------------------------------------------*
//  202 //函数名: disableuartreint                                                 *
//  203 //功  能: 关串口接收中断                                                   *
//  204 //参  数: uartch: 串口号                                                   *
//  205 //        irqno: 对应irq号                                                 *
//  206 //返  回: 无                                                               *
//  207 //说  明:                                                                  *
//  208 //-------------------------------------------------------------------------*

        SECTION `.text`:CODE:NOROOT(1)
        THUMB
//  209 void disableuartreint(UART_MemMapPtr uartch,uint8 irqno)
//  210 {
disableuartreint:
        PUSH     {R7,LR}
//  211 	UART_C2_REG(uartch)&=~UART_C2_RIE_MASK;   //禁止UART接收中断
        LDRB     R2,[R0, #+3]
        ANDS     R2,R2,#0xDF
        STRB     R2,[R0, #+3]
//  212 	disable_irq(irqno);			  //关接收引脚的IRQ中断
        UXTB     R1,R1            ;; ZeroExt  R1,R1,#+24,#+24
        MOVS     R0,R1
        BL       disable_irq
//  213 }
        POP      {R0,PC}          ;; return

        SECTION `.iar_vfe_header`:DATA:REORDER:NOALLOC:NOROOT(2)
        SECTION_TYPE SHT_PROGBITS, 0
        DATA
        DC32 0

        SECTION __DLIB_PERTHREAD:DATA:REORDER:NOROOT(0)
        SECTION_TYPE SHT_PROGBITS, 0

        SECTION __DLIB_PERTHREAD_init:DATA:REORDER:NOROOT(0)
        SECTION_TYPE SHT_PROGBITS, 0

        END
//  214 
//  215 
//  216 
//  217 
//  218 
//  219 
//  220 
//  221 
//  222 
//  223 
//  224 
//  225 
//  226 
//  227 
//  228 
// 
// 630 bytes in section .text
// 
// 630 bytes of CODE memory
//
//Errors: none
//Warnings: none

⌨️ 快捷键说明

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