#include "logger.h" #define T32LOGGERDATA_IFLAG_ARM 0x00000001 #define T32LOGGERDATA_IFLAG_STACK 0x00000100 #define T32LOGGERDATA_OFLAG_OVERFLOW 0x00000001 #define T32LOGGERDATA_OFLAG_TRIGGER 0x00000100 #define T32LOGGERDATA_OFLAG_BREAK 0x00000200 T32_LoggerStruct_t T32_LoggerStruct; void T32_TimerInit() { // TODO: add here timer initialization } unsigned long long T32_TimerGet() { return 0; // TODO: return timestamp here } void T32_LoggerInit() { T32_LoggerStruct.ptr = T32_LoggerStruct.buffer; T32_LoggerStruct.size = T32_LOGGER_SIZE; T32_LoggerStruct.tindex = -1; // -1: trigger not set T32_LoggerStruct.iflags = 0; T32_LoggerStruct.oflags = 0; T32_LoggerStruct.reserved1 = 0; T32_LoggerStruct.reserved2 = 0; T32_TimerInit(); } void T32_LoggerData(int cycletype, void* address, unsigned long data) { int nIndex; unsigned long long nTimer; if (!(T32_LoggerStruct.iflags & T32LOGGERDATA_IFLAG_ARM)) return; if (T32_LoggerStruct.index >= T32_LoggerStruct.size) { if (T32_LoggerStruct.iflags & T32LOGGERDATA_IFLAG_STACK) return; T32_LoggerStruct.oflags |= T32LOGGERDATA_OFLAG_OVERFLOW; T32_LoggerStruct.index = 0; } nIndex = T32_LoggerStruct.index++; nTimer = T32_TimerGet(); T32_LoggerStruct.ptr[nIndex].tslow = (unsigned long)(nTimer & 0xffffffff); T32_LoggerStruct.ptr[nIndex].tshigh = (cycletype << 16)|((unsigned long)(nTimer>>32)&0x0000ffff); T32_LoggerStruct.ptr[nIndex].address = (unsigned long) address; T32_LoggerStruct.ptr[nIndex].data = data; T32_LoggerStruct.index = nIndex + 1; } void T32_LoggerDataFast(int cycletype, void* address, unsigned long data) { int nIndex = (T32_LoggerStruct.index++ & (T32_LOGGER_SIZE-1)); T32_LoggerStruct.ptr[nIndex].tshigh = cycletype << 16; T32_LoggerStruct.ptr[nIndex].address = (unsigned long) address; T32_LoggerStruct.ptr[nIndex].data = data; } void T32_LoggerTrigger() { if (T32_LoggerStruct.oflags & T32LOGGERDATA_OFLAG_TRIGGER) return; T32_LoggerStruct.tindex = T32_LoggerStruct.index; T32_LoggerStruct.oflags |= T32LOGGERDATA_OFLAG_TRIGGER; }