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

📄 ymodem.s79

📁 IAPBootLoader源程序是单片机ARM的在系统编程方法1
💻 S79
📖 第 1 页 / 共 3 页
字号:
//////////////////////////////////////////////////////////////////////////////
//                                                                           /
// IAR ARM ANSI C/C++ Compiler V4.40A/W32              17/Jan/2007  16:16:23 /
// 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\ymode /
//                       m.c                                                 /
//    Command line    =  "D:\lilian\STR71X\application note\IAP using        /
//                       UART\an2078_IAR(forum)\an2078\IAP_V2.0\common\ymode /
//                       m.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" -I                       /
//                       "D:\lilian\STR71X\application note\IAP using        /
//                       UART\an2078_IAR(forum)\an2078\IAP_V2.0\user\..\incl /
//                       ude\" -I "D:\lilian\STR71X\application note\IAP     /
//                       using UART\an2078_IAR(forum)\an2078\IAP_V2.0\user\. /
//                       .\common\" -I ROJ_DIR$\ -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\ymodem.s79                                      /
//                                                                           /
//                                                                           /
//////////////////////////////////////////////////////////////////////////////

        NAME ymodem

        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)

        PUBWEAK `?*?DATA_ID`
        MULTWEAK ??FLASH_SectorErase??rA
        MULTWEAK ??FLASH_SectorMask??rA
        MULTWEAK ??FLASH_WordWrite??rA
        MULTWEAK ??SerialKeyPressed??rA
        MULTWEAK ??SerialPutChar??rA
        MULTWEAK ??Str2Int??rA
        MULTWEAK ??memcpy??rA
        PUBWEAK ?init?tab?DATA_I
        PUBWEAK ?init?tab?DATA_Z
        PUBLIC Flash_Destination
        PUBLIC Ram_Source
        FUNCTION Receive_Byte,0203H
        LOCFRAME CSTACK, 12, STACK
        FUNCTION Receive_Packet,0203H
        LOCFRAME CSTACK, 28, STACK
        FUNCTION Send_Byte,0203H
        LOCFRAME CSTACK, 8, STACK
        PUBLIC Ymodem_Receive
        FUNCTION Ymodem_Receive,0203H
        LOCFRAME CSTACK, 1104, STACK
        PUBLIC file_name
        
        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
        
FLASH_SectorErase   SYMBOL "FLASH_SectorErase"
FLASH_SectorMask    SYMBOL "FLASH_SectorMask"
FLASH_WordWrite     SYMBOL "FLASH_WordWrite"
SerialKeyPressed    SYMBOL "SerialKeyPressed"
SerialPutChar       SYMBOL "SerialPutChar"
Str2Int             SYMBOL "Str2Int"
memcpy              SYMBOL "memcpy"
??FLASH_SectorErase??rA SYMBOL "??rA", FLASH_SectorErase
??FLASH_SectorMask??rA SYMBOL "??rA", FLASH_SectorMask
??FLASH_WordWrite??rA SYMBOL "??rA", FLASH_WordWrite
??SerialKeyPressed??rA SYMBOL "??rA", SerialKeyPressed
??SerialPutChar??rA SYMBOL "??rA", SerialPutChar
??Str2Int??rA       SYMBOL "??rA", Str2Int
??memcpy??rA        SYMBOL "??rA", memcpy

        EXTERN FLASH_SectorErase
        FUNCTION FLASH_SectorErase,0202H
        EXTERN FLASH_SectorMask
        FUNCTION FLASH_SectorMask,0202H
        EXTERN FLASH_WordWrite
        FUNCTION FLASH_WordWrite,0202H
        EXTERN SerialKeyPressed
        FUNCTION SerialKeyPressed,0202H
        EXTERN SerialPutChar
        FUNCTION SerialPutChar,0202H
        EXTERN Str2Int
        FUNCTION Str2Int,0202H
        EXTERN memcpy
        FUNCTION memcpy,010202H

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

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
//   23 char file_name[FILE_NAME_LENGTH];
file_name:
        DS8 256

        RSEG DATA_I:DATA:SORT:NOROOT(2)
//   24 u32 Flash_Destination = Flash_Offset;                     
Flash_Destination:
        DS8 4
        REQUIRE `?<Initializer for Flash_Destination>`

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
//   25 u32 Ram_Source;
Ram_Source:
        DS8 4
//   26 
//   27 /*******************************************************************************
//   28 * Function Name  : Receive_Byte
//   29 * Description    : Receive byte from sender
//   30 * Input 1        : Character
//   31 * Input 2        : Timeout
//   32 * Return         :  0   --      Byte received                           
//   33 *                : -1   --      Timeout   
//   34 *******************************************************************************/

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock0 Using cfiCommon0
        CFI Function Receive_Byte
        ARM
