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

📄 v3k_fram_uart_demo1_sdcc.c

📁 DEMO程序 单周期8051内核 8K铁电FRAM 56IO 4KRAM 40MIPS
💻 C
📖 第 1 页 / 共 2 页
字号:
		}

  x = (number/100);					//Define the number of hundreds
	if( (zerodisplay !=0)|| (x !=0))
		txmit0((x+'0'));
		else
			txmit0(' ');			//display a blank space instead

	if(x>0)
		{
		zerodisplay = 1;
		number = number - (x*100);
      	}

	x = (number / 10);				//Define the number of thens
	if( (zerodisplay !=0)|| (x !=0))
		txmit0((x+'0'));
		else
			txmit0(' ');			//display a blank space instead

	if(x>0)
		number = number - (x*10);

	txmit0(number + '0');
} //end of bin2bcdser()


//------------------------------------------------------------//
// void Uart0HexSer4(int)
//-----------------------
// Description: BINARY TO Ascii Hex CONVERSION + TXMIT ON SERIAL UART0
//
// Ramtron Inc  -  April 2006
//------------------------------------------------------------//
void Uart0HexSer4(int value)
	{
	char valmsb;
	char vallsb;
	char hexchar;

	vallsb = value & 0xFF;
	valmsb = (value >> 8)&0xFF;

	hexchar = (valmsb >> 4)&0x0F;		//Isolate Quartet
	if(hexchar  > 9)				//Convert in Ascii Hex
		hexchar = (hexchar + 'A'- 10);
		else
			hexchar += '0';
	txmit0(hexchar);				//Transmit HexChar on UART0

	hexchar = (valmsb)&0x0F;			//Isolate Quartet
	if(hexchar  > 9)				//Convert in Ascii Hex
		hexchar = (hexchar + 'A'- 10);
		else
			hexchar += '0';
	txmit0(hexchar);				//Transmit HexChar on UART0

	hexchar = (vallsb >> 4)&0x0F;		//Isolate Quartet
	if(hexchar  > 9)				//Convert in Ascii Hex
		hexchar = (hexchar + 'A'- 10);
		else
			hexchar += '0';
	txmit0(hexchar);				//Transmit HexChar on UART0

	hexchar = (vallsb)&0x0F;			//Isolate Quartet
	if(hexchar  > 9)				//Convert in Ascii Hex
		hexchar = (hexchar + 'A'- 10);
		else
			hexchar += '0';
	txmit0(hexchar);				//Transmit HexChar on UART0
	txmit0('H');					//Transmit 'H'

	}//end of Uart0HexSer4(int)


//------------------------------------------------------------//
// void Uart0HexSer2(char)
//-----------------------
// Description: BINARY TO Ascii Hex CONVERSION + TXMIT ON SERIAL UART0
//
// Ramtron Inc  -  April 2006
//------------------------------------------------------------//
void Uart0HexSer2(char value)
	{
 	char vallsb;
	char hexchar;

	vallsb = value & 0xFF;

	hexchar = (vallsb >> 4)&0x0F;		//Isolate Quartet
	if(hexchar  > 9)				//Convert in Ascii Hex
		hexchar = (hexchar + 'A'- 10);
		else
			hexchar += '0';
	txmit0(hexchar);				//Transmit HexChar on UART0

	hexchar = (vallsb)&0x0F;			//Isolate Quartet
	if(hexchar  > 9)				//Convert in Ascii Hex
		hexchar = (hexchar + 'A'- 10);
		else
			hexchar += '0';
	txmit0(hexchar);				//Transmit HexChar on UART0
	txmit0('H');					//Transmit 'H'

	}//end of Uart0HexSer2(char)



//;--------------------------------------
//;- DELAY1MSTO : 1MS DELAY USING TIMER0
//;
//; CALIBRATED FOR 40MHZ
//;--------------------------------------
void delay(unsigned int dlais){

idata unsigned char x=0;
idata unsigned int dlaisloop;

	x = PERIPHEN1;						//LOAD PERIPHEN1 REG
	x |= 0x01;						//ENABLE TIMER 0
	PERIPHEN1 = x;

	dlaisloop = dlais;
	while ( dlaisloop > 0)
		{
		TH0 = 0x63;					//TIMER0 RELOAD VALUE FOR 1MS AT 40MHZ
		TL0 = 0xC0;

		T0T1CLKCFG = 0x00;				//NO PRESCALER FOR TIMER 0 CLOCK
		T0CON = 0x04;					//START TIMER 0,  COUNT UP

		do{
			x=T0CON;
			x= x & 0x80;
			}while(x==0);

		T0CON = 0x00;					//Stop Timer 0

		dlaisloop = dlaisloop-1;

		}//end of while dlais...


		x = PERIPHEN1;					//LOAD PERIPHEN1 REG
		x = x & 0xFE;					//DISABLEBLE TIMER 0
		PERIPHEN1 = x;

	}//End of function delais


//-------------------------------------------------------------------------------------------------------------//
// FRAM specific functions   //
//---------------------------//
//
//--Fram Function prototype
//  char ReadFram( int );
//  void WriteFram( int , char );
//  void ReadFramUart0( int );
//  void WriteReadFramUart0( int , char );
//  void FramProtect(char);
//
//--Init pointer to FRAM base address
//  xdata at 0x8000 unsigned char frambase;			//Init  a char variable pointing to FRAM
//  xdata unsigned char * data framptr = &frambase ;	//Init a pointer in IRAM pointing to the frambase var.
//-------------------------------------------------------------------------------------------------------------//


//--------------------------------------------------------------------//
// ReadFram(int offset)              //
//-----------------------------------//
// Description:
//	Read FRAM content at address pointed by 0x8000+offset
//	argument
//
// Input parameters:
//	Offset address of the Address into FRAM
//
// Output parameters:
//   char representing the value
//
// Ramtron Inc  -  April 2006
//--------------------------------------------------------------------//
char ReadFram( int offset)
	{
	while(!(FRAMCFG1&0x80));			//Wait FREADIDLE == 1  (FRAM IDLE)
	return *(framptr+ offset);
	}//end of WriteFram


//--------------------------------------------------------------------//
// WriteFram(int offset, char value) //
//-----------------------------------//
//
// Description:
//	Write "value" content in to FRAM address p  ointed by 0x8000+offset
//	argument
//
// Input parameters:
//	Offset address of the Address into FRAM
//	Value to be written into FRAM
//
// Output parameters:
//	None
//
// Ramtron Inc  -  April 2006
//--------------------------------------------------------------------//
void WriteFram( int offset, char value)
	{
	//--write value in FRAM
	//while(!(FRAMCFG1&0x80));			//Wait FREADIDLE == 1  (FRAM IDLE)
	*(framptr+ offset) = value;

	}//end of WriteFram


//--------------------------------------------------------------------//
// ReadFramUart0(int offset) //
//---------------------------//
//
// Description:
//	Read FRAM address content and transmit the current
//	address & data (ASCII) on uart0
//
// Input parameters:
//	Offset address of the Address into FRAM
//
// Output parameters:
//	None
//
// Ramtron Inc  -  April 2006
//--------------------------------------------------------------------//
void ReadFramUart0( int offset)
	{

	Uart0HexSer4((0x8000 + offset));		//Display address (Hex)
	txmit0(' ');					//Send ' '
	txmit0('=');					//Send '='
	txmit0(' ');					//Send ' '
	txmit0(*(framptr+ offset));		//Read FRAM and display ASCII

	txmit0(13);					//Send Carriage Return
	txmit0(10);					//Send Line Feed

	}//end of ReadFram

