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

📄 com.c

📁 嵌入式开发的实例
💻 C
字号:
/**************************************************************************************************
 *                                                                          
 * Copyright (c) 2001 - 2003 IST Electronics Corp. All rights reserved.      
 *                                                                         
 * FILENAME
 *     uart.c
 *
 * VERSION
 *     1.0
 *
 * DESCRIPTION
 *     This file contains the uart initial routine and Tx/Rx functions.
 *
 * DATA STRUCTURES
 *     None
 *
 * FUNCTIONS
 *     1. Fun_UART_SetBaudRate()
 *     2. Fun_UART_Initialize()
 *     3. Fun_UART_getchar()
 *     4. Fun_UART_putchar()
 *
 * HISTORY
 *     11/24/2003		 Ver 1.0 Created by Jim Lin
 * REMARK
 *     None
 *     
 *************************************************************************************************/
#include "740defs.h"


#define C_Com
#include "ist.h"
//uint8 Prog_status;

bool Fun_pccom(void)
{  
  uint8 temp1;  

  pcdata.head = Fun_UART_getchar(); 	//get head char
  RevData[0] = pcdata.head;

  temp1 = Fun_UART_getdata(RevData);	//get other ascii and end char  
  if(temp1 == 0) return False;			//receive fail
  
  pcdata.command = RevData[1];
  pcdata.size = (RevData[2]<<16) + RevData[3];
  pcdata.error = RevData[temp1 - 2];
  pcdata.parity = RevData[temp1 - 1];
  pcdata.end = RevData[temp1];
  
  if(pcdata.size != (temp1-6))
  {
    RevData[2] = 0;
    RevData[3] = 0;
    RevData[4] = ERR_SIZE;
    RevData[5] = check_sum(RevData,4);
    RevData[6] = PCCOM_END;
    
    Fun_UART_senddata(RevData,6,0);
	return False;
  }

  if(pcdata.error != 0)
  {
    RevData[2] = 0;
    RevData[3] = 0;
    RevData[4] = ERR_ERR;
    RevData[5] = check_sum(RevData,4);
    RevData[6] = PCCOM_END;
    
    Fun_UART_senddata(RevData,6,0);
	return False;
  }

  if(pcdata.parity != check_sum(RevData,(temp1-2)))
  {
    RevData[2] = 0;
    RevData[3] = 0;
    RevData[4] = ERR_PARITY;
    RevData[5] = check_sum(RevData,4);
    RevData[6] = PCCOM_END;
    
    Fun_UART_senddata(RevData,6,0);
	return False;
  }

  switch(pcdata.command)
  {
    case CMD_SEND_PROG_BEGIN:
		 Led_greenon;
         Fun_SEND_PROG_BEGIN();
      	 break;
	case CMD_SEND_PROG_NEXT:
		 Led_greenon;
         Fun_SEND_PROG_NEXT();
      	 break;
	case CMD_SEND_PROG_AGAIN:
		 Led_greenon;
         Fun_SEND_PROG_AGAIN();
      	 break;
	case CMD_SEND_PROG_END:		
		 Led_greenon;
         Fun_SEND_PROG_END();
      	 break;
	case CMD_SEND_POW_OFF:		
         while(1)
           { Power_off; }
      	 break;
    case CMD_TEST:
         Fun_pccom_test();
         break;
 	default:
	     break;
  }
  
  Led_greenoff;
  return True;
}  


void Fun_SEND_PROG_BEGIN(void)
{
  uint8 i;
  for(i=0;i<128;i++)
  {
    flash_buffer[i] = RevData[i+4];
  }
  
  Fun_flash_writepage(MA_PARAM_PAGE);
  Fun_flash_writepage(MA_PARAM_PAGE+1);
  Fun_flash_readpage(MA_PARAM_PAGE);
  
  for(i=0;i<128;i++)
  {
    if(flash_buffer[i] != RevData[i+4])
    {
	  RevData[2] = 0;
  	  RevData[3] = 0;
	  RevData[4] = ERR_WRITE_ERR;
	  RevData[5] = check_sum(RevData,4);
	  RevData[6] = PCCOM_END;
	  Fun_UART_senddata(RevData,6,0);
	  return;
    }
  }

  RevData[2] = 0;
  RevData[3] = 0;
  RevData[4] = 0;
  RevData[5] = check_sum(RevData,4);
  RevData[6] = PCCOM_END;

  Fun_UART_senddata(RevData,6,0);
   Flash_current_page = 31;
// Flash_current_page = MA_PROG_PAGE - 1;
  return;
}

