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

📄 serial.c

📁 在ARM ADS开发环境下,做的一个通过串口下载接收bootloader的程序,包含对flash的操作.
💻 C
字号:
// Copyright(c) 2001-2002 Hybus Co,.ltd. All rights reserved.
//
// Module name:
//      serial.c
//
// Description:
//
//
//
// Author:
//      bedguy
//
// Created:
//      2002.10
//
////////////////////////////////////////////////////////////////////////////////

#include "serial.h"


void SerialInit(ulong baud){

   // GP39, GP40, GP41阑 UART(10)肺 荤侩茄促.
  // GAFR1_L |= 0x000A8000;	
  // GPDR1   |= 0x00000380;
   GPDR1 = 0x80;///////GPIO Pin Direction  Register GPIO<63:32>
    GAFR1_L = 0x8010;////GPIO Alternate Function Select Register GPIO<47:32>
 
   // 8-bit, 1 stop, no parity 技泼.
   FFLCR = 0x00000003;//Line Control Register (read/write)

   // Reset tx, rx FIFO. clear. FIFO enable
   FFFCR = 0x00000007;///FIFO Control Register (write only)

   FFIER = 0x00000040;///Interrupt Enable Register(read /write)
   // DLAB set=latch registers, DLAB clear=老馆 器飘.
   FFLCR |= 0x00000080;///Line Control Register (read/write)

   // baud rate 汲沥. 
   FFDLL = baud;////Divisor Latch low Register(DLAB=1)(Read /Write)
                ///FFDLH = baud;////Divisor Latch low Register(DLAB=1)(Read /Write)
   // DLAB clear, 老馆 器飘肺 傈券.
   FFLCR &= 0xFFFFFF7F;
   
   // Transmit Shift Register, Transmit Holding Register, FIFO俊 
   
    // UART Enable Interrupt
   

   // 单捞鸥啊 绝阑锭鳖瘤 扁促赴促.
   while(! FFLSR & 0x00000040 );//FFLSR --- Line Status Register(read/write)

   return;
}


void SerialOutputByte(const char c){

	// FIFO俊 单捞鸥啊 绝阑锭鳖瘤 扁促赴促.
	while ((FFLSR & 0x00000020) == 0 );////FFLSR----Line Status Register(read/write)

	FFTHR = ((ulong)c & 0xFF);  ///FFTHR---Transmit  Holding Register(write only)

	// c=='\n'捞搁, 角力肺绰 "\n\r"阑 免仿.
	if (c=='\n') SerialOutputByte('\r');
}




void SerialOutputString(char * str)
{
   int i=0;
   while(*(str+i)!='\0')
     {
        SerialOutputByte(*(str+i));
        i++;
     }


}





int SerialInputByte(char *c){

	// FIFO俊 单捞鸥啊 乐阑锭.//////////FFLSR   line status register (read only)
	if((FFLSR & 0x00000001)==0){
		return 0;
	} else {

		(volatile char)*c = FFRBR;////FFRBR   receive buffer register(read only)
		return 1;
	   }
}







//////////////////////////////////








uint  ReceiveFile(void)
 
 {
 

    ////char * string1 = "\n\nThis is my first embody program!\nPlease send file.....\n\n";
   /// SerialOutputString(string1);
    ////void SerialOutputString(char * str)
 

/*

uint8  UART0_GetByte(void)
{ 
  while((U0LSR & 0x01)==0x00);
  
  return (U0RBR);
}

*/

 ///SerialGetByte(byte);

 
 
/// char   *byte;

 ///SerialInputByte(byte);
 
   
 uint  buffer[4]={0,0,0,0},i; 
 uint  BufferX=0;



for(i=0;i<4;i++)

{
   


   
   
 while((FFLSR & 0x01)==0x00);///如果最低是零的话就等待.......
 
// return  FFRBR;
 
 buffer[i]=FFRBR;
 
 
 
 
 
 
 }
 
 
 
 ///注意buffer[0]放在低地址
 ////buffer[4]放在高地址
 
 
 
 
 
 BufferX=BufferX|buffer[3];
 
 
 
 
 BufferX=(BufferX<<8)|buffer[2];
 
 BufferX=(BufferX<<8)|buffer[1];
 
 BufferX=(BufferX<<8)|buffer[0];

 
 
 
 
 return BufferX;
 
 
 
 
 
 
 
 }







⌨️ 快捷键说明

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