Mam pytanie do osób którzy zarabiają na chleb tworząc oprogramowanie dla systemów wbudowanych.
Mam dowolny mikrokontroler, i jednym z zewnętrznych modułów jest na przykład akcelerometr LSM303D. I tutaj moje pytanie czy pisząc obsługę takiego akcelerometru robicie całą mapę pamięci takiego układu, nawet wtedy jeżeli wiecie, że nigdy niektórych funkcji nie będziecie używać ?
W jaki sposób konfigurujecie poszczególne wartości w rejestrach?
Czy bardziej w taki rozbudowany sposób:
Kod: Zaznacz cały
typedef enum { X_AXIS_DISABLED = 0b0, X_AXIS_Enabled = 0b1} AXEN_Type;
typedef enum { Y_AXIS_DISABLED = 0b0, Y_AXIS_Enabled = 0b1} AYEN_Type;
typedef enum { Z_AXIS_DISABLED = 0b0, Z_AXIS_Enabled = 0b1} AZEN_Type;
typedef enum
{
CONTINOUS_UPDATE = 0b0,
OUTPUT_REGISTER_NOT_UPDATED_UNTIL_MSB_AND_LSB_HAVE_BEEN_READ = 0b1
} BDU_Type;
typedef enum
{
POWER_DOWN_MODE = 0b0000,
Frequency_3_125Hz = 0b0001,
Frequency_6_25Hz = 0b0010,
Frequency_12_5Hz = 0b0011,
Frequency_25Hz = 0b0100,
Frequency_50Hz = 0b0101,
Frequency_100Hz = 0b0110,
Frequency_200Hz = 0b0111,
Frequency_400Hz = 0b1000,
Frequency_800Hz = 0b1001,
nFrequency_1600Hz = 0b1010
} AODR_Type;
typedef union
{
struct
{
AXEN_Type AXEN :1;
AYEN_Type AYEN:1;
AZEN_Type AZEN :1;
BDU_Type BDU :1;
AODR_Type AODR :4;
};
uint8_t byte;
}LSM303_REG_CTRL1_VALUE;
LSM303_REG_CTRL1_VALUE REGISTER_CONTROL_1 =
{
.AXEN = X_AXIS_Enabled,
.AYEN = Y_AXIS_Enabled,
.AZEN = Z_AXIS_Enabled,
.BDU = CONTINOUS_UPDATE,
.AODR = Frequency_25Hz
};
buffer = REGISTER_CONTROL_1.byte;
TWI_write(LSM303_DEVICE_ID, LSM303_CTRL1, buffer);
Czy w taki prostszy sposób:
Kod: Zaznacz cały
TWI_write(LSM303_DEVICE_ID, LSM303_CTRL1, 0b01000111); // X_AXIS_Enabled, Y_AXIS_Enabled, Z_AXIS_Enabled, CONTINOUS_UPDATE, Frequency_25Hz
Jeżeli ktoś ma jakieś przemyślenia to bardzo proszę o podzielenie się nimi.
Pozdrawiam
StaryAnoda