📄 main_xmodem.c
字号:
//*----------------------------------------------------------------------------
//* ATMEL Microcontroller Software Support - ROUSSET -
//*----------------------------------------------------------------------------
//* The software is delivered "AS IS" without warranty or condition of any
//* kind, either express, implied or statutory. This includes without
//* limitation any warranty or condition with respect to merchantability or
//* fitness for any particular purpose, or against the infringements of
//* intellectual property rights of others.
//*----------------------------------------------------------------------------
//* File Name : main_xmodem.c
//* Object : Test the Flash and Ram presence
//* This project can be run on all EBxx Targes
//*
//* 1.0 20/11/00 JPP : Creation
//*----------------------------------------------------------------------------
//* --------------------------- include file ----------------------------------
#include <stdio.h>
#include <string.h>
//* Use this descriptor for the specific 55800 peripheral
#include "parts/m55800/lib_m55800.h"
/* Driver description */
#include "drivers/com/com.h" //* Communication driver
/* Driver description */
#include "xmodem.h" //* Communication driver
#include "get_usart.h" //* Communication driver
//* --------------------------- Constant definition ---------------------------
#define BAUD_RATE 38400
//* ------------------------------ extern function --------------------------
extern void monitor_menu(void);
//* ------------------------------ extern global data -----------------------
//* ------------------------------ Local variable ----------------------------
static const char main_menu[]=
{
"\n\r COMMAND MENU: Base\n\r"
" 0) Info\n\r"
" 1) Get global value\n\r"
" 2) receive file (Xmodem)\n\r"
" 3) transmit file (Xmodem)\n\r"
" 4) Set MEC EBI \n\r"
" 8) Usart Monitor\n\r"
" 9) Memory Monitor\n\r"
"Enter command to execute: "
};
static const u_int mec_ebi[]=
{
0x03002529, //* csr 2 Flash AT49BV1604 2 M byte
0x04002429, //* csr 3 Flash AT49BV8011 1 M byte
0x05002021, //* csr 4 RAM 1 M byte
0x05102021 //* csr 4 RAM 1 M byte
};
int data_abort;
ComDesc COM;
ComDesc *Xmodem_COM;
unsigned char *pt_data;
int len;
int mcki;
int read_get_val;
//*----------------------------------------------------------------------------
//* Function Name : ram_write
//* Object : write a Xmodem frame in RAM
//* Input Parameters : <val> value to update
//* Output Parameters : None
//*----------------------------------------------------------------------------
int ram_write(u_char *data , int size)
{
u_int count;
for ( count=0 ; count < size ; count++)
{
*pt_data++= * data++;
}
return TRUE;
}
//*----------------------------------------------------------------------------
//* Function Name : get_val
//* Object : get a integer or no update the value
//* Input Parameters : <val> value to update
//* Output Parameters : value updated
//*----------------------------------------------------------------------------
int get_val( int val ,char * type )
{
char buff[20];
//* echo
read_get_val = sprintf(&buff[0],type,val);
sprintf(&buff[read_get_val],"\n\r");
at91_print(&COM,buff);
//* scan new value
read_get_val = 0xFF;
at91_scanf(&COM,type,&read_get_val);
//* update if change
if ( read_get_val != 0xFF ) val = read_get_val;
at91_print_crlf(&COM);
return val;
}
//*----------------------------------------------------------------------------
//* Function Name : Get_Command
//* Object : Get command val
//* Input Parameters : None
//* Output Parameters : int : Command num
//*----------------------------------------------------------------------------
int Get_Command(const char * menu)
{
int command;
at91_print(&COM,(char *)menu);
at91_scanf(&COM,"%d", &command);
at91_print_crlf(&COM);
return command;
}
//*----------------------------------------------------------------------------
//* Function Name : menu
//* Object : check general menu
//* Input Parameters : None
//* Output Parameters : None
//*----------------------------------------------------------------------------
void menu(void)
{
int command = 0;
int count;
char message[512];
//init global data
pt_data = (u_char *)0x02000000;
len = 0x48000;
for(;;)
{
command = Get_Command(main_menu);
switch(command)
{
case 1:
at91_print(&COM,"Start work address:");
pt_data = (u_char *) get_val((int )pt_data,"%08X");
at91_print(&COM,"len:");
len = get_val(len,"%08X");
case 0:
sprintf(message,"Start work address 0x%08X len 0x%08X (%d) %d Kb\n\r",(int )pt_data,len,len,len/1024);
at91_print(&COM,message);
break;
case 2:
at91_print(&COM,"Xmodem wait frame (Send Syncrh 'C')\n\r");
xmodem_receive( &ram_write);
at91_print(&COM,"Reception ended \n\r");
break;
case 3:
at91_print(&COM,"Xmodem Wait Syncrh 'C'(and send frame)\n\r");
xmodem_transmit(pt_data,len);
at91_print(&COM,"Transmission ended \n\r");
break;
case 4:
for (count=0; count < 4 ;count++)
{
EBI_BASE->EBI_CSR[count+2]=mec_ebi[count];
sprintf(message,"EBI CSR: %d value %08X\n\r",count+2,mec_ebi[count]);
at91_print(&COM,message);
}
break;
case 9://* dump memory
monitor_menu();
break;
default: /* invalid command */
at91_print(&COM,"Invalid command entered. Please enter again!\n\r");
}
}
}
//*----------------------------------------------------------------------------
//* Function Name : main
//* Object : Main function of Polling USART 0
//* Input Parameters : none
//* Output Parameters : True
//*----------------------------------------------------------------------------
int main( void )
//* Begin
{
u_short cd_baud;
//* open COM get usart for AT91 parts
COM.usart= get_usart0_desc ( &mcki );
cd_baud = at91_baud_com(mcki, BAUD_RATE);
//* Set the Xmodem transaction on USART 0 COM
Xmodem_COM = &COM;
at91_open_com(&COM,(COM_8_BIT|COM_PAR_NONE|COM_NBSTOP_1|COM_FLOW_CONTROL_NONE),cd_baud);
menu();
return(TRUE);
//* End
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -