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

📄 common.s79

📁 IAPBootLoader源程序是单片机ARM的在系统编程方法1
💻 S79
📖 第 1 页 / 共 3 页
字号:
//////////////////////////////////////////////////////////////////////////////
//                                                                           /
// IAR ARM ANSI C/C++ Compiler V4.40A/W32              17/Jan/2007  16:16:25 /
// Copyright 1999-2005 IAR Systems. All rights reserved.                     /
//                                                                           /
//    Cpu mode        =  arm                                                 /
//    Endian          =  little                                              /
//    Stack alignment =  4                                                   /
//    Source file     =  D:\lilian\STR71X\application note\IAP using         /
//                       UART\an2078_IAR(forum)\an2078\IAP_V2.0\common\commo /
//                       n.c                                                 /
//    Command line    =  "D:\lilian\STR71X\application note\IAP using        /
//                       UART\an2078_IAR(forum)\an2078\IAP_V2.0\common\commo /
//                       n.c" -lC "D:\lilian\STR71X\application note\IAP     /
//                       using UART\an2078_IAR(forum)\an2078\IAP_V2.0\user\D /
//                       ebug\List\" -lA "D:\lilian\STR71X\application       /
//                       note\IAP using UART\an2078_IAR(forum)\an2078\IAP_V2 /
//                       .0\user\Debug\List\" -o "D:\lilian\STR71X\applicati /
//                       on note\IAP using UART\an2078_IAR(forum)\an2078\IAP /
//                       _V2.0\user\Debug\Obj\" -z2 --no_cse --no_unroll     /
//                       --no_inline --no_code_motion --no_tbaa              /
//                       --no_clustering --no_scheduling --debug --cpu_mode  /
//                       arm --endian little --cpu ARM7TDMI --stack_align 4  /
//                       -e --fpu None --dlib_config "C:\Program Files\IAR   /
//                       Systems\Embedded Workbench                          /
//                       4.0\arm\LIB\dl4tpannl8n.h" --segment                /
//                       code=CODE_Flash -I "D:\lilian\STR71X\application    /
//                       note\IAP using UART\an2078_IAR(forum)\an2078\IAP_V2 /
//                       .0\user\..\include\" -I "D:\lilian\STR71X\applicati /
//                       on note\IAP using UART\an2078_IAR(forum)\an2078\IAP /
//                       _V2.0\user\..\common\" -I "C:\Program Files\IAR     /
//                       Systems\Embedded Workbench 4.0\arm\INC\"            /
//    List file       =  D:\lilian\STR71X\application note\IAP using         /
//                       UART\an2078_IAR(forum)\an2078\IAP_V2.0\user\Debug\L /
//                       ist\common.s79                                      /
//                                                                           /
//                                                                           /
//////////////////////////////////////////////////////////////////////////////

        NAME common

        RTMODEL "StackAlign4", "USED"
        RTMODEL "__cpu_mode", "__pcs__arm"
        RTMODEL "__data_model", "absolute"
        RTMODEL "__dlib_file_descriptor", "0"
        RTMODEL "__endian", "little"
        RTMODEL "__rt_version", "6"

        RSEG CSTACK:DATA:NOROOT(2)

        EXTERN ??divu32_a

        MULTWEAK ??RCCU_RCLKSourceConfig??rA
        MULTWEAK ??SerialDownload??rA
        MULTWEAK ??UART_ByteSend??rA
        MULTWEAK ??UART_FifoReset??rA
        MULTWEAK ??rA??divu32_a
        PUBWEAK ?init?tab?DATA_Z
        PUBLIC FLASH_SectorMask
        FUNCTION FLASH_SectorMask,0203H
        LOCFRAME CSTACK, 4, STACK
        PUBLIC GetInputString
        FUNCTION GetInputString,0203H
        LOCFRAME CSTACK, 16, STACK
        PUBLIC GetIntegerInput
        FUNCTION GetIntegerInput,0203H
        LOCFRAME CSTACK, 24, STACK
        PUBLIC GetKey
        FUNCTION GetKey,0203H
        LOCFRAME CSTACK, 8, STACK
        PUBLIC Int2Str
        FUNCTION Int2Str,0203H
        LOCFRAME CSTACK, 20, STACK
        PUBLIC Main_Menu
        FUNCTION Main_Menu,0203H
        LOCFRAME CSTACK, 8, STACK
        PUBLIC SerialKeyPressed
        FUNCTION SerialKeyPressed,0203H
        PUBLIC SerialPutChar
        FUNCTION SerialPutChar,0203H
        LOCFRAME CSTACK, 8, STACK
        PUBLIC SerialPutString
        FUNCTION SerialPutString,0203H
        LOCFRAME CSTACK, 8, STACK
        PUBLIC Str2Int
        FUNCTION Str2Int,0203H
        LOCFRAME CSTACK, 8, STACK
        PUBLIC gimagesize
        PUBLIC jump_function
        
        CFI Names cfiNames0
        CFI StackFrame CFA R13 HUGEDATA
        CFI Resource R0:32, R1:32, R2:32, R3:32, R4:32, R5:32, R6:32, R7:32
        CFI Resource R8:32, R9:32, R10:32, R11:32, R12:32, CPSR:32, R13:32
        CFI Resource R14:32, SPSR:32
        CFI VirtualResource ?RET:32
        CFI EndNames cfiNames0
        
        CFI Common cfiCommon0 Using cfiNames0
        CFI CodeAlign 4
        CFI DataAlign 4
        CFI ReturnAddress ?RET CODE
        CFI CFA R13+0
        CFI R0 Undefined
        CFI R1 Undefined
        CFI R2 Undefined
        CFI R3 Undefined
        CFI R4 SameValue
        CFI R5 SameValue
        CFI R6 SameValue
        CFI R7 SameValue
        CFI R8 SameValue
        CFI R9 SameValue
        CFI R10 SameValue
        CFI R11 SameValue
        CFI R12 Undefined
        CFI CPSR SameValue
        CFI R14 Undefined
        CFI SPSR SameValue
        CFI ?RET R14
        CFI EndCommon cfiCommon0
        
