?? ini.h
字號:
/****************************************Copyright (c)**************************************************
** xxxxxxxxxxxxxxxxx公司
** 硬件開發部
**
**
** http://www.xxxxxx.com
**
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: main.c
**創 建 人: 賴建
**最后修改日期: --------
**描 述: 常規初始化的一些定義
**
**--------------歷史版本信息----------------------------------------------------------------------------
** 創建人: 賴建
** 版 本:
** 日 期:
** 描 述:
**
**--------------當前版本修訂------------------------------------------------------------------------------
** 修改人:
** 版 本:
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#define RC
#define BAUD_RATE 9600
#define IIC_RATE 400000
/* LED配置 */
#define LED3 17 // P1.21 控制LED0
#define LED2 28 // P0.22 控制LED1
#define LED1 29 // P0.29 控制LED2
#define LED0 30 // P0.30 控制LED3
#define LED0_ON() IO0CLR = (1<<LED0)
#define LED0_OFF() IO0SET = (1<<LED0)
#define LED1_ON() IO0CLR = (1<<LED1)
#define LED1_OFF() IO0SET = (1<<LED1)
#define LED2_ON() IO0CLR = (1<<LED2)
#define LED2_OFF() IO0SET = (1<<LED2)
#define LED3_ON() IO1CLR = (1<<LED3)
#define LED3_OFF() IO1SET = (1<<LED3)
#define LED_RFID_ON() LED0_ON()
#define LED_RFID_OFF() LED0_OFF()
#define LED_CAN0_ON() LED1_ON()
#define LED_CAN0_OFF() LED1_OFF()
#define LED_CANERR_ON()
#define LED_ERR_ON() LED2_ON()
#define LED_ERR_OFF() LED2_OFF()
#define LED_WORK_ON() LED3_ON()
#define LED_WORK_OFF() LED3_OFF()
#define CAN_ERR_ON() LED_ERR_ON()
#define CAN_ERR_OFF() LED_ERR_OFF()
#define LED_INI() \
PINSEL1 &= ~((3<<(LED0-16)*2)|(3<<(LED1-16)*2)|(3<<(LED2-16)*2));\
LED_RFID_OFF();LED_CAN0_OFF();LED_ERR_OFF();LED_WORK_ON(); \
IO0DIR |= (1<<LED0)|(1<<LED1)|(1<<LED2); \
IO1DIR |= (1<<LED3)
/* 看門狗配置 */
#define WDOG_PORT 18 // P0.18控制外部看門狗
#define WATCHDOG_SOFT() OS_ENTER_CRITICAL(),WDFEED = 0xAA,WDFEED = 0x55,OS_EXIT_CRITICAL()
#define WATCHDOG_HARDWARE() OS_ENTER_CRITICAL();\
if((IO0SET&(1<<WDOG_PORT))==0) IO0SET = 1<<WDOG_PORT;\
else IO0CLR = 1<<WDOG_PORT;\
OS_EXIT_CRITICAL()
#define WDOG_CONFIG() PINSEL1&=~(3<<(WDOG_PORT-16)*2),IO0DIR |= (1<<WDOG_PORT)
/* RS485配置 */
#define RS485A_RW_PORT 16 // P1.16
#define RS485B_RW_PORT 10 // P0.10
#define RS485A_R() IO1CLR = (1<<RS485A_RW_PORT)
#define RS485A_W() IO1SET = (1<<RS485A_RW_PORT)
#define RS485B_R() IO0CLR = (1<<RS485B_RW_PORT)
#define RS485B_W() IO0SET = (1<<RS485B_RW_PORT)
#define RS485A_INI() RS485A_R(); \
IO1DIR |= (1<<RS485A_RW_PORT)
#define RS485B_INI() PINSEL0 &= ~(3<<(RS485B_RW_PORT*2)); \
RS485B_R(); \
IO0DIR |= (1<<RS485B_RW_PORT)
#define LOCAL_TAG 0
#define RS485A 2
#define RS485B 4
/* I2C儲存系統參數地址分配 */
#define IIC_PASSWORD_ADR 0
#define IIC_PARA_ADR IIC_PASSWORD_ADR+32
#define IIC_SNMP_ADR IIC_PARA_ADR+64
#define IIC_TEST_ADR 0xFF
#define TaskSys0_PRI 4
#define TaskCan_PRI 13
#define TaskRS485_PRI 11
#define TaskRfid_PRI 12
#define TaskCanMoni_PRI 20
#define TaskSys0StkLen 128
#define TaskCanStkLen 256
#define TaskRfidStkLen 128
#define TaskCanMoniStkLen 128
#define TaskRS485StkLen 256
#define MAX_PAYLOAD 150 // PC或rs485下發的payload最大字節數
#define MAX_TAG 50 // 輪詢最大TAG個數
#ifdef RC
#define RFID_BUF_LEN 800 // 本地標簽緩沖區TAG個數
#define STATE_INFO_LEN 1 // 狀態信息長度
#else
#define RFID_BUF_LEN 254 // 本地標簽緩沖區TAG個數
#define STATE_INFO_LEN 2 // 狀態信息長度
#endif
/* 串口轉發PC */
#define PC_DispChar(str) UART0_SendStr(str)
//******************************************************
#ifdef YUNTIANHUA
__packed typedef struct { // TAG項數據內容 云天化(8)
uint32 ID;
uint8 dat;
uint8 status;
uint16 time;
} TagData;
#else
__packed typedef struct { // TAG項數據內容 煤安(5)
uint16 ID;
uint8 status;
uint16 time;
} TagData;
#endif
__packed typedef struct _history // 操作歷史記錄數據結構
{
uint32 HeadAdr; // 內部儲存區頭地址
uint32 TailAdr; // 內部儲存區為地址
uint16 TotalCnt; // 總記錄數
uint8 IICHeadTag; // 外部儲存區頭
uint8 IICTailTag; // 外部儲存區尾
uint8 HisFlag; // 有無歷史記錄
} HIS_PARA;
enum CAN_BAUD {
BAUD_BPS5K,
BAUD_BPS10K,
BAUD_BPS20K,
BAUD_BPS50K,
BAUD_BPS100K,
BAUD_BPS500K,
BAUD_BPS1000K
};
/********** 讀頭類型定義 *************/
#ifdef CAN_RS232
#define READER_TYPE 0x10
#endif
#ifdef CANBRIDGE
#define READER_TYPE 0x11
#endif
#ifdef RC
#define READER_TYPE 0x12
#endif
#ifdef YUNTIANHUA
#define READER_TYPE 0x20
#endif
__packed typedef struct __parameter0 // 系統參數
{
uint16 ReaderID; // ID
uint8 RxFreq; // 接收頻率
uint8 TxFreq; // 發送頻率
uint8 TagEn; // 使能天線
uint16 ErrCnt; // 錯誤計數器
HIS_PARA HisData; // 歷史記錄
#ifdef YUNTIANHUA // 云天化
#define TAG_MAX_ID 0xFFFFFFFE
#define TAG_MIN_ID 0x00000001
uint32 TagMinID; // TAG范圍 小值
uint32 TagMaxID; // TAG范圍 大值
#define DI_HENG 1
#define OTHER 2
uint8 Type; // 讀頭類型[地橫鐵軌]
#define SOUND_MAX 4
uint8 SoundCnt; // 語音播報次數
uint8 IpAdr[4]; // IP地址
uint8 GetWayAdr[4];// 網關
uint8 NetMaskAdr[4];
uint8 MacAdr[6]; // 網卡地址
#else // RC和CAN橋
#define TAG_MAX_ID 0xFFFE
#define TAG_MIN_ID 0x0001
uint16 TagMinID; // TAG范圍 小值
uint16 TagMaxID; // TAG范圍 大值
#define SWITCH_ON 1
#define SWITCH_OFF 2
uint8 Switch; // 撥碼開關使能
uint8 CAN1Baud; // CAN1口波特率
uint8 CAN2Baud; // CAN2口波特率
#ifdef CAN_RS232
#define UART_BAUD_115200 0
#define UART_BAUD_9600 1
uint8 UART0Baud;// uart0波特率
#endif
#endif
#define HOSTNAME_LEN 16
char HostName[HOSTNAME_LEN+1];
} parameter;
typedef struct _protocol // 解析命令格式數據結構
{
uint8 *pt; // 凈荷指針 tmp
uint16 dstID; // 目的ID
uint16 srcID; // 源ID
uint16 ChksumAdd; // 本地計算檢驗和
uint16 ChksumRevc; // 接收校驗和
uint8 Flag0xAA;
uint8 err; // 錯誤 檢驗和
uint8 State; // 狀態
uint8 StateLen; // 每個狀態字節長度
uint8 PayloadLen; // 凈荷長度
uint8 Insert; // 插零操作
int8 cmd; // 命令
#ifdef CANBRIDGE
uint8 SendFlag; // 發送標志
#endif
#define PTL_MODE_ROLL 0
#define PTL_MODE_RS485 1
#define PTL_MODE_UART0 1
uint8 mode; // 輪詢 485 串口
uint8 Payload[MAX_PAYLOAD];
} PROTOCOL;
typedef struct // TAG操作數據結構
{
TagData *HeadDef; // 本地標簽混沖區默認頭
TagData *TailDef; // 本地標簽混沖區默認尾
TagData *HeadP; // 本地標簽混沖區頭
TagData *TailP; // 本地標簽混沖區尾
TagData *DispP; // 顯示TAGID緩沖區地址
uint16 TagCnt; // 本地TAG個數
} TagOpt;
typedef struct // 網橋子網結構
{
uint8 ID;
uint8 state;
} CHILD_NET;
typedef struct // TAG操作數據結構
{
OS_EVENT *sem; // 互斥信號量
uint8 *SendBufP;// 發送緩沖區
TagOpt *OptP; // TAG操作指針
PROTOCOL *PtlP; // 輪詢命令協議區指針
parameter *para; // 本機系統參數指針
#ifdef CANBRIDGE
CHILD_NET ChildNet[16];
uint8 ChildNetCnt;
#endif
#define SAVE_HIS_TIMEOUT 1*60*5
uint32 SaveHisTmr;
uint16 Time; // 本地輪詢的時間
uint8 ReaderState;
} TAG_PRO;
//*****************************************************
#define swap32(n) ((((n)&0xff)<<24)|(((n)&0xff00)<<8)|(((n)&0xff0000)>>8)|(((n)&0xff000000)>>24))
#define swap16(n) ((((n)&0xff)<<8)|(((n)&0xff00)>> 8))
#ifdef YUNTIANHUA
#define ID_SWAP(ID) swap32(ID) // 4個字節
#else
#define ID_SWAP(ID) swap16(ID) // 2個字節
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -