#ifdef __TURBOC__ #if (__TURBOC__ < 0x0300) #define inpw inport #define outpw outport #endif #endif //////////////////////////////////// // CAN Chip Interrupt Status // //////////////////////////////////// #define RECEIVE_INTT 0x01 #define TRANSMIT_INTT 0x02 #define ERROR_WARNNING_INTT 0x04 #define DATA_OVERRUN_INTT 0x08 #define WAKE_UP_INTT 0x10 #define ERROR_PASSIVE_INTT 0x20 #define ARBITRATION_LOST_INTT 0x40 #define BUS_ERR_INTT 0x80 ///////////////////////////////////////// // DPRAM INTT from PC Definition // ///////////////////////////////////////// #define SEND_DPRAM_CMD 0xff /////////////////////////////// // Return Code Define // /////////////////////////////// #define _SET_TIME_ERROR -19 #define _SET_DATE_ERROR -18 #define _ACCESS_NVRAM_FAILE -9 #define _NO_ERR 0 #define _COUNT_DOWN_TIMER_TIME_UP 1 #define _CAN_CHIP_SOFT_RESET_ERR 101 #define _CAN_CHIP_CONFIG_ERR 102 #define _RX_SOFT_BUF_EMPTY 103 #define _SOFT_BUF_FULL 104 #define _DPRAM_WRITE_ERR 105 #define _DPRAM_READ_ERR 106 #define _DPRAM_OVER_RANGE 107 #define _NO_DPRAM_CMD 108 #define _CYCLIC_CONFIG_ERR 109 #define _CYCLIC_HANDLE_ERR 110 #define _EEPROM_OVER_RANGE 111 #define _EEPROM_ACCESS_ERROR 112 #ifdef __cplusplus extern "C" { #endif /////////////////////////////// // LED function // /////////////////////////////// void L1Off(void); //Red LED off in CM100, Yellow LED off in I8120 void L1On(void); //Red LED On in CM100, Yellow LED off in I8120 void L2Off(void); //Green LED Off void L2On(void); //Green LED On //////////////////////////////////////////// // DPRAM interrupt function // //////////////////////////////////////////// void DPRAMInttToHost(char InttValue); void DPRAMInttToHost_in_Intt(char InttValue); void UserDPRAMIrqFunc(unsigned char INTT); //must be called //////////////////////////////////////////// // DPRAM Data Access function // //////////////////////////////////////////// //Valid range from address 0 to address 0x1b57 (6999 for decimal) int DPRAMWriteByte(unsigned int Address,unsigned char Data); int DPRAMWriteWord(unsigned int Address,unsigned int Data); int DPRAMWriteDword(unsigned int Address,unsigned long Data); int DPRAMWriteMultiByte(unsigned int Address,char *Data,unsigned int DataNum); int DPRAMReadByte(unsigned int Address,unsigned char *Data); int DPRAMReadWord(unsigned int Address,unsigned int *Data); int DPRAMReadDword(unsigned int Address,unsigned long *Data); int DPRAMReadMultiByte(unsigned int Address,char *Data,unsigned int DataNum); int DPRAMMemset(unsigned int Address,char data,unsigned int DataNum); int DPRAMReceiveCmd(char *Data, unsigned int *DataNum); int DPRAMSendCmd(char *Data,unsigned int DataNum); //Max DataNum is 512 bytes int DPRAMSendCmd_in_Intt(char *Data,unsigned int DataNum); int DPRAMCheckBusyR(void); // 0: busy, others:idle /////////////////////////////////// // Debug Port function // /////////////////////////////////// int GetKbhit(void); int Print(const char *fmt, ...); int DebugPrint(const char *fmt,...); //Max printed string length is 100 bytes, only for CM100 series int DebugPrint_in_Intt(const char *fmt,...); //Max printed string length is 100 bytes, only for CM100 series //////////////////////////////////////////// // RTC and NVRAM function // //////////////////////////////////////////// void GetTime(int *hour,int *minute,int *sec); int SetTime(int hour,int minute,int sec); void GetDate(int *year,int *month,int *day); int SetDate(int year,int month,int day); int GetWeekDay(void); int ReadNVRAM(int Address); int WriteNVRAM(int Address, int data); //////////////////////////////////////////// // Timer function // //////////////////////////////////////////// typedef struct { unsigned long ulStart; //record the start time, unit is ms unsigned long ulPauseTime; //record when the timer is pause, unit is ms unsigned int uMode; // 0: pause, 1:run(start) }STOPWATCH; typedef struct { unsigned long ulTime; //record the timer period of count down timer, unit is ms unsigned long ulStartTime; //record the start time, unit is ms unsigned long ulPauseTime; //record when the timer is pause unsigned int uMode; // 0: pause, 1:run(start) }COUNTDOWNTIMER; unsigned long GetTimeTicks100us(void); long GetTimeTicks(void); //unit is ms. This function can't be used in ISR void DelayMs(unsigned int DelayTime_ms); //DelayTime_ms: unit is ms void CM100_InstallUserTimer(void (*Fun)(void)); void T_StopWatchStart(STOPWATCH *sw); unsigned long T_StopWatchGetTime(STOPWATCH *sw); void T_StopWatchPause(STOPWATCH *sw); void T_StopWatchContinue(STOPWATCH *sw); void T_CountDownTimerStart(COUNTDOWNTIMER *cdt,unsigned long timems); //timems: unit is ms void T_CountDownTimerPause(COUNTDOWNTIMER *cdt); void T_CountDownTimerContinue(COUNTDOWNTIMER *cdt); int T_CountDownTimerIsTimeUp(COUNTDOWNTIMER *cdt); unsigned long T_CountDownTimerGetTimeLeft(COUNTDOWNTIMER *cdt); /////////////////////////////////// // EEPROM function // /////////////////////////////////// //Valid range from (Block 0, address 0) to (Block 6, address 255) int EEPROMReadByte(unsigned int Block, unsigned int Address, unsigned char *Data); int EEPROMReadMultiByte(unsigned int Block, unsigned int Address, char *Data, unsigned int DataNum); int EEPROMWriteByte(unsigned int Block, unsigned int Address, unsigned char Data); int EEPROMWriteMultiByte(unsigned int Block, unsigned int Address, char *Data, unsigned int DataNum); //////////////////////////////////////////// // CAN interrupt function // //////////////////////////////////////////// void UserCANIrqFunc(unsigned char INTT); //must be called //////////////////////////////////////////// // CAN chip function // //////////////////////////////////////////// void SJA1000HardwareReset(void); int SetCANBaud(unsigned long Baud, char BT0, char BT1); int SetCANBaud_in_Intt(unsigned long Baud, char BT0, char BT1); void GetCANBaud(unsigned long *Baud, char *BT0, char *BT1); void GetCANBaudFromEEPROM(char *BaudType, char *BT0, char *BT1); int SetCANMask(long AccCode, long AccMask); int SetCANMask_in_Intt(long AccCode, long AccMask); void GetCANMask(long *AccCode, long *AccMask); void GetCANMaskFromEEPROM(char *AccCode, char *AccMask); int CANConfig(unsigned long Baud, char BT0, char BT1, long AccMask, long AccCode); int CANConfig_in_Intt(unsigned long Baud, char BT0, char BT1, long AccMask, long AccCode); int CANConfigBySJA1000Reg(char BaudType, char BT0, char BT1, char *AccCode, char *AccMask); int CANConfigBySJA1000Reg_in_Intt(char BaudType, char BT0, char BT1, char *AccCode, char *AccMask); void EnableSJA1000(void); void EnableSJA1000_in_Intt(void); void DisableSJA1000(void); void DisableSJA1000_in_Intt(void); int GetCANStatus(void); void ClearDataOverrunStatus(void); int SendCANMsg(char Mode, unsigned long MsgID, char RTR, char DataLen, char *Data); int SendCANMsg_in_Intt(char Mode, unsigned long MsgID, char RTR, char DataLen, char *Data); void ClearTxSoftBuffer(void); void ClearTxSoftBuffer_in_Intt(void); int GetCANMsg(char *Mode, unsigned long *MsgID, char *RTR, char *DataLen, char *Data, unsigned long *UpperTime, unsigned long *LowerTime); int GetCANMsg_in_Intt(char *Mode, unsigned long *MsgID, char *RTR, char *DataLen, char *Data, unsigned long *UpperTime, unsigned long *LowerTime); void ClearRxSoftBuffer(void); void ClearRxSoftBuffer_in_Intt(void); int RxMsgCount(void); int CheckTxStatus(void); //////////////////////////////////////////// // Cyclic Tx function // //////////////////////////////////////////// int AddCyclicTxMsg(char Mode, unsigned long MsgID, char RTR, char DataLen, char *Data, unsigned long TimePeriod, unsigned long TransmitTimes, unsigned char *Handle); int AddCyclicTxMsg_in_Intt(char Mode, unsigned long MsgID, char RTR, char DataLen, char *Data, unsigned long TimePeriod, unsigned long TransmitTimes, unsigned char *Handle); int DeleteCyclicTxMsg(unsigned char Handle); int DeleteCyclicTxMsg_in_Intt(unsigned char Handle); int EnableCyclicTxMsg(unsigned char Handle); int EnableCyclicTxMsg_in_Intt(unsigned char Handle); int EnalbeCyclicTxMsgWithTimes(unsigned char Handle, unsigned long TransmitTimes); int EnalbeCyclicTxMsgWithTimes_in_Intt(unsigned char Handle, unsigned long TransmitTimes); int GetRestCyclicTxCnt(unsigned char Handle, unsigned long *RestTimes); int GetRestCyclicTxCnt_in_Intt(unsigned char Handle, unsigned long *RestTimes); int DisableCyclicTxMsg(unsigned char Handle); int DisableCyclicTxMsg_in_Intt(unsigned char Handle); void ResetCyclicTxBuf(void); void ResetCyclicTxBuf_in_Intt(void); //////////////////////////////////////////// // System function // //////////////////////////////////////////// void SystemHardwareReset(void); //it is not allowed to call this function in CAN Irq or DPRAM Irq functions void SystemInit(void); void SystemInit_in_Intt(void); int GetLibVer(void); void RefreshWDT(void); void UserInitFunc(void); //must be called void UserLoopFunc(void); //must be called void DebugPortOpen(void); void DebugPortClose(void); #ifdef __cplusplus } #endif