1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057 |
- ///##############################################################################
- //
- // FILE: BMS_CAN0_Mail_Box.c
- //
- // TITLE: CAN 0
- // - Module Configuration
- // - Mailbox Definition
- // - Mailbox Load
- // uint16_t CAN0_init ( void )
- // - Mailbox Check
- // uint16_t CAN0_update ( void )
- //
- //
- //##############################################################################
- //
- //==============================================================================
- // Change History:
- //==============================================================================
- // Datum: | Name | Version:| Change / Cause: | No
- //------------------------------------------------------------------------------
- // | | | | 002
- //------------------------------------------------------------------------------
- // | | | | 001
- //------------------------------------------------------------------------------
- // 05.07.13 | VR | 1.0 | New Build | 000
- //==============================================================================
- //==============================================================================
- // Comment Change / Cause:
- //==============================================================================
- // Change: 003 // 003
- //----------------------
- //
- //
- //==============================================================================
- // Change: 002 // 002
- //----------------------
- //
- //
- //==============================================================================
- // Change: 001 // 001
- //----------------------
- //
- //
- //==============================================================================
- #include "BMS_Master.h"
- volatile uint16_t CAN_ID_count[51] = { 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,
- 0 };
- static uint8_t Master_Rx0_buff[8]= {0,0,0,0,0,0,0,0};
- static uint8_t Master_Rx1_buff[8]= {0,0,0,0,0,0,0,0};
- static uint8_t Master_Rx2_buff[8]= {0,0,0,0,0,0,0,0};
- static uint8_t Master_Rx3_buff[8]= {0,0,0,0,0,0,0,0};
- static uint8_t Master_Rx4_buff[8]= {0,0,0,0,0,0,0,0};
- static uint8_t Master_Rx5_buff[8]= {0,0,0,0,0,0,0,0};
- static uint8_t Master_Rx6_buff[8]= {0,0,0,0,0,0,0,0};
- static uint8_t Master_Rx7_buff[8]= {0,0,0,0,0,0,0,0};
- // ****** Config CAN Modul ********************************************************
- CAN_CONFIG CAN_0_Config = {
- &CAN_0,
- CAN0_PortB0_1,
- TxPushPull, //enum {TxPushPull=0,Tx_OpenDrain} TxPortType;
- RxMask_Individual, //RxMaskType
- 0xFFFFFFFF, //uint32_t GlobalRxMask
- CANBaud_500kHz_OSC_40MHz
- };
- // ****** MailBox Master Ctrl **************************************************
- // Mailbox for contacting Slave 0
- CAN_MAILBOX CAN0_MB_MASTER0_BMS_100= {
- &CAN_0_Config,
- 0, // uint8_t MBNumber //0..64 Number of Message Buffer
- MB_Tx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 4, // uint8_t DataBytes
- 0, // uint8_t InterruptEnable
- 0xFFFFFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x100 // ID
- };
- // Mailbox for contacting Slave 1
- CAN_MAILBOX CAN0_MB_MASTER1_BMS_110= {
- &CAN_0_Config,
- 1, // uint8_t MBNumber //0..64 Number of Message Buffer
- MB_Tx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 4, // uint8_t DataBytes
- 0, // uint8_t InterruptEnable
- 0xFFFFFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x110 // ID
- };
- // Mailbox for contacting Slave 2
- CAN_MAILBOX CAN0_MB_MASTER2_BMS_120= {
- &CAN_0_Config,
- 2, // uint8_t MBNumber //0..64 Number of Message Buffer
- MB_Tx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 4, // uint8_t DataBytes
- 0, // uint8_t InterruptEnable
- 0xFFFFFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x120 // ID
- };
- // Mailbox for contacting Slave 3
- CAN_MAILBOX CAN0_MB_MASTER3_BMS_130= {
- &CAN_0_Config,
- 3, // uint8_t MBNumber //0..64 Number of Message Buffer
- MB_Tx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 4, // uint8_t DataBytes
- 0, // uint8_t InterruptEnable
- 0xFFFFFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x130 // ID
- };
- // Mailbox for contacting Slave 4
- CAN_MAILBOX CAN0_MB_MASTER4_BMS_140= {
- &CAN_0_Config,
- 4, // uint8_t MBNumber //0..64 Number of Message Buffer
- MB_Tx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 4, // uint8_t DataBytes
- 0, // uint8_t InterruptEnable
- 0xFFFFFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x140 // ID
- };
- // Mailbox for contacting Slave 5
- CAN_MAILBOX CAN0_MB_MASTER5_BMS_150= {
- &CAN_0_Config,
- 5, // uint8_t MBNumber //0..64 Number of Message Buffer
- MB_Tx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 4, // uint8_t DataBytes
- 0, // uint8_t InterruptEnable
- 0xFFFFFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x150 // ID
- };
- // Mailbox for contacting Slave 6
- CAN_MAILBOX CAN0_MB_MASTER6_BMS_160= {
- &CAN_0_Config,
- 6, // uint8_t MBNumber //0..64 Number of Message Buffer
- MB_Tx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 4, // uint8_t DataBytes
- 0, // uint8_t InterruptEnable
- 0xFFFFFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x160 // ID
- };
- // Mailbox for contacting Slave 7
- CAN_MAILBOX CAN0_MB_MASTER7_BMS_170= {
- &CAN_0_Config,
- 7, // uint8_t MBNumber //0..64 Number of Message Buffer
- MB_Tx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 4, // uint8_t DataBytes
- 0, // uint8_t InterruptEnable
- 0xFFFFFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x170 // ID
- };
- // Mailbox for contacting Slave 8
- CAN_MAILBOX CAN0_MB_MASTER8_BMS_180= {
- &CAN_0_Config,
- 8, // uint8_t MBNumber //0..64 Number of Message Buffer
- MB_Tx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 4, // uint8_t DataBytes
- 0, // uint8_t InterruptEnable
- 0xFFFFFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x180 // ID
- };
- // Mailbox for contacting Slave 9
- CAN_MAILBOX CAN0_MB_MASTER9_BMS_190= {
- &CAN_0_Config,
- 9, // uint8_t MBNumber //0..64 Number of Message Buffer
- MB_Tx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 4, // uint8_t DataBytes
- 0, // uint8_t InterruptEnable
- 0xFFFFFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x190 // ID
- };
- // Mailbox for contacting Slave 10
- CAN_MAILBOX CAN0_MB_MASTER10_BMS_1a0= {
- &CAN_0_Config,
- 10, // uint8_t MBNumber //0..64 Number of Message Buffer
- MB_Tx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 4, // uint8_t DataBytes
- 0, // uint8_t InterruptEnable
- 0xFFFFFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x1a0 // ID
- };
- // Mailbox for contacting Slave 11
- CAN_MAILBOX CAN0_MB_MASTER11_BMS_1b0= {
- &CAN_0_Config,
- 11, // uint8_t MBNumber //0..64 Number of Message Buffer
- MB_Tx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 4, // uint8_t DataBytes
- 0, // uint8_t InterruptEnable
- 0xFFFFFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x1b0 // ID
- };
- // Mailbox for contacting Slave 12
- CAN_MAILBOX CAN0_MB_MASTER12_BMS_1c0= {
- &CAN_0_Config,
- 12, // uint8_t MBNumber //0..64 Number of Message Buffer
- MB_Tx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 4, // uint8_t DataBytes
- 0, // uint8_t InterruptEnable
- 0xFFFFFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x1c0 // ID
- };
- // Mailbox for contacting Slave 13
- CAN_MAILBOX CAN0_MB_MASTER13_BMS_1d0= {
- &CAN_0_Config,
- 13, // uint8_t MBNumber //0..64 Number of Message Buffer
- MB_Tx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 4, // uint8_t DataBytes
- 0, // uint8_t InterruptEnable
- 0xFFFFFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x1d0 // ID
- };
- // Mailbox for contacting Slave 14
- CAN_MAILBOX CAN0_MB_MASTER14_BMS_1e0= {
- &CAN_0_Config,
- 14, // uint8_t MBNumber //0..64 Number of Message Buffer
- MB_Tx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 4, // uint8_t DataBytes
- 0, // uint8_t InterruptEnable
- 0xFFFFFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x1e0 // ID
- };
- // Mailbox for contacting Slave 15 = UI-Board
- CAN_MAILBOX CAN0_MB_MASTER15_BMS_1f0= {
- &CAN_0_Config,
- 15, // uint8_t MBNumber //0..64 Number of Message Buffer
- MB_Tx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 4, // uint8_t DataBytes
- 0, // uint8_t InterruptEnable
- 0xFFFFFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x1f0 // ID
- };
- // *** structure to access Mailboxes by number *** //
- CAN_MAILBOX* MB_Container[16]={
- &CAN0_MB_MASTER0_BMS_100,
- &CAN0_MB_MASTER1_BMS_110,
- &CAN0_MB_MASTER2_BMS_120,
- &CAN0_MB_MASTER3_BMS_130,
- &CAN0_MB_MASTER4_BMS_140,
- &CAN0_MB_MASTER5_BMS_150,
- &CAN0_MB_MASTER6_BMS_160,
- &CAN0_MB_MASTER7_BMS_170,
- &CAN0_MB_MASTER8_BMS_180,
- &CAN0_MB_MASTER9_BMS_190,
- &CAN0_MB_MASTER10_BMS_1a0,
- &CAN0_MB_MASTER11_BMS_1b0,
- &CAN0_MB_MASTER12_BMS_1c0,
- &CAN0_MB_MASTER13_BMS_1d0,
- &CAN0_MB_MASTER14_BMS_1e0,
- &CAN0_MB_MASTER15_BMS_1f0
- };
- // *** structure to access Request Telegrams by number
- MASTER_X_BMS_TELEGRAM TelegramTxContainer[16];
- // ****** MailBox Slave Response **************************************************
- // Slave X Telegram 0
- CAN_MAILBOX CAN_MB_SlaveX0_2X0 = {
- &CAN_0_Config,
- 16, // uint8_t MBNumber //0..64
- MB_Rx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 8, // uint8_t DataBytes
- 0, // uint8_t Interrupt
- 0xFC3FFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x200 // ID
- };
- // Slave X Telegram 1
- CAN_MAILBOX CAN_MB_SlaveX1_2X1 = {
- &CAN_0_Config,
- 17, // uint8_t MBNumber //0..64
- MB_Rx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 8, // uint8_t DataBytes
- 0, // uint8_t Interrupt
- 0xFC3FFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x201 // ID
- };
- // Slave X Telegram 2
- CAN_MAILBOX CAN_MB_SlaveX2_2X2 = {
- &CAN_0_Config,
- 18, // uint8_t MBNumber //0..64
- MB_Rx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 8, // uint8_t DataBytes
- 0, // uint8_t Interrupt
- 0xFC3FFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x202 // ID
- };
- // Slave X Telegram 3
- CAN_MAILBOX CAN_MB_SlaveX3_2X3 = {
- &CAN_0_Config,
- 19, // uint8_t MBNumber //0..64
- MB_Rx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 8, // uint8_t DataBytes
- 0, // uint8_t Interrupt
- 0xFC3FFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x203 // ID
- };
- // Slave X Telegram 4
- CAN_MAILBOX CAN_MB_SlaveX4_2X4 = {
- &CAN_0_Config,
- 20, // uint8_t MBNumber //0..64
- MB_Rx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 8, // uint8_t DataBytes
- 0, // uint8_t Interrupt
- 0xFC3FFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x204 // ID
- };
- // Slave X Telegram 5
- CAN_MAILBOX CAN_MB_SlaveX5_2X5 = {
- &CAN_0_Config,
- 21, // uint8_t MBNumber //0..64
- MB_Rx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 8, // uint8_t DataBytes
- 0, // uint8_t Interrupt
- 0xFC3FFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x205 // ID
- };
- // Slave X Telegram 6
- CAN_MAILBOX CAN_MB_SlaveX6_2X6 = {
- &CAN_0_Config,
- 22, // uint8_t MBNumber //0..64
- MB_Rx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 8, // uint8_t DataBytes
- 0, // uint8_t Interrupt
- 0xFC3FFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x206 // ID
- };
- // Slave X Telegram 7
- CAN_MAILBOX CAN_MB_SlaveX7_2X7 = {
- &CAN_0_Config,
- 23, // uint8_t MBNumber //0..64
- MB_Rx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 8, // uint8_t DataBytes
- 0, // uint8_t Interrupt
- 0xFC3FFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x207 // ID
- };
- // ****** MailBox UI_Master Response **************************************************
- CAN_MAILBOX CAN_MB_UI_MASTER_2F7 = {
- &CAN_0_Config,
- 24, // uint8_t MBNumber //0..64
- MB_Rx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 8, // uint8_t DataBytes
- 0, // uint8_t Interrupt
- 0xFFFFFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x2FF // ID
- };
- // ***** Mailboxes for automatic CAN ID initialization
- // Mailboxes for CAN initialisierung
- CAN_MAILBOX CAN_TxMB_System300 = {
- &CAN_0_Config,
- 25, // uint8_t MBNumber //0..15
- MB_Tx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 8, // uint8_t DataBytes
- 0, // uint8_t InterruptEnable
- 0xFFFFFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x300 // ID
- };
- CAN_MAILBOX CAN_TxMB_System30A = {
- &CAN_0_Config,
- 26, // uint8_t MBNumber //0..15
- MB_Tx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 8, // uint8_t DataBytes
- 0, // uint8_t InterruptEnable
- 0xFFFFFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x30A // ID
- };
- CAN_MAILBOX CAN_TxMB_Master0A = {
- &CAN_0_Config,
- 27, // uint8_t MBNumber //0..15
- MB_Tx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 8, // uint8_t DataBytes
- 0, // uint8_t InterruptEnable
- 0xFFFFFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x10A // ID
- };
- // ****** CAN_RxMB_Slave_0A_Master **************************************************
- CAN_MAILBOX CAN_RxMB_Slave_0A_Master = {
- &CAN_0_Config,
- 28, // uint8_t MBNumber //0..15
- MB_Rx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 8, // uint8_t DataBytes
- 0, // uint8_t Interrupt
- 0xFFFFFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x20A // ID
- };
- // Mailboxes for Programming serial Number
- // ****** CAN_RxMB_System308 **************************************************
- CAN_MAILBOX CAN_RxMB_System308 = {
- &CAN_0_Config,
- 29, // uint8_t MBNumber //0..15
- MB_Rx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 8, // uint8_t DataBytes
- 0, // uint8_t Interrupt
- 0xFFFFFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x308 // ID
- };
- // ****** CAN_RxMB_System309 **************************************************
- CAN_MAILBOX CAN_RxMB_System309 = {
- &CAN_0_Config,
- 30, // uint8_t MBNumber //0..15
- MB_Rx, // uint8_t Direction
- 0, // uint8_t RemoteEn
- 8, // uint8_t DataBytes
- 0, // uint8_t Interrupt
- 0xFFFFFFFF, // uint32_t AcceptMask
- SHORT_ID, // 11 Bit ID
- 0x309 // ID
- };
- // ***** CAN0_init *************************************************************
- uint16_t CAN0_init( void )
- {
- uint16_t ReturnVal = CAN_OK;
-
- if (CAN_Init(&CAN_0_Config) == CAN_OK)
- {
- // init Tx Message Boxes
- ReturnVal += CAN_Init_Mailbox(&CAN0_MB_MASTER0_BMS_100);
- ReturnVal += CAN_Init_Mailbox(&CAN0_MB_MASTER1_BMS_110);
- ReturnVal += CAN_Init_Mailbox(&CAN0_MB_MASTER2_BMS_120);
- ReturnVal += CAN_Init_Mailbox(&CAN0_MB_MASTER3_BMS_130);
- ReturnVal += CAN_Init_Mailbox(&CAN0_MB_MASTER4_BMS_140);
- ReturnVal += CAN_Init_Mailbox(&CAN0_MB_MASTER5_BMS_150);
- ReturnVal += CAN_Init_Mailbox(&CAN0_MB_MASTER6_BMS_160);
- ReturnVal += CAN_Init_Mailbox(&CAN0_MB_MASTER7_BMS_170);
- ReturnVal += CAN_Init_Mailbox(&CAN0_MB_MASTER8_BMS_180);
- ReturnVal += CAN_Init_Mailbox(&CAN0_MB_MASTER9_BMS_190);
- ReturnVal += CAN_Init_Mailbox(&CAN0_MB_MASTER10_BMS_1a0);
- ReturnVal += CAN_Init_Mailbox(&CAN0_MB_MASTER11_BMS_1b0);
- ReturnVal += CAN_Init_Mailbox(&CAN0_MB_MASTER12_BMS_1c0);
- ReturnVal += CAN_Init_Mailbox(&CAN0_MB_MASTER13_BMS_1d0);
- ReturnVal += CAN_Init_Mailbox(&CAN0_MB_MASTER14_BMS_1e0);
- ReturnVal += CAN_Init_Mailbox(&CAN0_MB_MASTER15_BMS_1f0);
-
-
- // init Rx Message Boxes
- ReturnVal += CAN_Init_Mailbox(&CAN_MB_SlaveX0_2X0 );
- ReturnVal += CAN_Init_Mailbox(&CAN_MB_SlaveX1_2X1 );
- ReturnVal += CAN_Init_Mailbox(&CAN_MB_SlaveX2_2X2 );
- ReturnVal += CAN_Init_Mailbox(&CAN_MB_SlaveX3_2X3 );
- ReturnVal += CAN_Init_Mailbox(&CAN_MB_SlaveX4_2X4 );
- ReturnVal += CAN_Init_Mailbox(&CAN_MB_SlaveX5_2X5 );
- ReturnVal += CAN_Init_Mailbox(&CAN_MB_SlaveX6_2X6 );
- ReturnVal += CAN_Init_Mailbox(&CAN_MB_SlaveX7_2X7 );
-
- // init tx mailboxes for automatic can id search
-
- CAN_Init_Mailbox(&CAN_TxMB_System300 );
- CAN_Init_Mailbox(&CAN_TxMB_System30A );
- CAN_Init_Mailbox(&CAN_TxMB_Master0A);
-
- // init rx mailboxes for automatic can id search
- CAN_Init_Mailbox(&CAN_RxMB_Slave_0A_Master );
- CAN_Init_Mailbox(&CAN_RxMB_System308 );
- CAN_Init_Mailbox(&CAN_RxMB_System309);
- }
- return ReturnVal;
- }
- uint16_t CAN0_init_telegrams(MASTER_X_BMS_TELEGRAM* telegram_ptr,uint8_t nrOfSlaves) {
- int i;
- if(nrOfSlaves > CAN0_MAX_NR_OF_SLAVES) {
- return FALSE;
- }
- for(i=0;i<nrOfSlaves;i++) {
- telegram_ptr->Values.MasterAlive=0;
- telegram_ptr->Values.SetMode=BMS_SLAVE_RUN ;
- telegram_ptr->Values.BalancingCell0_7=0;
- telegram_ptr->Values.BalancingCell8_15=0;
- telegram_ptr->Values.BalancingCell16_23=0;
- telegram_ptr++;
- }
- return TRUE;
- }
- uint16_t CAN0_rx_test() {
- SET_OUTPIN(PIN_REGNR_LED1); // set LED 1
-
- // check if Interrupt Flag 1 register is set, if true CAN Message has arrived
- if( CHECKBIT( CAN_0.IFRL.R, 16 )) {
- SETBIT( CAN_0.IFRL.R, 16); // Clear Interrupt Flag 1 register by writing '1'
- CAN_Rx_readout_Mailbox(&CAN_MB_SlaveX0_2X0,&Master_Rx0_buff[0]);
- CAN_ID_count[16]++;
- }
-
- if( CHECKBIT( CAN_0.IFRL.R, 17 )) {
- SETBIT( CAN_0.IFRL.R, 17); // Clear Interrupt Flag 1 register by writing '1'
- CAN_Rx_readout_Mailbox(&CAN_MB_SlaveX1_2X1,&Master_Rx1_buff[0]);
- CAN_ID_count[17]++;
- }
-
- if( CHECKBIT( CAN_0.IFRL.R, 18 )) {
- SETBIT( CAN_0.IFRL.R, 18); // Clear Interrupt Flag 1 register by writing '1'
- CAN_Rx_readout_Mailbox(&CAN_MB_SlaveX2_2X2,&Master_Rx2_buff[0]);
- CAN_ID_count[18]++;
- }
-
- if( CHECKBIT( CAN_0.IFRL.R, 19 )) {
- SETBIT( CAN_0.IFRL.R, 19); // Clear Interrupt Flag 1 register by writing '1'
- CAN_Rx_readout_Mailbox(&CAN_MB_SlaveX3_2X3,&Master_Rx3_buff[0]);
- CAN_ID_count[19]++;
- }
-
- if( CHECKBIT( CAN_0.IFRL.R, 20 )) {
- SETBIT( CAN_0.IFRL.R, 20); // Clear Interrupt Flag 1 register by writing '1'
- CAN_Rx_readout_Mailbox(&CAN_MB_SlaveX4_2X4,&Master_Rx4_buff[0]);
- CAN_ID_count[20]++;
- }
-
- if( CHECKBIT( CAN_0.IFRL.R, 21 )) {
- SETBIT( CAN_0.IFRL.R, 21); // Clear Interrupt Flag 1 register by writing '1'
- CAN_Rx_readout_Mailbox(&CAN_MB_SlaveX5_2X5,&Master_Rx5_buff[0]);
- CAN_ID_count[21]++;
- }
-
- if( CHECKBIT( CAN_0.IFRL.R, 22 )) {
- SETBIT( CAN_0.IFRL.R, 22); // Clear Interrupt Flag 1 register by writing '1'
- CAN_Rx_readout_Mailbox(&CAN_MB_SlaveX6_2X6,&Master_Rx6_buff[0]);
- CAN_ID_count[22]++;
- }
-
- if( CHECKBIT( CAN_0.IFRL.R, 23 )) {
- SETBIT( CAN_0.IFRL.R, 23); // Clear Interrupt Flag 1 register by writing '1'
- CAN_Rx_readout_Mailbox(&CAN_MB_SlaveX7_2X7,&Master_Rx7_buff[0]);
- CAN_ID_count[23]++;
- }
-
- CLEAR_OUTPIN(PIN_REGNR_LED1); //clear LED 1
- return CAN_OK;
-
- }
- uint16_t CAN0_tx_test(uint8_t slave_nr,uint8_t *four_byte_field) {
- int8_t ReturnResult;
- ReturnResult = CAN_Write(MB_Container[slave_nr], four_byte_field);
- return ReturnResult;
- }
- //// ***** CAN0_update ***********************************************************
- uint16_t CAN0_update( void ) {
- return 0;
- }
- // **** Check for recived Can Ids
- uint32_t CAN0_check_serial_nr_rec_Can_init(MASTER_CAN0_STRUCT_t*s ,uint8_t SlaveNr) {
-
- if( CHECKBIT( CAN_0.IFRL.R, 28 )) { // CAN_Rx_SlaveXA_Master
- SETBIT( CAN_0.IFRL.R, 28 ); // IFR clear
- CAN_Read( &CAN_RxMB_Slave_0A_Master, &(s->startupConfig.SlaveConfig[SlaveNr].SerialNr[0]) );
- return TRUE;
- }
- return FALSE;
-
- }
- // ***** CAN_Tx_System30A ********************************************************
- uint16_t CAN_Tx_System30A( uint8_t *pSERNr )
- {
- uint16_t ReturnResult = CAN_OK;
-
- ReturnResult = CAN_Write( &CAN_TxMB_System30A, pSERNr );
-
- return ReturnResult;
- }
- uint16_t CAN0_check_if_slave_rec(BMS_CAN0_SLAVE_t* Slave) {
- uint16_t recTelegrams=0; // number of received telegrams
- // ordenary Slave
- if(Slave->SlaveType==SLAVE) {
- // check if Interrupt Flag 1 register is set, if true CAN Message has arrived
- if( CHECKBIT( CAN_0.IFRL.R, 16 ) ) {
- SETBIT( CAN_0.IFRL.R, 16); // Clear Interrupt Flag 1 register by writing '1'
- CAN_Rx_readout_Mailbox(&CAN_MB_SlaveX0_2X0,&Master_Rx0_buff[0]);
- Slave->SlaveTelegramsRecFlag |= (1<<0) ; //set flag to indicate that telegram 0 has been received
- saveSlaveX0_Master_telegram(Slave);
- CAN_ID_count[16]++;
- recTelegrams++;
- }
-
- if( CHECKBIT( CAN_0.IFRL.R, 17 )) {
- SETBIT( CAN_0.IFRL.R, 17); // Clear Interrupt Flag 1 register by writing '1'
- CAN_Rx_readout_Mailbox(&CAN_MB_SlaveX1_2X1,&Master_Rx1_buff[0]);
- Slave->SlaveTelegramsRecFlag |= (1<<1) ; //set flag to indicate that telegram 1 has been received
- saveSlaveX1_Master_telegram(Slave);
- CAN_ID_count[17]++;
- recTelegrams++;
- }
-
- if( CHECKBIT( CAN_0.IFRL.R, 18 )) {
- SETBIT( CAN_0.IFRL.R, 18); // Clear Interrupt Flag 1 register by writing '1'
- CAN_Rx_readout_Mailbox(&CAN_MB_SlaveX2_2X2,&Master_Rx2_buff[0]);
- Slave->SlaveTelegramsRecFlag |= (1<<2) ; //set flag to indicate that telegram 2 has been received
- saveSlaveX2_Master_telegram(Slave);
- CAN_ID_count[18]++;
- recTelegrams++;
- }
-
- if( CHECKBIT( CAN_0.IFRL.R, 19 )) {
- SETBIT( CAN_0.IFRL.R, 19); // Clear Interrupt Flag 1 register by writing '1'
- CAN_Rx_readout_Mailbox(&CAN_MB_SlaveX3_2X3,&Master_Rx3_buff[0]);
- Slave->SlaveTelegramsRecFlag |= (1<<3) ; //set flag to indicate that telegram 3 has been received
- saveSlaveX3_Master_telegram(Slave);
- CAN_ID_count[19]++;
- recTelegrams++;
- }
-
- if( CHECKBIT( CAN_0.IFRL.R, 20 )) {
- SETBIT( CAN_0.IFRL.R, 20); // Clear Interrupt Flag 1 register by writing '1'
- CAN_Rx_readout_Mailbox(&CAN_MB_SlaveX4_2X4,&Master_Rx4_buff[0]);
- Slave->SlaveTelegramsRecFlag |= (1<<4) ; //set flag to indicate that telegram 4 has been received
- saveSlaveX4_Master_telegram(Slave);
- CAN_ID_count[20]++;
- recTelegrams++;
- }
-
- if( CHECKBIT( CAN_0.IFRL.R, 21 )) {
- SETBIT( CAN_0.IFRL.R, 21); // Clear Interrupt Flag 1 register by writing '1'
- CAN_Rx_readout_Mailbox(&CAN_MB_SlaveX5_2X5,&Master_Rx5_buff[0]);
- Slave->SlaveTelegramsRecFlag |= (1<<5) ; //set flag to indicate that telegram 5 has been received
- saveSlaveX5_Master_telegram(Slave);
- CAN_ID_count[21]++;
- recTelegrams++;
- }
-
- if( CHECKBIT( CAN_0.IFRL.R, 22 )) {
- SETBIT( CAN_0.IFRL.R, 22); // Clear Interrupt Flag 1 register by writing '1'
- CAN_Rx_readout_Mailbox(&CAN_MB_SlaveX6_2X6,&Master_Rx6_buff[0]);
- Slave->SlaveTelegramsRecFlag |= (1<<6) ; //set flag to indicate that telegram 6 has been received
- saveSlaveX6_Master_telegram(Slave);
- CAN_ID_count[22]++;
- recTelegrams++;
- }
-
- if( CHECKBIT( CAN_0.IFRL.R, 23 )) {
- SETBIT( CAN_0.IFRL.R, 23); // Clear Interrupt Flag 1 register by writing '1'
- CAN_Rx_readout_Mailbox(&CAN_MB_SlaveX7_2X7,&Master_Rx7_buff[0]);
- Slave->SlaveTelegramsRecFlag |= (1<<7) ; //set flag to indicate that telegram 7 has been received
- saveSlaveX7_Master_telegram(Slave);
- CAN_ID_count[23]++;
- recTelegrams++;
- }
- }
- return recTelegrams;
- }
- /*
- * use for reset of timeout error
- */
- uint16_t CAN0_clear_all_interrupt_flags() {
- SETBIT( CAN_0.IFRL.R, 16);
- SETBIT( CAN_0.IFRL.R, 17);
- SETBIT( CAN_0.IFRL.R, 18);
- SETBIT( CAN_0.IFRL.R, 19);
- SETBIT( CAN_0.IFRL.R, 20);
- SETBIT( CAN_0.IFRL.R, 21);
- SETBIT( CAN_0.IFRL.R, 22);
- SETBIT( CAN_0.IFRL.R, 23);
- return TRUE;
- }
- uint16_t CAN0_DEBUG_data_check_if_slave_rec(BMS_CAN0_SLAVE_t* Slave,BMS_CAN0_SLAVE_t* DummySlave) {
- uint16_t recTelegrams=0; // number of received telegrams
- // ordenary Slave
- if(Slave->SlaveType==SLAVE) {
- // check if Interrupt Flag 1 register is set, if true CAN Message has arrived
- if( CHECKBIT( CAN_0.IFRL.R, 16 ) ) {
- SETBIT( CAN_0.IFRL.R, 16); // Clear Interrupt Flag 1 register by writing '1'
- CAN_Rx_readout_Mailbox(&CAN_MB_SlaveX0_2X0,&Master_Rx0_buff[0]);
- gen_data_generate_CAN0_RX0_Telegram(DummySlave,(SLAVE_X0_5_BMS_TELEGRAM*)&Master_Rx0_buff[0]);
- DummySlave->SlaveAliveCnt[0]++;
- if(DummySlave->SlaveAliveCnt[0]>7){
- DummySlave->SlaveAliveCnt[0]=0;
- }
- Slave->SlaveTelegramsRecFlag |= (1<<0) ; //set flag to indicate that telegram 0 has been received
- saveSlaveX0_Master_telegram(Slave);
- CAN_ID_count[16]++;
- recTelegrams++;
- }
-
- if( CHECKBIT( CAN_0.IFRL.R, 17 )) {
- SETBIT( CAN_0.IFRL.R, 17); // Clear Interrupt Flag 1 register by writing '1'
- CAN_Rx_readout_Mailbox(&CAN_MB_SlaveX1_2X1,&Master_Rx1_buff[0]);
- gen_data_generate_CAN0_RX1_Telegram(DummySlave,(SLAVE_X0_5_BMS_TELEGRAM*)&Master_Rx1_buff[0]);
- DummySlave->SlaveAliveCnt[1]++;
- if(DummySlave->SlaveAliveCnt[1]>7){
- DummySlave->SlaveAliveCnt[1]=0;
- }
- Slave->SlaveTelegramsRecFlag |= (1<<1) ; //set flag to indicate that telegram 1 has been received
- saveSlaveX1_Master_telegram(Slave);
- CAN_ID_count[17]++;
- recTelegrams++;
- }
-
- if( CHECKBIT( CAN_0.IFRL.R, 18 )) {
- SETBIT( CAN_0.IFRL.R, 18); // Clear Interrupt Flag 1 register by writing '1'
- CAN_Rx_readout_Mailbox(&CAN_MB_SlaveX2_2X2,&Master_Rx2_buff[0]);
- gen_data_generate_CAN0_RX2_Telegram(DummySlave,(SLAVE_X0_5_BMS_TELEGRAM*)&Master_Rx2_buff[0]);
- DummySlave->SlaveAliveCnt[2]++;
- if(DummySlave->SlaveAliveCnt[2]>7){
- DummySlave->SlaveAliveCnt[2]=0;
- }
- Slave->SlaveTelegramsRecFlag |= (1<<2) ; //set flag to indicate that telegram 2 has been received
- saveSlaveX2_Master_telegram(Slave);
- CAN_ID_count[18]++;
- recTelegrams++;
- }
-
- if( CHECKBIT( CAN_0.IFRL.R, 19 )) {
- SETBIT( CAN_0.IFRL.R, 19); // Clear Interrupt Flag 1 register by writing '1'
- CAN_Rx_readout_Mailbox(&CAN_MB_SlaveX3_2X3,&Master_Rx3_buff[0]);
- gen_data_generate_CAN0_RX3_Telegram(DummySlave,(SLAVE_X0_5_BMS_TELEGRAM*)&Master_Rx3_buff[0]);
- DummySlave->SlaveAliveCnt[3]++;
- if(DummySlave->SlaveAliveCnt[3]>7){
- DummySlave->SlaveAliveCnt[3]=0;
- }
- Slave->SlaveTelegramsRecFlag |= (1<<3) ; //set flag to indicate that telegram 3 has been received
- saveSlaveX3_Master_telegram(Slave);
- CAN_ID_count[19]++;
- recTelegrams++;
- }
-
- if( CHECKBIT( CAN_0.IFRL.R, 20 )) {
- SETBIT( CAN_0.IFRL.R, 20); // Clear Interrupt Flag 1 register by writing '1'
- CAN_Rx_readout_Mailbox(&CAN_MB_SlaveX4_2X4,&Master_Rx4_buff[0]);
- gen_data_generate_CAN0_RX4_Telegram(DummySlave,(SLAVE_X0_5_BMS_TELEGRAM*)&Master_Rx4_buff[0]);
- DummySlave->SlaveAliveCnt[4]++;
- if(DummySlave->SlaveAliveCnt[4]>7){
- DummySlave->SlaveAliveCnt[4]=0;
- }
- Slave->SlaveTelegramsRecFlag |= (1<<4) ; //set flag to indicate that telegram 4 has been received
- saveSlaveX4_Master_telegram(Slave);
- CAN_ID_count[20]++;
- recTelegrams++;
- }
-
- if( CHECKBIT( CAN_0.IFRL.R, 21 )) {
- SETBIT( CAN_0.IFRL.R, 21); // Clear Interrupt Flag 1 register by writing '1'
- CAN_Rx_readout_Mailbox(&CAN_MB_SlaveX5_2X5,&Master_Rx5_buff[0]);
- gen_data_generate_CAN0_RX5_Telegram(DummySlave,(SLAVE_X0_5_BMS_TELEGRAM*)&Master_Rx5_buff[0]);
- DummySlave->SlaveAliveCnt[5]++;
- if(DummySlave->SlaveAliveCnt[5]>7){
- DummySlave->SlaveAliveCnt[5]=0;
- }
- Slave->SlaveTelegramsRecFlag |= (1<<5) ; //set flag to indicate that telegram 5 has been received
- saveSlaveX5_Master_telegram(Slave);
- CAN_ID_count[21]++;
- recTelegrams++;
- }
-
- if( CHECKBIT( CAN_0.IFRL.R, 22 )) {
- SETBIT( CAN_0.IFRL.R, 22); // Clear Interrupt Flag 1 register by writing '1'
- CAN_Rx_readout_Mailbox(&CAN_MB_SlaveX6_2X6,&Master_Rx6_buff[0]);
- gen_data_generate_CAN0_RX6_Telegram(DummySlave,(SLAVE_X6_BMS_TELEGRAM*)&Master_Rx6_buff[0]);
- DummySlave->SlaveAliveCnt[6]++;
- if(DummySlave->SlaveAliveCnt[6]>7){
- DummySlave->SlaveAliveCnt[6]=0;
- }
- Slave->SlaveTelegramsRecFlag |= (1<<6) ; //set flag to indicate that telegram 6 has been received
- saveSlaveX6_Master_telegram(Slave);
- CAN_ID_count[22]++;
- recTelegrams++;
- }
-
- if( CHECKBIT( CAN_0.IFRL.R, 23 )) {
- SETBIT( CAN_0.IFRL.R, 23); // Clear Interrupt Flag 1 register by writing '1'
- CAN_Rx_readout_Mailbox(&CAN_MB_SlaveX7_2X7,&Master_Rx7_buff[0]);
- gen_data_generate_CAN0_RX7_Telegram(DummySlave,(SLAVE_X7_BMS_TELEGRAM*)&Master_Rx7_buff[0]);
- DummySlave->SlaveAliveCnt[7]++;
- if(DummySlave->SlaveAliveCnt[7]>7){
- DummySlave->SlaveAliveCnt[7]=0;
- }
- Slave->SlaveTelegramsRecFlag |= (1<<7) ; //set flag to indicate that telegram 7 has been received
- saveSlaveX7_Master_telegram(Slave);
- CAN_ID_count[23]++;
- recTelegrams++;
- }
- }
- return recTelegrams;
- }
- uint16_t CAN0_DEBUG_slave_check_if_slave_rec(BMS_CAN0_SLAVE_t* Slave,BMS_CAN0_SLAVE_t* DummySlave) {
- // just copy data from dummy slave
- uint8_t i;
- for(i=0;i<CAN0_MAX_NR_OF_SLAVES-1;i++) {
- Slave->CellTemp[i]=DummySlave->CellTemp[i];
- Slave->CellVoltage[i]=DummySlave->CellVoltage[i];
- }
- Slave->HeatSinkTemp=DummySlave->HeatSinkTemp;
- Slave->SlaveError=DummySlave->SlaveError;
- Slave->SlaveMode=DummySlave->SlaveMode;
- Slave->SlaveTelegramsRecFlag=CAN0_ALL_TELEGRAMS_REC;
-
-
- }
- uint8_t CAN0_check_if_UI_Board_rec(BMS_CAN0_SLAVE_t* Slave,BMS_CAN0_UI_t* UI_Board) {
- uint8_t recTelegrams=0;
- if( CHECKBIT( CAN_0.IFRL.R, 23 )) {
- SETBIT( CAN_0.IFRL.R, 23); // Clear Interrupt Flag 1 register by writing '1'
- CAN_Rx_readout_Mailbox(&CAN_MB_SlaveX7_2X7,&Master_Rx7_buff[0]);
- Slave->SlaveTelegramsRecFlag |= (1<<7) ; //set flag to indicate that telegram 7 has been received
- saveSlaveUI_Master_telegram(Slave,UI_Board);
- CAN_ID_count[23]++;
- recTelegrams++;
- return TRUE;
- }
- return FALSE;
- }
- uint8_t CAN0_DEBUG_data_check_if_UI_Board_rec(BMS_CAN0_SLAVE_t* Slave,BMS_CAN0_SLAVE_t* DummySlave,BMS_CAN0_UI_t* UI_Board,BMS_CAN0_UI_t* Dummy_UI_Board) {
- uint8_t recTelegrams=0;
- if( CHECKBIT( CAN_0.IFRL.R, 23 )) {
- SETBIT( CAN_0.IFRL.R, 23); // Clear Interrupt Flag 1 register by writing '1'
- CAN_Rx_readout_Mailbox(&CAN_MB_SlaveX7_2X7,&Master_Rx7_buff[0]);
- gen_data_generate_CAN0_UI_Telegram(DummySlave,Dummy_UI_Board,(SLAVE_UI_BMS_TELEGRAM*)&Master_Rx7_buff[0]);
- Slave->SlaveTelegramsRecFlag |= (1<<7) ; //set flag to indicate that telegram 7 has been received
- saveSlaveUI_Master_telegram(Slave,UI_Board);
- CAN_ID_count[23]++;
- recTelegrams++;
- return TRUE;
- }
- }
- uint8_t CAN0_DEBUG_slave_check_if_UI_Board_rec(BMS_CAN0_SLAVE_t* Slave,BMS_CAN0_SLAVE_t* DummySlave,BMS_CAN0_UI_t* UI_Board,BMS_CAN0_UI_t* Dummy_UI_Board) {
- uint8_t recTelegrams=0;
- UI_Board->Ibatt=Dummy_UI_Board->Ibatt;
- UI_Board->Ubatt=Dummy_UI_Board->Ubatt;
- UI_Board->Checksum=Dummy_UI_Board->Checksum;
- return TRUE;
- }
- uint16_t saveSlaveX0_Master_telegram(BMS_CAN0_SLAVE_t* Slave){
- SLAVE_X0_5_BMS_TELEGRAM* tel_ptr= (SLAVE_X0_5_BMS_TELEGRAM*)&Master_Rx0_buff[0];
- Slave->SlaveAliveCnt[0]=(uint8_t)(tel_ptr->SlaveAlive);
- Slave->CellVoltage[0]=(tel_ptr->Vcell0);
- Slave->CellVoltage[1]=tel_ptr->Vcell1;
- Slave->CellVoltage[2]=tel_ptr->Vcell2;
- Slave->CellVoltage[3]=tel_ptr->Vcell3;
- return TRUE;
- }
- uint16_t saveSlaveX1_Master_telegram(BMS_CAN0_SLAVE_t* Slave){
- SLAVE_X0_5_BMS_TELEGRAM* tel_ptr= (SLAVE_X0_5_BMS_TELEGRAM*)&Master_Rx1_buff[0];
- Slave->SlaveAliveCnt[1]=(uint8_t)(tel_ptr->SlaveAlive);
- Slave->CellVoltage[4]=(tel_ptr->Vcell0);
- Slave->CellVoltage[5]=tel_ptr->Vcell1;
- Slave->CellVoltage[6]=tel_ptr->Vcell2;
- Slave->CellVoltage[7]=tel_ptr->Vcell3;
- return TRUE;
- }
- uint16_t saveSlaveX2_Master_telegram(BMS_CAN0_SLAVE_t* Slave){
- SLAVE_X0_5_BMS_TELEGRAM* tel_ptr= (SLAVE_X0_5_BMS_TELEGRAM*)&Master_Rx2_buff[0];
- Slave->SlaveAliveCnt[2]=(uint8_t)(tel_ptr->SlaveAlive);
- Slave->CellVoltage[8]=(tel_ptr->Vcell0);
- Slave->CellVoltage[9]=tel_ptr->Vcell1;
- Slave->CellVoltage[10]=tel_ptr->Vcell2;
- Slave->CellVoltage[11]=tel_ptr->Vcell3;
- return TRUE;
- }
- uint16_t saveSlaveX3_Master_telegram(BMS_CAN0_SLAVE_t* Slave){
- SLAVE_X0_5_BMS_TELEGRAM* tel_ptr= (SLAVE_X0_5_BMS_TELEGRAM*)&Master_Rx3_buff[0];
- Slave->SlaveAliveCnt[3]=(uint8_t)(tel_ptr->SlaveAlive);
- Slave->CellVoltage[12]=(tel_ptr->Vcell0);
- Slave->CellVoltage[13]=tel_ptr->Vcell1;
- Slave->CellVoltage[14]=tel_ptr->Vcell2;
- Slave->CellVoltage[15]=tel_ptr->Vcell3;
- return TRUE;
- }
- uint16_t saveSlaveX4_Master_telegram(BMS_CAN0_SLAVE_t* Slave){
- SLAVE_X0_5_BMS_TELEGRAM* tel_ptr= (SLAVE_X0_5_BMS_TELEGRAM*)&Master_Rx4_buff[0];
- Slave->SlaveAliveCnt[4]=(uint8_t)(tel_ptr->SlaveAlive);
- Slave->CellVoltage[16]=(tel_ptr->Vcell0);
- Slave->CellVoltage[17]=tel_ptr->Vcell1;
- Slave->CellVoltage[18]=tel_ptr->Vcell2;
- Slave->CellVoltage[19]=tel_ptr->Vcell3;
- return TRUE;
- }
- uint16_t saveSlaveX5_Master_telegram(BMS_CAN0_SLAVE_t* Slave){
- SLAVE_X0_5_BMS_TELEGRAM* tel_ptr= (SLAVE_X0_5_BMS_TELEGRAM*)&Master_Rx5_buff[0];
- Slave->SlaveAliveCnt[5]=(uint8_t)(tel_ptr->SlaveAlive);
- Slave->CellVoltage[20]=(tel_ptr->Vcell0);
- Slave->CellVoltage[21]=tel_ptr->Vcell1;
- Slave->CellVoltage[22]=tel_ptr->Vcell2;
- Slave->CellVoltage[23]=tel_ptr->Vcell3;
- return TRUE;
- }
- uint16_t saveSlaveX6_Master_telegram(BMS_CAN0_SLAVE_t* Slave){
- SLAVE_X6_BMS_TELEGRAM* tel_ptr= (SLAVE_X6_BMS_TELEGRAM*)&Master_Rx6_buff[0];
- Slave->SlaveAliveCnt[6]=(uint8_t)(tel_ptr->SlaveAlive);
- Slave->SlaveMode=tel_ptr->SlaveMode;
- Slave->SlaveError=tel_ptr->SlaveError;
- return TRUE;
- }
- uint16_t saveSlaveX7_Master_telegram(BMS_CAN0_SLAVE_t* Slave){
- SLAVE_X7_BMS_TELEGRAM* tel_ptr= (SLAVE_X7_BMS_TELEGRAM*)&Master_Rx7_buff[0];
- uint8_t MuxCounter = tel_ptr->MuxCounter;
- Slave->SlaveAliveCnt[7]=(uint8_t)(tel_ptr->SlaveAlive);
- Slave->HeatSinkTemp=tel_ptr->TempHeatSink;
- Slave->CellTemp[MuxCounter*4+0]=tel_ptr->TempSens0;
- Slave->CellTemp[MuxCounter*4+1]=tel_ptr->TempSens1;
- Slave->CellTemp[MuxCounter*4+2]=tel_ptr->TempSens2;
- Slave->CellTemp[MuxCounter*4+3]=tel_ptr->TempSens3;
- return TRUE;
- }
- uint16_t saveSlaveUI_Master_telegram(BMS_CAN0_SLAVE_t* Slave,BMS_CAN0_UI_t* UI_Board){
- Slave->SlaveAliveCnt[0]=Master_Rx7_buff[0] >> 5;
- Slave->SlaveMode=Master_Rx7_buff[0] & 0x1F;
- UI_Board->Ubatt=(Master_Rx7_buff[1] << 8 )+ Master_Rx7_buff[2];
- UI_Board->Ibatt=(Master_Rx7_buff[3] << 8 )+ Master_Rx7_buff[4];
- UI_Board->Errors.OffsetError=(Master_Rx7_buff[5] & 0x01 );
- UI_Board->Errors.SupplyError=((Master_Rx7_buff[5] & 0x02 )>> 1);
- UI_Board->Errors.RelayOpen=((Master_Rx7_buff[5] & 0x04 )>> 2);
- UI_Board->Checksum=Master_Rx7_buff[7];
- return TRUE;
- }
- // ***** End BMS_CAN0_Mail_Box.c ***********************************************
|