//   35 static s32 Receive_Byte (char *c, u32 timeout)
//   36 {
Receive_Byte:
        PUSH     {R4,R5,LR}
        CFI ?RET Frame(CFA, -4)
        CFI R5 Frame(CFA, -8)
        CFI R4 Frame(CFA, -12)
        CFI CFA R13+12
        MOVS     R4,R0
        MOVS     R5,R1
//   37   while (timeout-- > 0)
??Receive_Byte_0:
        MOVS     R0,R5
        SUBS     R5,R0,#+1
        CMP      R0,#+0
        BEQ      ??Receive_Byte_1
//   38   {
//   39     if (SerialKeyPressed(c) == 1)
        MOVS     R0,R4
        _BLF     SerialKeyPressed,??SerialKeyPressed??rA
        CMP      R0,#+1
        BNE      ??Receive_Byte_0
//   40     {
//   41       return 0;
        MOV      R0,#+0
        B        ??Receive_Byte_2
//   42     }
//   43   }
//   44   return -1;
??Receive_Byte_1:
        MVN      R0,#+0
??Receive_Byte_2:
        POP      {R4,R5,PC}       ;; return
        CFI EndBlock cfiBlock0
//   45 }
//   46 
//   47 /*******************************************************************************
//   48 * Function Name  : Send_Byte
//   49 * Description    : Send a byte 
//   50 * Input          : Character
//   51 * Return         :  0   --      Byte sent                           
//   52 *******************************************************************************/

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock1 Using cfiCommon0
        CFI Function Send_Byte
        ARM
//   53 static u32 Send_Byte (char c)
//   54 {
Send_Byte:
        PUSH     {R4,LR}
        CFI ?RET Frame(CFA, -4)
        CFI R4 Frame(CFA, -8)
        CFI CFA R13+8
        MOVS     R4,R0
//   55   SerialPutChar(c);
        MOVS     R0,R4
        _BLF     SerialPutChar,??SerialPutChar??rA
//   56   return 0;
        MOV      R0,#+0
        POP      {R4,PC}          ;; return
        CFI EndBlock cfiBlock1
//   57 }
//   58 
//   59 /*******************************************************************************
//   60 * Function Name  : Receive_Packet
//   61 * Description    : Receive a packet from sender 
//   62 * Input 1        : Data
//   63 * Input 2        : Length
//   64 * Input 3        : Timeout
//   65 * Return         :   0  --      normally return                         
//   66 *                :  -1  --      timeout or packet error                 
//   67 *                :   1  --      abort by user                           
//   68 *                : *length:                                                
//   69 *                :   0  --      end of transmission                    
//   70 *                :  -1  --      abort by sender                         
//   71 *                :  >0  --      packet length                                      
//   72 *******************************************************************************/

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock2 Using cfiCommon0
        CFI Function Receive_Packet
        ARM
//   73 static s32 Receive_Packet (char *data, s32 *length, u32 timeout)
//   74 {
Receive_Packet:
        PUSH     {R4-R8,LR}
        CFI ?RET Frame(CFA, -4)
        CFI R8 Frame(CFA, -8)
        CFI R7 Frame(CFA, -12)
        CFI R6 Frame(CFA, -16)
        CFI R5 Frame(CFA, -20)
        CFI R4 Frame(CFA, -24)
        CFI CFA R13+24
        SUB      SP,SP,#+4
        CFI CFA R13+28
        MOVS     R4,R0
        MOVS     R5,R1
        MOVS     R6,R2
//   75   int i, packet_size;
//   76   char c;
//   77   *length = 0;
        MOV      R0,#+0
        STR      R0,[R5, #+0]
//   78   if (Receive_Byte(&c, timeout) != 0)
        MOVS     R1,R6
        MOVS     R0,SP
        BL       Receive_Byte
        CMP      R0,#+0
        BEQ      ??Receive_Packet_0
//   79   {
//   80     return -1;
        MVN      R0,#+0
        B        ??Receive_Packet_1
//   81   }
//   82   switch (c)
??Receive_Packet_0:
        LDRB     R0,[SP, #+0]
        CMP      R0,#+1
        BEQ      ??Receive_Packet_2
        CMP      R0,#+2
        BEQ      ??Receive_Packet_3
        CMP      R0,#+4
        BEQ      ??Receive_Packet_4
        CMP      R0,#+24

⌨️ 快捷键说明

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