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

📄 rw_data.c

📁 Source Code Source Code Source Code Source Code Source Code Source Code Source Code Source Code Sour
💻 C
字号:
/* +-------------------------------------------------------------------+ */
/* | Project : 1920.011 442GA01-M (Ext. Reader RFID 13,56MHz MIFARE)   | */
/* | Module  : RW_data.c                                               | */
/* | Author  : Jaime Rodriguez                                         | */
/* | Company : AVE S.p.A.                                              | */
/* | Released: October, 29 2008                                        | */
/* | Revision: YZ080.00 (FW - First Official Release)                  | */
/* | Revision: YZ081.00 (EEPROM - First Official Release)              | */
/* | Revised : --------------                                          | */
/* | Revisor : --------------                                          | */
/* | Notes   : --------------                                          | */
/* +-------------------------------------------------------------------+ */
/* | Purpose : This module contains functions to read and to write all | */
/* |           the local variables (Flash, EEPROM or RAM)              | */
/* +-------------------------------------------------------------------+ */
/* | Functions: uint8_t getLocalData( uint8_t loc, uint8_t* s )        | */
/* |            void setLocalData( uint8_t loc, uint8_t* s )           | */
/* +-------------------------------------------------------------------+ */

/* +-------------------------------------------------------------------+ */
/* |                         I N C L U D E S                           | */
/* +-------------------------------------------------------------------+ */
// G L O B A L
#include <avr/io.h>
#include <avr/pgmspace.h>
// L O C A L S
#include "LetExtDef.h"

/* +-------------------------------------------------------------------+ */
/* |                          D E F I N E S                            | */
/* +-------------------------------------------------------------------+ */
#define L1				  	0x10	//  8 bit item
#define L2				  	0x20	// 16 bit item
#define L4				  	0x40	// 32 bit item

#define OR				  	0x01	// not writable item
#define RW				  	0x02	// writable item

#define ROM_ITEMS			2		// number of ROM items
#define RAM_ITEMS			11		// number of RAM items
#define RAM_EEP_ITEMS		18		// number of EEPROM items

#define FIRST_EE_ITEM_IDX	( ROM_ITEMS + RAM_ITEMS )
#define ITEMS				( ROM_ITEMS + RAM_ITEMS + RAM_EEP_ITEMS )	// total number of items

/* +-------------------------------------------------------------------+ */
/* |                      S T R U C T U R E S                          | */
/* +-------------------------------------------------------------------+ */
typedef struct {
	void *add;				/* address pointer to variable access */
	uint8_t len_wrt;		/* byte, word od dword variable type end write or read only definition */
} ItemDescrStruct;

/* +-------------------------------------------------------------------+ */
/* |                   E X T   V A R I A B L E S                       | */
/* +-------------------------------------------------------------------+ */
// R O M   I t e m s
extern prog_uint8_t FWrev;	// Software revision
extern prog_uint8_t FWvers;	// Hardware revision
// R A M   I t e m s
extern volatile uint8_t LI_STATUS;
extern volatile uint8_t	card_type;

/*-----------------23/10/2008 16.05-----------------
 * VARIABILI DA CANCELLARE
 * --------------------------------------------------*/
// E E P R O M
uint16_t EERF_TX0_b	EEMEM = 0;		/**< periodo di output a 0 */
uint16_t EERF_TX1_b	EEMEM = 0;		/**< periodo di output a 1 */
// R A M
volatile uint16_t V_RF_TX0_b;
volatile uint16_t V_RF_TX1_b;