RCCU_RCLKSourceConfig SYMBOL "RCCU_RCLKSourceConfig"
SerialDownload      SYMBOL "SerialDownload"
UART_ByteSend       SYMBOL "UART_ByteSend"
UART_FifoReset      SYMBOL "UART_FifoReset"
??RCCU_RCLKSourceConfig??rA SYMBOL "??rA", RCCU_RCLKSourceConfig
??SerialDownload??rA SYMBOL "??rA", SerialDownload
??UART_ByteSend??rA SYMBOL "??rA", UART_ByteSend
??UART_FifoReset??rA SYMBOL "??rA", UART_FifoReset

        EXTERN RCCU_RCLKSourceConfig
        FUNCTION RCCU_RCLKSourceConfig,0202H
        EXTERN SerialDownload
        FUNCTION SerialDownload,0202H
        EXTERN UART_ByteSend
        FUNCTION UART_ByteSend,0202H
        EXTERN UART_FifoReset
        FUNCTION UART_FifoReset,0202H

// D:\lilian\STR71X\application note\IAP using UART\an2078_IAR(forum)\an2078\IAP_V2.0\common\common.c
//    1 /******************** (C) COPYRIGHT 2006 STMicroelectronics ********************
//    2 * File Name          : common.c
//    3 * Author             : MCD Application Team
//    4 * Date First Issued  : 10/25/2004
//    5 * Description        : This file provides all the common functions.
//    6 ********************************************************************************
//    7 * History:
//    8 *  02/01/2006 : IAP Version 2.0
//    9 *  11/24/2004 : IAP Version 1.0
//   10 ********************************************************************************
//   11 THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS WITH
//   12 CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. AS A
//   13 RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR
//   14 CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT OF SUCH
//   15 SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION CONTAINED HEREIN
//   16 IN CONNECTION WITH THEIR PRODUCTS.
//   17 ********************************************************************************/
//   18 
//   19 #include "common.h"
//   20 

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
//   21 s32 gimagesize = 0;
gimagesize:
        DS8 4
//   22 typedef void (*pointer)(void );

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
//   23 pointer jump_function;
jump_function:
        DS8 4
//   24 /*******************************************************************************
//   25 * Function Name  : Int2Str
//   26 * Description    : Convert an Integer to a srting
//   27 * Input 1        : The string
//   28 * Input 2        : The intger to be converted
//   29 * Return         : None
//   30 *******************************************************************************/

        RSEG CODE_Flash:CODE:NOROOT(2)
        CFI Block cfiBlock0 Using cfiCommon0
        CFI Function Int2Str
        ARM
//   31 void Int2Str(char* str,s32 intnum)
//   32 {
Int2Str:
        PUSH     {R4-R7,LR}
        CFI ?RET Frame(CFA, -4)
        CFI R7 Frame(CFA, -8)
        CFI R6 Frame(CFA, -12)
        CFI R5 Frame(CFA, -16)
        CFI R4 Frame(CFA, -20)
        CFI CFA R13+20
        MOVS     R2,R0
        MOVS     R3,R1
//   33   u32 i,Div=1000000000,j=0,Status=0;
        LDR      R0,??Int2Str_0   ;; 0x3b9aca00
        MOVS     R5,R0
        MOV      R0,#+0
        MOVS     R6,R0
        MOV      R0,#+0
        MOVS     R7,R0
//   34   for(i=0;i<10;i++)
        MOV      R0,#+0
        MOVS     R4,R0
??Int2Str_1:
        CMP      R4,#+10
        BCS      ??Int2Str_2
//   35   {
//   36     str[j++]=(intnum/Div) + 48;
        MOVS     R0,R3
        MOVS     R1,R5
        _BLF     ??divu32_a,??rA??divu32_a
        ADDS     R0,R1,#+48
        STRB     R0,[R6, +R2]
        ADDS     R6,R6,#+1
//   37     intnum= intnum%Div;
        MOVS     R0,R3
        MOVS     R1,R5
        _BLF     ??divu32_a,??rA??divu32_a
        MOVS     R3,R0
//   38     Div/=10;
        MOVS     R0,R5
        MOV      R1,#+10
        _BLF     ??divu32_a,??rA??divu32_a
        MOVS     R5,R1