void Fun_SEND_PROG_NEXT(void)
{
  uint8 i;
  
  Flash_current_page = Flash_current_page + 1;
  
  for(i=0;i<128;i++)
  {
    flash_buffer[i] = RevData[i+4];
  }
  
  Fun_flash_writepage(Flash_current_page);
  Fun_flash_readpage(Flash_current_page);
  
  for(i=0;i<128;i++)
  {
    if(flash_buffer[i] != RevData[i+4])
    {
	  RevData[2] = 0;
  	  RevData[3] = 0;
	  RevData[4] = ERR_WRITE_ERR;
	  RevData[5] = check_sum(RevData,4);
	  RevData[6] = PCCOM_END;
	  Fun_UART_senddata(RevData,6,0);
	  return;
    }
  }

  RevData[2] = 0;
  RevData[3] = 0;
  RevData[4] = 0;
  RevData[5] = check_sum(RevData,4);
  RevData[6] = PCCOM_END;

  Fun_UART_senddata(RevData,6,0);
}

void Fun_SEND_PROG_AGAIN(void)
{
  uint8 i;
  for(i=0;i<128;i++)
  {
    flash_buffer[i] = RevData[i+4];
  }
  
  Fun_flash_writepage(Flash_current_page);
  Fun_flash_readpage(Flash_current_page);
  
  for(i=0;i<128;i++)
  {
    if(flash_buffer[i] != RevData[i+4])
    {
	  RevData[2] = 0;
  	  RevData[3] = 0;
	  RevData[4] = ERR_WRITE_ERR;
	  RevData[5] = check_sum(RevData,4);
	  RevData[6] = PCCOM_END;
	  Fun_UART_senddata(RevData,6,0);
	  return;
    }
  }
  
  RevData[2] = 0;
  RevData[3] = 0;
  RevData[4] = 0;
  RevData[5] = check_sum(RevData,4);
  RevData[6] = PCCOM_END;

  Fun_UART_senddata(RevData,6,0);
}

void Fun_SEND_PROG_END(void)
{
  uint8 i;
  Flash_current_page = Flash_current_page + 1;
  for(i=0;i<pcdata.size;i++)
  {
    flash_buffer[i] = RevData[i+4];
  }
  
  for(i=pcdata.size;i<128;i++)
  {
    flash_buffer[i] = 0xff;
  }
  
  Fun_flash_writepage(Flash_current_page);
  Fun_flash_readpage(Flash_current_page);
  
  for(i=0;i<128;i++)
  {
    if(flash_buffer[i] != RevData[i+4])
    {
	  RevData[2] = 0;
  	  RevData[3] = 0;
	  RevData[4] = ERR_WRITE_ERR;
	  RevData[5] = check_sum(RevData,4);
	  RevData[6] = PCCOM_END;
	  Fun_UART_senddata(RevData,6,0);
	  return;
    }
  }
  
  RevData[2] = 0;
  RevData[3] = 0;
  RevData[4] = 0;
  RevData[5] = check_sum(RevData,4);
  RevData[6] = PCCOM_END;

  Fun_UART_senddata(RevData,6,0);
  Fun_buzzer1();
}

/************************************************/
/*	Name: 	Fun_pc_com							*/
/*	In:		None								*/
/*	Out:	None								*/
/*	Description: 								*/
/*			communication with pc				*/
/************************************************/
void Fun_pccom_test(void)
{
   Fun_UART_senddata(RevData,6,0);
}

uint8 check_sum(uint8 *pData,uint16 Num)		//
{
  uint8 sum=0;
  uint16 i;
  for(i=1;i<=Num;i++)
  {
    sum = sum + pData[i];
  }

  return sum;
}

⌨️ 快捷键说明

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