void uart_init(uint8_t uartIdx, uint16_t baudrate, uint8_t tx8, uint8_t rx8) //Rcv function of Uart reset { uart[uartIdx].TxM = tx8;// 8bit data tx uart[uartIdx].RxM = rx8;// 8bit data rx SetBaud(uartIdx, baudrate); uart[uartIdx].RxEN= 1; uart[uartIdx].TxEN = 1; serial_data_init(uartIdx); uart_recv[uartIdx].inited = 1; }
int main(void) { SetClock(); ConfigPins(); SetBaud(); UARTCharPut(UART0_BASE, 'H'); UARTCharPut(UART0_BASE, 'I'); while (1) { CheckReceivedBits(); } }
static int Speed( void ) { int sync_point; if( !MarchToTheSameDrummer() ) return( FAIL ); sync_point = MAX_BAUD_SET_TICKS; for( ;; ) { if( SetBaud( BaudCounter, &sync_point ) ) break; ++BaudCounter; /* ... try next slower speed */ if( BaudCounter >= MIN_BAUD ) { BaudCounter = MIN_BAUD; return( FAIL ); } } return( SUCCESS ); /* link established */ }
unsigned long _download_main_file(ITL_FILE_DOWNLOAD * itlFile) { unsigned char chk; unsigned long cur_block; unsigned long i; unsigned long block_offset; CloseSSPPort(itlFile->port); sleep(2); OpenSSPPort(itlFile->portname); SetBaud(itlFile->port,itlFile->baud); //ensure buffer clear after restart if (_send_download_command(&itlFile->fData[6],1,ram_OK_ACK,itlFile) == 0) return DATA_TRANSFER_FAIL; if (_send_download_command(itlFile->fData,128,ram_OK_ACK,itlFile) == 0) return DATA_TRANSFER_FAIL; for (cur_block = 1; cur_block <= itlFile->NumberOfBlocks; ++cur_block) { block_offset = 128 + ((cur_block-1)*itlFile->dwnlBlockSize) + itlFile->NumberOfRamBytes; chk = 0; for(i = 0; i < itlFile->dwnlBlockSize; ++i) chk ^= itlFile->fData[block_offset + i]; /* for(i = 0; i < itlFile->dwnlBlockSize/128; ++i) { WriteData(&itlFile->fData[block_offset + (i*128)],128,itlFile->port); while (TransmitComplete(itlFile->port) == 0) //usleep(1000); sleep(0); }*/ WriteData(&itlFile->fData[block_offset ],itlFile->dwnlBlockSize,itlFile->port); while (TransmitComplete(itlFile->port) == 0) usleep(1000); if (_send_download_command(&chk,1,chk,itlFile) ==0) return DATA_TRANSFER_FAIL; download_block = cur_block; } return DOWNLOAD_COMPLETE; }
unsigned long _download_ram_file(ITL_FILE_DOWNLOAD * itlFile, SSP_COMMAND * sspC) { unsigned long i; unsigned long baud; unsigned char buffer; int numRamBlocks; //initiate communication sspC->CommandDataLength = 2; sspC->CommandData[0] = SSP_CMD_PROGRAM; sspC->CommandData[1] = SSP_PROGRAM_RAM; if (SSPSendCommand(itlFile->port,sspC) == 0) return PROG_COMMAND_FAIL; if (sspC->ResponseData[0] != SSP_RESPONSE_OK) return PROG_COMMAND_FAIL; //calculate block size itlFile->dwnlBlockSize = ((unsigned short)sspC->ResponseData[1]) + (((unsigned short)sspC->ResponseData[2])<<8); sspC->EncryptionStatus = 0; sspC->CommandDataLength = 128; for (i = 0; i < 128; ++i) sspC->CommandData[i] = itlFile->fData[i]; SSPSendCommand(itlFile->port,sspC); if (sspC->ResponseData[ 0] == SSP_RESPONSE_HEADER_FAILURE) return HEADER_FAIL; else if (sspC->ResponseData[0] != SSP_RESPONSE_OK) return DATA_TRANSFER_FAIL; baud = 38400; if((itlFile->fData[5] != 0x9) && (itlFile->fData[5] != 0xA)){ //NV9/10 baud = 0; for(i = 0; i < 4; i++){ baud += (long)itlFile->fData[68 + i] << ((3- i) * 8); } if(baud == 0) baud = 38400; } SetBaud(itlFile->port,baud); itlFile->baud = baud; usleep(500000); numRamBlocks = itlFile->NumberOfRamBytes/RAM_DWNL_BLOCK_SIZE; for (i = 0; i < numRamBlocks; i++){ WriteData(&itlFile->fData[128+(i*RAM_DWNL_BLOCK_SIZE)],RAM_DWNL_BLOCK_SIZE,itlFile->port); while (TransmitComplete(itlFile->port) == 0) usleep(1000); //ramStatus.currentRamBlocks = i; } if ((itlFile->NumberOfRamBytes % RAM_DWNL_BLOCK_SIZE) != 0) { WriteData(&itlFile->fData[128+(i*RAM_DWNL_BLOCK_SIZE)],itlFile->NumberOfRamBytes % RAM_DWNL_BLOCK_SIZE,itlFile->port); } buffer = _read_single_byte_reply(itlFile,500); //check checksum if (itlFile->fData[0x10] != buffer) return DATA_TRANSFER_FAIL; return DOWNLOAD_COMPLETE; }