/* +-------------------------------------------------------------------+ */
/* |                M O D U L E   V A R I A B L E S                    | */
/* +-------------------------------------------------------------------+ */
// *********************************************************************
// Table to access local variables (read and/or write)
//
// Set the structure about ROM_ITEMS, RAM_ITEMS and RAM_EEP_ITEMS
// You must put variables in this sequence:
// 		1) ROM items --- 2) RAM items --- 3) EEPROM items
// then update ROM_ITEMS, RAM_ITEMS and RAM_EEP_ITEMS defines
// *********************************************************************
ItemDescrStruct ItemDescr[] PROGMEM = {
	// ROM items
	{ (void *)&FWrev, L1 | OR },			// #00
	{ (void *)&FWvers, L1 | OR }, 			// #01
	// RAM items
	{ (void *)&card_type, L1 | OR },		// #02
	{ (void *)&LI_STATUS, L1 | OR },		// #03
	{ (void *)&time, L4 | RW },				// #04
	{ (void *)&V_RF_TX0_b, L2 | RW },		// #05
	{ (void *)&V_RF_TX1_b, L2 | RW },		// #06
	{ (void *)&RF_code[0], L4 | OR },		// #07
	{ (void *)&RF_code[1], L4 | OR },		// #08
	{ (void *)&RF_code[2], L4 | OR },		// #09
	{ (void *)&RF_code[3], L4 | OR },		// #0a
	{ (void *)&RF_code[4], L4 | OR },		// #0b
	{ (void *)&RF_code[5], L4 | OR },		// #0c
	// EEPROM items
	{ (void *)&EEDlyRunTime, L1 | RW },		// #0d
	{ (void *)&EECodiceHotel, L2 | RW },	// #0e
	{ (void *)&EECodiceCamera, L2 | RW },	// #0f
	{ (void *)&EECodiceClient, L2 | RW },	// #10
	{ (void *)&EECodiceLivell, L1 | RW },	// #11
	{ (void *)&EEEletOffOn, L1 | RW },		// #12
	{ (void *)&EERFCardTOut, L1 | RW },		// #13
	{ (void *)&EELuciOffOut, L1 | RW },		// #14
	{ (void *)&EE_MM_AC, L1 | RW },			// #15
	{ (void *)&EE_MM_ACS, L1 | RW },		// #16
	{ (void *)&EEMODE_IS, L1 | RW },		// #17
	{ (void *)&EEST_CA_LO, L1 | RW },		// #18
	{ (void *)&EERF_TX0_b, L2 | RW },		// #19
	{ (void *)&EERF_TX1_b, L2 | RW },		// #1a
	{ (void *)&EECodiceSubci, L1 | RW },	// #1b
	{ (void *)&EEToutDoorB, L1 | RW },		// #1c
	{ (void *)&EEAlwaysDoorB, L1 | RW },	// #1d
	{ (void *)&EEMyAddress, L1 | RW }		// #1e
};

/* +-------------------------------------------------------------------+ */
/* |                       F U N C T I O N S                           | */
/* +-------------------------------------------------------------------+ */

/* +-------------------------------------------------------------------+ */
/* | g e t L o c a l D a t a (  )                       15 Aprile 2008 | */
/* | Funzione per la lettura di una variabile di configurazione dalla  | */
/* | memoria del microcontrollore (FLASH, EEPROM o RAM)                | */
/* | Parametri passati   : Indice, parametro in cui memorizzare dato   | */
/* | Parametri ritornati : dimensione della variabile letta            | */
/* +-------------------------------------------------------------------+ */
uint8_t getLocalData( uint8_t loc, uint8_t* s )
{
uint8_t item_len, i;
uint8_t* item_add;

	if( loc > ( ITEMS + 1 ) )
		return ( 1 );

	item_len = ( pgm_read_byte( &( ItemDescr[loc].len_wrt ) ) >> 4 );
	item_add = (uint8_t *)pgm_read_word_near( &( ItemDescr[loc].add ) );
	if( loc < ROM_ITEMS ) // data stored in FLASH memory
	{
		for( i = 0; i < item_len; i++ )
			*s++ = pgm_read_byte_near( item_add + i );
	}
	else if( loc >= FIRST_EE_ITEM_IDX ) // data stored in EEPROM memory
	{
		for( i = 0; i < item_len; i++ )
			*s++ = eeprom_read_byte( ( item_add ) + i );
	}
	else // data stored in RAM memory
	{
		for( i = 0; i < item_len; i++ )
			*s++= ( *(uint8_t*)( ( item_add ) + i ) );
	}
	return ( item_len );
}

/* +-------------------------------------------------------------------+ */
/* | s e t L o c a l D a t a (  )                       15 Aprile 2008 | */
/* | Funzione per la scrittura di una variabile di configurazione nella| */
/* | memoria del microcontrollore (EEPROM o RAM)                       | */
/* | Parametri passati   : Indice, parametro in cui memorizzare dato   | */
/* | Parametri ritornati : Nessuno                                     | */
/* +-------------------------------------------------------------------+ */
void setLocalData( uint8_t loc, uint8_t* s )
{
uint8_t item_len, item_wr, i;
uint8_t* item_add;

	if( loc > ( ITEMS + 1 ) )
		return;

	item_len = ( pgm_read_byte( &( ItemDescr[loc].len_wrt ) ) >> 4 );
	item_add = (uint8_t *)pgm_read_word_near( &( ItemDescr[loc].add ) );
	item_wr = pgm_read_byte( &( ItemDescr[loc].len_wrt ) ) & 0x0f;
	if( item_wr != RW ) // is parameter writable?
		return;
	if( loc >= FIRST_EE_ITEM_IDX ) // data stored in EEPROM memory
	{
		for( i = 0; i < item_len; i++ )
			eeprom_write_byte( ( item_add ) + i, *s++ );
	}
	else // data stored in RAM memory
	{
		for( i = 0; i < item_len; i++ )
			( *(uint8_t*)( ( item_add ) + i ) ) = *s++;
	}
}

⌨️ 快捷键说明

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