Go to the documentation of this file.
29 #ifndef INC_CINOSCOPMASTER_H
30 #define INC_CINOSCOPMASTER_H
38 #define DF_COP_CMD_READ 0x80003000
39 #define DF_COP_CMD_WRITE 0x80007000
42 #define DF_COP_BLINK_JOB0 0x80005FFC
43 #define DF_COP_BLINK_JOB1 0x00010192
44 // port communication job
45 #define DF_COP_PORTCOMM_JOB0 0x80003F00
46 #define DF_COP_PORTCOMM_JOB1 0x00010000
49 #define DF_COP_EEPROM_CMD 0x10000000
50 #define DF_COP_EEPROM_CMD_READ 0x11000000
51 #define DF_COP_EEPROM_CMD_WRITE 0x12000000
52 #define DF_COP_CMD_MASK 0x0F000000
55 #define DF_COP_SPI_CMD 0x30000000
56 #define DF_COP_SPI_CMD_COMM 0x31000000
58 #define DF_COP_INTERNAL_ADDRESS 8
60 #define DF_COP_MASTER_ADDRESS 9
64 #define ER_COP_CONFIG_MISMATCH 0x00000001
67 #define DF_COP_MOD_XDB "xcfg-mod-cop"
77 #include <cincocopdevice.h>
90 #define DPR_OFFSET(aMember) inos_offsetof(SINOSCOPMaster, aMember)
91 #define DPR_MAX_OFFSET(aMember) (inos_offsetof(SINOSCOPMaster, aMember) + sizeofm(SINOSCOPMaster, aMember))
93 #define DPR_OFFSET8K(aMember) inos_offsetof(SINOSCOPMaster8K, aMember)
95 #define DPR_MAX_OFFSET8K(aMember) (inos_offsetof(SINOSCOPMaster8K, aMember) + sizeofm(SINOSCOPMaster8K, aMember))
120 uint16 m_uGlTlgCounter;
163 uint16 m_uGlTlgCounter;
263 eEepromRead = (1<<0),
264 eEepromWrite = (1<<1),
280 eAll = (eEepromRead | eEepromWrite | eSpiRead | eSpiWrite)
295 void BusScan(XMLNode aConfigNode);
300 void SeqStart(uint32 auCycleTimeNs, uint32 auSyncPage=0,
bool abSoftSync =
false);
304 void SeqWatchdog(uint32 auBusControl, int16 aiCycleAdjust);
344 return m_pDevice->GetDprAddress(auDprOffset);
359 uint32 auBufferSize);
372 friend class CGINModuleActive;
373 friend class CINOSMcTargetFieldbusMasterCopBus;
409 return m_uSeqTableSize;
433 uint32 auAddress, uint32 auAppRev, uint32 auProductCode);
447 m_uOptionalFeatures = auFeatures;
454 m_uOptionalFeatures |= auFeature;
460 return (m_uOptionalFeatures & aeFeature);
465 return (m_uOptionalFeatures & eParasite);
470 return (m_uOptionalFeatures & eChief);
479 void uSleep(uint32 auMicroseconds);
482 static const char* GetXmlFile(
const char* apcProductCode);
494 uint32 auType, uint32 auAddress, XMLNode aParentNode, XMLNode& axDestNode);
502 static XMLNode GetSystemModuleConfig(
const char* apcProductCode,
503 uint8 auType,
bool abConfigLib);
506 void StartReadModuleEeprom(uint32 auNumber, uint32 auSize);
513 bool ReadModuleSpi(uint32 auNumber, uint32 auAddress, uint32 auCount,
514 uint8* apBuffer, uint32 auBufferSize);
524 void StartModuleSpiComm(uint32 auNumber, uint32 auAddress, uint32 auSize,
525 uint32 auCommand, uint32 auCmdSize,
bool abRound);
534 bool WriteModuleSpi(uint32 auNumber, uint32 auAddress, uint32 auCount,
541 uint32 SpiGetFlashStatus(uint32 auNumber);
547 bool SpiEnableWrite(uint32 auNumber);
553 bool SpiUnlock(uint32 auNumber);
559 bool SpiLock(uint32 auNumber);
565 bool SpiWaitForCompletion(uint32 auNumber);
572 bool SpiDoEraseSectorAt(uint32 auNumber, uint32 auSectorAddress);
575 void StopModuleSpiAccess();
577 void GetSpiData(uint8* apBuffer, uint32 auBufferSize);
579 void PutSpiData(uint8* apBuffer, uint32 auBufferSize);
585 void SetSupportedModules(
const char* apModules)
588 inos_strncpy(m_cSupportedModules, apModules,
sizeof(m_cSupportedModules));
594 CINCOCOPDevice* m_pDevice;
598 uint32 m_uSeqTable[1024];
600 uint32 m_uSeqTableSize;
604 volatile uint32* m_pWatchdog;
608 uint32 m_uOptionalFeatures;
612 eFlgForceMainIrq = 0x00000001,
613 eFlgTableValid = 0x00000002,
619 class CINOSSharedMemoryCopBus* m_pShared = 0;
620 uint8* m_pScanData = 0;
621 uint32 m_uScanDataIndex = 0;
625 char m_cSupportedModules[256] = {0};
634 #endif // INC_CINOSCOPMASTER_H
uint16 m_uGlTlgTime
GinLink Tlg-Cnt / Tlg-Time // 0x0310.
Definition: cinoscopmaster.h:162
bool IsParasite() const
Definition: cinoscopmaster.h:464
uint32 m_uReserved1
reserved // 0x0314
Definition: cinoscopmaster.h:122
uint32 * GetSeqTable()
Get pointer to sequence backup table.
Definition: cinoscopmaster.h:402
XMLNode m_xCard
The parsed xml file.
Definition: cinoscopmaster.h:215
uint8 m_uReceiveData0[0x200]
receive data 0 // 0x0C00
Definition: cinoscopmaster.h:138
uint8 m_uMisc2[0x300-0x1C0-4]
misc
Definition: cinoscopmaster.h:154
bool IsChief() const
Definition: cinoscopmaster.h:469
const char * m_pModXml
Module's xml file.
Definition: cinoscopmaster.h:223
bool m_bEeprom
Flag if the module's eeprom is valid.
Definition: cinoscopmaster.h:207
uint32 GetError()
Get errors of cop bus master.
Definition: cinoscopmaster.h:385
void SeqEnableIrq()
enable irq
const char * m_pModName
The module name from the xml file or eeprom.
Definition: cinoscopmaster.h:203
uint8 m_uTransData[0x200-4 *4]
trans data // 0x0A00
Definition: cinoscopmaster.h:132
bool WriteModuleEeprom(uint32 auNumber, SINOSCOPModuleEeprom &aEeprom, uint32 auSize)
Write a module's eeprom.
SINOSCOPSubroutine * m_pNext
Pointer to next subroutine.
Definition: cinoscopmaster.h:242
uint32 m_uCmdDesc
command desc // 0x0318
Definition: cinoscopmaster.h:167
uint32 m_uRevision
revision // 0x01C0
Definition: cinoscopmaster.h:109
bool IsModuleOnline()
Return online state of device's bus module.
uint32 m_uBlinkJob[2]
blink job // 0x0320
Definition: cinoscopmaster.h:171
uint32 m_uCycleTimer
cycle timer // 0x0300
Definition: cinoscopmaster.h:156
bool m_bNameUnique
Flag if the module name is unique (no need to add address)
Definition: cinoscopmaster.h:221
bool WriteModuleSpiData(uint32 auNumber, uint32 auCount, uint8 *apBuffer)
Write some data into a module's spi flash (fixed memory address).
void SeqClear()
clear sequencer table
bool IsOptionalFeatureEnabled(EOptionalFeatures aeFeature) const
Definition: cinoscopmaster.h:459
uint32 m_uCmdJob
eeprom/jtag/spi // 0x031C
Definition: cinoscopmaster.h:169
uint32 m_uRevision
revision // 0x01C0
Definition: cinoscopmaster.h:152
CINOSCOPModule * GetModule(uint32 auAddress)
Get module by address.
bool m_bOnline
Flag if the module is online (scanned) or not.
Definition: cinoscopmaster.h:219
uint32 m_uId
Subroutine id.
Definition: cinoscopmaster.h:236
uint32 m_uPortCommRead[2]
port communication 'read' part // 0x0BF0
Definition: cinoscopmaster.h:134
bool HasModuleType(const char *apType)
Return true if copbus has a module of the given type.
uint8 m_uMasterTable[(0x800-0x328)]
busmaster table // 0x0328
Definition: cinoscopmaster.h:173
bool ReadModuleEeprom(uint32 auNumber, SINOSCOPModuleEeprom &aEeprom, uint32 auSize)
Complete sequence to read a module's eeprom.
uint32 m_uPortCommWrite[2]
port communication 'write' part // 0x0DF8
Definition: cinoscopmaster.h:179
uint8 m_uMasterTable[(0xA00-0x320) -2 *4]
busmaster table // 0x0328
Definition: cinoscopmaster.h:130
DECLARE_DYNAMIC(SINOSCOPMaster)
Support dynamic object handling.
uint32 GetCycleTimer() const
uint8 m_uMisc2[0x300-0x1C0-4]
misc
Definition: cinoscopmaster.h:111
CINOSCOPModule * GetNext()
module pointer to next cop module
Definition: cinoscopmodule.h:293
uint16 m_uAppRev
The application revision as read from the module.
Definition: cinoscopmaster.h:201
uint32 m_uProductCode
The product code from the eeprom or xml file.
Definition: cinoscopmaster.h:211
bool CheckRangeCondition(const char *apModule, CINOSBusPortHandlerRangeCondition *apCond)
Check if the condition of a range is met.
uint32 SeqGetTime(uint32 uSubCycle=0)
get table length [ns]
void ToggleWatchdog()
toggle watchdog (only on active master)
uint32 m_uCycleCount
cycle counter // 0x030C
Definition: cinoscopmaster.h:117
uint8 m_uMisc1[0x1C0]
misc
Definition: cinoscopmaster.h:107
SINOSCOPModuleEeprom m_Eeprom
The content of the module's eeprom.
Definition: cinoscopmaster.h:209
void CreateModules(XMLNode aConfigNode)
Create modules with given xml config file.
uint8 m_uReceiveInco0[0x200]
Receive data 0 for inco. // 0x8600.
Definition: cinoscopmaster.h:187
uint8 m_uReceiveData1[0x200]
receive data 1 // 0x0E00
Definition: cinoscopmaster.h:140
CINCOCOPDevice * GetDevice()
get pointer to cop device
Definition: cinoscopmaster.h:347
uint32 m_uReserved1
reserved // 0x0314
Definition: cinoscopmaster.h:165
CINOSCOPModule * GetFirst()
get first module
Definition: cinoscopmaster.h:319
uint32 m_uCode[eMaxCode]
Subroutine code (max. 1kB).
Definition: cinoscopmaster.h:240
CINOSCOPModule * GetNext(CINOSCOPModule *apModule)
get next module
Definition: cinoscopmaster.h:323
uint32 m_uCycleTimer
cycle timer // 0x0300
Definition: cinoscopmaster.h:113
uint32 m_uEepromSize
Eeprom size.
Definition: cinoscopmaster.h:213
EOptionalFeatures
Definition: cinoscopmaster.h:260
uint32 m_uCmdJob
eeprom/jtag/spi // 0x031C
Definition: cinoscopmaster.h:126
uint8 m_uReceiveData0[0x600]
receive data 0 // 0x8000
Definition: cinoscopmaster.h:185
uint32 m_uPortCommRead[2]
port communication // 0x0DF0
Definition: cinoscopmaster.h:177
COP bus subroutines.
Definition: cinoscopmaster.h:230
void BusScan(XMLNode aConfigNode)
scan bus
CINOSCOPMaster(CINCOCOPDevice *apDevice, bool abCopPas=false)
Constructor.
uint16 m_uGlTlgTime
GinLink Tlg-Cnt / Tlg-Time // 0x0310.
Definition: cinoscopmaster.h:119
uint32 m_uPortCommWrite[2]
port communication 'write' part // 0x0BF8
Definition: cinoscopmaster.h:136
void SeqWatchdog(uint32 auBusControl, int16 aiCycleAdjust)
handle watchdog (only on active master)
uint8 m_uMisc1[0x1C0]
misc
Definition: cinoscopmaster.h:150
bool m_bCreateModule
Flag if the module should be created in the software.
Definition: cinoscopmaster.h:217
void SeqStop()
stop sequencer
uint32 m_uCmdDesc
command desc // 0x0318
Definition: cinoscopmaster.h:124
The class handling a single COP module.
Definition: cinoscopmodule.h:215
uint8 m_uReserved2[0x7000]
reserved
Definition: cinoscopmaster.h:183
bool m_bModXmlValid
Flag if the module's xml file is valid.
Definition: cinoscopmaster.h:205
uint8 m_uReceiveInco1[0x200]
Receive data 1 for inco. // 0x8E00.
Definition: cinoscopmaster.h:191
uint8 m_uTransData[0x600-4 *4]
trans data // 0x0800
Definition: cinoscopmaster.h:175
void SetOptionalFeatures(uint32 auFeatures)
Definition: cinoscopmaster.h:446
Struct of the eeprom data of a COP module.
Definition: cinoscopmodule.h:173
uint32 m_uBlinkJob[2]
blink job // 0x0320
Definition: cinoscopmaster.h:128
uint32 GetSeqTableSize()
Get size of sequence table in uint32 units.
Definition: cinoscopmaster.h:408
The main class handling a COP bus, local or remote (GinLink passive).
Definition: cinoscopmaster.h:250
uint32 m_uIndex
Subroutine index.
Definition: cinoscopmaster.h:238
void BusStartup()
call startup actions of all modules
uint32 m_uReserved[2]
reserved
Definition: cinoscopmaster.h:115
EXmlError
Errors that can occur while handling xml data.
Definition: inos_xml.h:586
Struct to hold info about scanned or configured modules.
Definition: cinoscopmaster.h:199
void SeqStart(uint32 auCycleTimeNs, uint32 auSyncPage=0, bool abSoftSync=false)
start sequencer
void SeqWrite(uint32 *apTable, bool abForceIrq=false, SINOSCOPSubroutine *apSubChain=0)
write sequencer table
bool ReadModuleSpiData(uint32 auNumber, uint32 auCount, uint8 *apBuffer, uint32 auBufferSize)
Read some data from a module's spi flash (fixed memory address).
#define DECLARE_DYNAMIC(aClass)
Definition: cinospartitionmemory.h:328
CINOSCOPModule * CreateModule(XMLNode xCard, const char *apModName, uint32 auAddress, uint32 auAppRev, uint32 auProductCode)
Create a module with the given information.
COP layout for master with an 8K area.
Definition: cinoscopmaster.h:147
DECLARE_DYNAMIC(SINOSCOPMaster8K)
Support dynamic object handling.
virtual ~CINOSCOPMaster()
Destructor.
uint8 m_uReceiveData1[0x600]
receive data 1 // 0x8800
Definition: cinoscopmaster.h:189
uint32 m_uReserved[2]
reserved
Definition: cinoscopmaster.h:158
void * GetDprAddress(uint16 auDprOffset)
get dpr address
Definition: cinoscopmaster.h:343
uint32 m_uCycleCount
cycle counter // 0x030C
Definition: cinoscopmaster.h:160
DECLARE_DYNAMIC(SINOSCOPScanMod)
Support dynamic object handling.
COP layout for master with a small area.
Definition: cinoscopmaster.h:104
uint8 m_uTransInco[0x200]
Transmit data for inco. // 0x0E00.
Definition: cinoscopmaster.h:181
void AddOptionalFeatures(uint32 auFeature)
Definition: cinoscopmaster.h:453