?? com.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;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -