?? ymodem.s79
字號:
//////////////////////////////////////////////////////////////////////////////
// /
// 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 + -