//   39     if ((str[j-1]=='0')&(Status==0))
        ADDS     R0,R6,R2
        LDRB     R0,[R0, #-1]
        CMP      R0,#+48
        BNE      ??Int2Str_3
        MOV      R0,#+1
        B        ??Int2Str_4
??Int2Str_3:
        MOV      R0,#+0
??Int2Str_4:
        CMP      R7,#+0
        BNE      ??Int2Str_5
        MOV      R1,#+1
        B        ??Int2Str_6
??Int2Str_5:
        MOV      R1,#+0
??Int2Str_6:
        TST      R1,R0
        BEQ      ??Int2Str_7
//   40       j=0;
        MOV      R0,#+0
        MOVS     R6,R0
        B        ??Int2Str_8
//   41     else
//   42       Status++;
??Int2Str_7:
        ADDS     R7,R7,#+1
//   43   }
??Int2Str_8:
        ADDS     R4,R4,#+1
        B        ??Int2Str_1
//   44 }
??Int2Str_2:
        POP      {R4-R7,PC}       ;; return
        DATA
??Int2Str_0:
        DC32     0x3b9aca00
        CFI EndBlock cfiBlock0
//   45 /*******************************************************************************
//   46 * Function Name  : Str2Int
//   47 * Description    : Convert a srting to an integer
//   48 * Input 1        : The string to be converted
//   49 * Input 2        : The intger value
//   50 * Return         : 1 -- Correct
//   51                  : 0 -- Error
//   52 *******************************************************************************/

        RSEG CODE_Flash:CODE:NOROOT(2)
        CFI Block cfiBlock1 Using cfiCommon0
        CFI Function Str2Int
        ARM
//   53 u32 Str2Int(char *inputstr,s32 *intnum)
//   54 {
Str2Int:
        PUSH     {R4,R5}
        CFI R5 Frame(CFA, -4)
        CFI R4 Frame(CFA, -8)
        CFI CFA R13+8
        MOVS     R2,R0
//   55 	u32 i,res;
//   56 	u32 val = 0;
        MOV      R0,#+0
        MOVS     R4,R0
//   57 
//   58 	if (inputstr[0] == '0' && (inputstr[1] == 'x'||inputstr[1] == 'X'))
        LDRB     R0,[R2, #+0]
        CMP      R0,#+48
        BNE      ??Str2Int_0
        LDRB     R0,[R2, #+1]
        CMP      R0,#+120
        BEQ      ??Str2Int_1
        LDRB     R0,[R2, #+1]
        CMP      R0,#+88
        BNE      ??Str2Int_0
//   59 	{	
//   60 		if (inputstr[2] == '\0')
??Str2Int_1:
        LDRB     R0,[R2, #+2]
        CMP      R0,#+0
        BNE      ??Str2Int_2
//   61 		{
//   62 			return 0;
        MOV      R0,#+0
        B        ??Str2Int_3
//   63 		}
//   64 		for (i=2;i<11;i++)
??Str2Int_2:
        MOV      R0,#+2
        MOVS     R3,R0
??Str2Int_4:
        CMP      R3,#+11
        BCS      ??Str2Int_5
//   65 		{
//   66 			if (inputstr[i] == '\0')
        LDRB     R0,[R3, +R2]
        CMP      R0,#+0
        BNE      ??Str2Int_6
//   67 			{
//   68 				*intnum = val;
        STR      R4,[R1, #+0]
//   69 				res = 1; /* return 1; */
        MOV      R0,#+1
        MOVS     R12,R0
//   70 				break;
        B        ??Str2Int_5
//   71 			}
//   72 			if (ISVALIDHEX(inputstr[i]))
??Str2Int_6:
        LDRB     R0,[R3, +R2]
        CMP      R0,#+65
        BCC      ??Str2Int_7
        LDRB     R0,[R3, +R2]
        CMP      R0,#+71
        BCC      ??Str2Int_8
??Str2Int_7:
        LDRB     R0,[R3, +R2]
        CMP      R0,#+97
        BCC      ??Str2Int_9
        LDRB     R0,[R3, +R2]
        CMP      R0,#+103
        BCC      ??Str2Int_8
??Str2Int_9:
        LDRB     R0,[R3, +R2]
        CMP      R0,#+48
        BCC      ??Str2Int_10
        LDRB     R0,[R3, +R2]
        CMP      R0,#+58
        BCS      ??Str2Int_10
//   73 			{
//   74 				val = (val << 4) + CONVERTHEX(inputstr[i]);
??Str2Int_8:
        LDRB     R0,[R3, +R2]
        CMP      R0,#+48
        BCC      ??Str2Int_11
        LDRB     R0,[R3, +R2]
        CMP      R0,#+58
        BCS      ??Str2Int_11
        LDRB     R0,[R3, +R2]
        SUBS     R0,R0,#+48
        B        ??Str2Int_12
??Str2Int_11:
        LDRB     R0,[R3, +R2]
        CMP      R0,#+65
        BCC      ??Str2Int_13
        LDRB     R0,[R3, +R2]
        CMP      R0,#+71
        BCS      ??Str2Int_13
        LDRB     R0,[R3, +R2]
        SUBS     R0,R0,#+55
        B        ??Str2Int_14
??Str2Int_13:
        LDRB     R0,[R3, +R2]
        SUBS     R0,R0,#+87
??Str2Int_14:
??Str2Int_12:
        ADDS     R4,R0,R4, LSL #+4
//   75 			}	
        ADDS     R3,R3,#+1
        B        ??Str2Int_4
//   76 			else
//   77 			{
//   78 				/* return 0; Invalid input */
//   79 				res = 0;
??Str2Int_10:
        MOV      R0,#+0
        MOVS     R12,R0
//   80 				break;
//   81 			}	
//   82 		}	
//   83 		
//   84 		if (i>=11) res = 0;	/* over 8 digit hex --invalid */
??Str2Int_5:
        CMP      R3,#+11
        BCC      ??Str2Int_15
        MOV      R0,#+0
        MOVS     R12,R0
        B        ??Str2Int_15
//   85 	}
//   86 	else /* max 10-digit decimal input */
//   87 	{
//   88 		for (i=0;i<11;i++)
??Str2Int_0:
        MOV      R0,#+0
        MOVS     R3,R0
??Str2Int_16:
        CMP      R3,#+11
        BCS      ??Str2Int_17

⌨️ 快捷键说明

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