feat: add M95M02-only GAS and EEPROM profiles
Expose the existing registers through Modbus and service CAN using one GAS provider only in M95M02 builds. Include the EEPROM layout/driver, LOAD protection and calibration, firmware identity and shared CCS build workflow. Add transport/profile and SCI8 validation tests, documentation and the checked M95M02 firmware image.
This commit is contained in:
+19
-4
@@ -12,7 +12,9 @@
|
||||
#include "message.h"
|
||||
#include "peripher.h"
|
||||
#include "log_to_mem.h"
|
||||
#include "DAC.h"
|
||||
#include "ump_can_protocol.h"
|
||||
#include "gas167.h"
|
||||
|
||||
|
||||
// Prototype statements for functions found within this file.
|
||||
@@ -234,11 +236,18 @@ void Handlai(volatile struct ECAN_MBOXES * ECanMboxes)
|
||||
Data[1] = (loword>>16) & 0xffff;
|
||||
Data[2] = (loword ) & 0xffff;
|
||||
|
||||
if(bit[0]) if(adr < ANSWER_LEN) modbus[adr] = Data[0]; adr++;
|
||||
if(bit[1]) if(adr < ANSWER_LEN) modbus[adr] = Data[1]; adr++;
|
||||
if(bit[2]) if(adr < ANSWER_LEN) modbus[adr] = Data[2];
|
||||
if(bit[0]) if(adr < ANSWER_LEN &&
|
||||
!(Desk == dsk_LOAD && (adr == 0x7CU || adr == 0x7DU))) modbus[adr] = Data[0]; adr++;
|
||||
if(bit[1]) if(adr < ANSWER_LEN &&
|
||||
!(Desk == dsk_LOAD && (adr == 0x7CU || adr == 0x7DU))) modbus[adr] = Data[1]; adr++;
|
||||
if(bit[2]) if(adr < ANSWER_LEN &&
|
||||
!(Desk == dsk_LOAD && (adr == 0x7CU || adr == 0x7DU))) modbus[adr] = Data[2];
|
||||
|
||||
/* Ôèêñèðóåì ïðèìåí¸ííóþ êîìàíäó äî âûõîäà èç îáðàáîò÷èêà CAN. */
|
||||
/* A short frame cannot confirm voltage freshness. Service frames
|
||||
* UMP_MARKER return above and do not refresh this timeout. */
|
||||
if (ECanMboxes->MBOX1.MSGCTRL.bit.DLC == 8)
|
||||
Load_voltage_can((unsigned int)(hiword >> 16), Data[0], Data[1], Data[2]);
|
||||
ump_log_can((unsigned int)(hiword >> 16), Data[0], Data[1], Data[2]);
|
||||
led2_toggle();
|
||||
}
|
||||
@@ -316,7 +325,13 @@ void UMP_CAN_service(void)
|
||||
saved = __disable_interrupts();
|
||||
tag = ump_can_tag; address = ump_can_address; value = ump_can_value;
|
||||
ump_can_pending = 0;
|
||||
ump_can_length = ump_can_prepare(tag & 0xFF, address, value, ump_can_reply, &error);
|
||||
if (address >= 0x1300U && address < 0x1308U)
|
||||
ump_can_length = Load_protection_prepare(tag & 0xFF, address, value, ump_can_reply, &error);
|
||||
#if EEPROM_M95M02
|
||||
else if (gas167_contains(address))
|
||||
ump_can_length = gas167_prepare(tag & 0xFF, address, value, 1, ump_can_reply, &error);
|
||||
#endif
|
||||
else ump_can_length = ump_can_prepare(tag & 0xFF, address, value, ump_can_reply, &error);
|
||||
ump_can_reply_tag = (tag & 0xFF00) | error;
|
||||
ump_can_index = 0;
|
||||
__restore_interrupts(saved);
|
||||
|
||||
Reference in New Issue
Block a user