📄 v3k_fram_uart_demo1_sdcc.c
字号:
}
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 + -