//--------------------------------------------------------------------//
// WriteReadFramUart0(int offset,char value) //
//-------------------------------------------//
//
// Description:
//	Write "value" content FRAM address pointed to 0x8000+ "offset" parameter
//	After the write operation is made into FRAM.
//	The function reads the content of the current FRAM address
//	and display the current address and data in ASCII format
//
// Input parameters:
//	Int that represent Offset in FRAM memory Address
//	Char data to be written into FRAM
//
// Output parameters:
//	char data written into FRAM and Read back
//
// Ramtron Inc  -  April 2006
//--------------------------------------------------------------------//
void WriteReadFramUart0( int offset, char value)
	{
	//--write value in FRAM

	*(framptr+ offset) = value;
	ACC = 0x00;
	//-- read FRAM

	Uart0HexSer4(0x8000+ offset);		//Display address (Hex)
	txmit0(' ');					//Send ' '
	txmit0('=');					//Send '='
	txmit0(' ');					//Send ' '
 	txmit0(*(framptr+ offset));		//Read FRAM and display ASCII

	txmit0(13);					//Send Carriage Return
	txmit0(10);					//Send Line Feed

	}//end of ReadFram



//------------------------------------------------------------//
// void FramProtect(char frambp)   //
//---------------------------------//
// Description: Apply Block Protect on V3K FRAM
//
// Input parameters:
//	char value corresponding to the FRAMBP[1:0] of FRAMCFG2 register
//
// Output parameters:
//	None
//
// Ramtron Inc  -  April 2006
//--------------------------------------------------------------------//
void FramProtect(char frambp)
	{

 	frambp &= 0x03;						//FRAMBP is 2 bit only
	frambp = frambp << 2;					//shift  frambp value  to position at bits 3:2

	FRAMCFG1 = 0x01;						//Set FRAMWEL = 1 Enable Write  (FRAMOP = 00)
	while(!(FRAMCFG1&0x80));					//Wait FREADIDLE == 1  (FRAM IDLE)

	FRAMCFG2 = frambp;						//Transfer frambp value into FRAMCFG2

	FRAMCFG1 = 0x07;						//Execute Transfert of FRAMCFG2 module to FRAM Module
	while(!(FRAMCFG1&0x80));					//Wait FREADIDLE == 1  (FRAM IDLE)

	FRAMCFG1 = 0x03;						//Clear FRAMWEL (FRAMOP = 01)
	while(!(FRAMCFG1&0x80));					//Wait FREADIDLE == 1  (FRAM IDLE)

	//read WEL (optional)
	//FRAMCFG1 = 0x05;						//read FRAMCFG2
	//while(!(FRAMCFG1&0x80));					//Wait FREADIDLE == 1  (FRAM IDLE)

	}//end of FramProtect

//------------------------------------------------------------//
// void FramInit(char initval)     //
//---------------------------------//
// Description: Initialize the V3K FRAM with the initval value
// provided its content is not protected in writing
//
// Input parameters:
//	char value corresponding to the value to  init FRAM with
//
// Output parameters:
//	None
//
// Ramtron Inc  -  April 2006
//-------------------------------------------------------------//
int FramInit(char initval)
	{
	int cptr;
	char readval;
	int errorcount = 0x00;

	//-Set the FRAM in burst mode
	FRAMCFG1 = 0x08;		//Set Burst mode

	//-- write initval value into the entire FRAM

	for(cptr = 0x0000; cptr < 0x2000; cptr++)
		{
		*(framptr+ cptr) = initval;
		}
	while(!(FRAMCFG1&0x80));					//Wait FREADIDLE == 1  (FRAM IDLE)

	//--Read all the FRAM content and check if all FRAM cells content match inival

	for(cptr = 0x0000; cptr < 0x2000; cptr++)
		{
		readval = *(framptr+ cptr);
		if(readval != initval)
			errorcount++ ;
		}

	//return the number of error  zero means no error which is what is expected
	return errorcount;

	}//end of FramInit





⌨️ 快捷键说明

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