📄 bsp.h
字号:
#ifndef __BSP_H__
#define __BSP_H__
#ifdef MAKE_BOOTROM
#define SMC_TXINT 0 /*发送采用非中断触发*/
#define SMC_RXINT 0 /*接收采用非中断触发*/
#else
/*#define SMC_TXINT 1 发送采用中断触发*/
#define SMC_RXINT 0 /*接收采用中断触发*/
#endif
#define EQUIP_TEST 0
#define IAMHERE PressAnyKeyToContinue( __FILE__, __LINE__ );
/*****************************************************************************
FLASH
*****************************************************************************/
/* 使用缓存方式写flash */
#define USE_FLASH_BUFFER 1
/* 定义flash地址 */
#define FLASH_START_ADDR FLASH_BASE_ADDR
#define FLASH_LENGTH (2*1024*1024)
#define FLASH_END_ADDR (FLASH_START_ADDR + FLASH_LENGTH)
#define FLASH_BLOCK_SIZE (32*1024)
#define PROGRAM_MAX_LENGTH (1024*1024)
#define DATA_MAX_LENGTH (512*1024)
#define DSP_MAX_LENGTH (0*1024)
#define BIOS_MAX_LENGTH (0*1024)
/* Flash地址分配:
第一个block用于存放非易失地变量,如加载状态字等;
第二个block用于存放非易失地变量,如加载状态字等,备份;
第二个block用于存放错误码头和错误码
第三,四个block用于存放FPGA
第五个block用于存放测试flash时保存的数据
第六,七个block用于存放LOG
第八个block用于作为第一个block的备份
以上为前1Mflash的分配情况
程序从1M开始往后分配
1.5M用于存放程序A;
1.5M用于存放程序B
1M用于存放数据
1M用于存放补丁
2M用于存放DSP*/
/* 程序的状态字存放地址(4bytes) */
#define STATE_WORD_PROG_ADDRESS (FLASH_START_ADDR)
#define BACK_BLOCK_OFFSET (1*FLASH_BLOCK_SIZE)
#define STATE_WORD_PROG_ADDRESS_BACK (FLASH_START_ADDR + BACK_BLOCK_OFFSET)
#define STATE_MAGIC_PROG 0x1234
#define USE_A_BACKUP_B 0x06 /*0110*/ /* 当前使用a区,b区备份 */
#define USE_A_NEW_B 0x03 /*0011*/ /* 当前使用a区,b区有新程序 */
#define USE_B_BACKUP_A 0x09 /*1001*/ /* 当前使用b区,a区备份 */
#define USE_B_NEW_A 0x0c /*1100*/ /* 当前使用b区,a区有新程序 */
/* 程序的加载标志存放地址(4bytes) */
#define BOOT_PROG_FLAG_OFFSET 4
#define BOOT_PROG_FLAG_ADDRESS (FLASH_START_ADDR + BOOT_PROG_FLAG_OFFSET)
#define BOOT_PROG_FLAG_ADDRESS_BACK (FLASH_START_ADDR + BACK_BLOCK_OFFSET + BOOT_PROG_FLAG_OFFSET)
/* 数据的加载标志存放地址(4bytes) */
#define BOOT_DATA_FLAG_OFFSET 8
#define BOOT_DATA_FLAG_ADDRESS (FLASH_START_ADDR + BOOT_DATA_FLAG_OFFSET)
#define BOOT_DATA_FLAG_ADDRESS_BACK (FLASH_START_ADDR + BACK_BLOCK_OFFSET + BOOT_DATA_FLAG_OFFSET)
#define STORE_TO_FLASH 0x30
#define NO_STORE_TO_FLASH 0x60
#define BOOT_FROM_FLASH 0x90
#define DEFAULT_BOOT_TIMES 3
#define MAX_BOOT_TIMES 0xf
#define DEFAULT_BOOT_STAB_TIMES (60*10)/*一分钟*/
#define MAX_BOOT_STAB_TIMES (60*60*10)/*一个小时*/
/* 启动次数,如果加载新程序计数为1,如果在稳定时间内系统稳定
则由tick中断程序将此计数清0,否则每次启动时累加。1 byte*/
#define BOOT_STATE_COUNT_OFFSET 12
#define BOOT_STATE_COUNT_ADDRESS (FLASH_START_ADDR + BOOT_STATE_COUNT_OFFSET)
#define BOOT_STATE_COUNT_ADDRESS_BACK (FLASH_START_ADDR + BACK_BLOCK_OFFSET + BOOT_STATE_COUNT_OFFSET)
/* 启动失败的最大次数,即上面的计数如果大于或等于此值,则回滚。 1 byte*/
#define BOOT_STATE_TIMES_OFFSET 13
#define BOOT_STATE_TIMES_ADDRESS (FLASH_START_ADDR + BOOT_STATE_TIMES_OFFSET)
#define BOOT_STATE_TIMES_ADDRESS_BACK (FLASH_START_ADDR + BACK_BLOCK_OFFSET + BOOT_STATE_TIMES_OFFSET)
/* 给DEC中的减数器的值,即设置程序的稳定时间 每100ms减1。 2 byte*/
#define BOOT_STATE_STAB_TIME_OFFSET 14
#define BOOT_STATE_STAB_TIME_ADDRESS (FLASH_START_ADDR + BOOT_STATE_STAB_TIME_OFFSET)
#define BOOT_STATE_STAB_TIME_ADDRESS_BACK (FLASH_START_ADDR + BACK_BLOCK_OFFSET + BOOT_STATE_STAB_TIME_OFFSET)
/* 单板MAC/IP/MASK/GATE等地址存放地址(224bytes) */
#define BOOT_INFO_OFFSET 32
#define BOOT_INFO_IN_FLASH (FLASH_START_ADDR + BOOT_INFO_OFFSET)
#define BOOT_INFO_IN_FLASH_BACK (FLASH_START_ADDR + BACK_BLOCK_OFFSET + BOOT_INFO_OFFSET)
#define BOOT_DATA_BACK_SIZE (BOOT_INFO_OFFSET + sizeof(BootInfo))
/* 定义单板存储器自检时的状态以及需要恢复的数据 */
/* 选择存储的地址不能为需要检测的地址 */
/*
#define SELFTEST_INFO_ADDRESS (FLASH_START_ADDR + 0x1000 + 16)
*/
/* bsp错误码头存放地址,第三Block */
#define DRV_ERROR_LOG_HEAD_ADDRESS (FLASH_START_ADDR + 2*FLASH_BLOCK_SIZE)
/* bsp错误码存放地址 */
#define DRV_ERROR_LOG_ADDRESS (FLASH_START_ADDR + 2*FLASH_BLOCK_SIZE + 100)
/* FPGA的存放地址,第四Block */
#define FPGA_START_ADDRESS (FLASH_START_ADDR + 3*FLASH_BLOCK_SIZE)
#define FPGA_MAX_LENGTH (FLASH_BLOCK_SIZE * 2)
/* 现在用一个block最为测试用block,第六Block。 */
/* 测试数据线时需要擦除整个BLOCK,所以需要保存的数据为一个BLOCK。 */
#define SELFTEST_SAVE_DATA_ADDRESS (FPGA_START_ADDRESS + FPGA_MAX_LENGTH)
#define SELFTEST_TEST_START_ADDRESS (FPGA_START_ADDRESS + FPGA_MAX_LENGTH + 16)
#define SELFTEST_SAVE_DATA_SIZE (FLASH_BLOCK_SIZE)
/* 系统需要写入的变量。第7个block */
#define SYSTEM_VARIABLE_BASE_ADDRESS (FLASH_START_ADDR + 6*FLASH_BLOCK_SIZE)
#define SYSTEM_VARIABLE_LENGTH FLASH_BLOCK_SIZE
/*
256K(第8个Block)到512K空闲
*/
/* 数据的存放地址,从FLASH地址+512K开始*/
#define DATA_START_ADDRESS (FLASH_START_ADDR + 80000)
/* 程序A、B的存放地址从FLASH地址+1M开始*/
#define PROGRAM_A_START_ADDRESS (FLASH_START_ADDR + 100000)
#define PROGRAM_B_START_ADDRESS PROGRAM_A_START_ADDRESS
/* 对外提供的函数 */
/*BootParamInfo is stored in the flash start at BOOT_INFO_IN_FLASH*/
#define MAC_STR_ADDR_SIZE 0x12
#define MAC_ADDR_SIZE 0x6
#define MAC_STORE_SIZE 0x14
#define IP_ADDR_SIZE 0x10
#define BOOT_DIRC_SIZE 80
#define TFTP_LOADNAME_SIZE 40
enum Boot_ProgFlag
{
STORE2FLASH,
NO_STORE2FLASH,
BOOT_FROMFLASH,
};
typedef struct _BootInfoString
{
char InnerIpAddr[IP_ADDR_SIZE];
char InnerMacAddr[MAC_STORE_SIZE];
char OuterIpAddr[IP_ADDR_SIZE];
char OuterMacAddr[MAC_STORE_SIZE];
char OuterIpMask[IP_ADDR_SIZE];
char OuterGateAddr[IP_ADDR_SIZE];
char HostIpAddr[IP_ADDR_SIZE];
char BootDirection[BOOT_DIRC_SIZE];
char LoadFileName[TFTP_LOADNAME_SIZE];
char DeviceWorkMode[1];
}BootInfoString;
typedef struct _BootInfo
{
_U32 InnerIp;
_U32 InnerIpState;
_U8 InnerMac[MAC_ADDR_SIZE+2];/*4 bytes对齐*/
_U32 InnerMacState;
_U32 OuterIp;
_U32 OuterIpState;
_U8 OuterMac[MAC_ADDR_SIZE+2];
_U32 OuterMacState;
_U32 OuterIpMask;
_U32 OuterIpMaskState;
_U32 OuterGateAddr;
_U32 OuterGateAddrState;
_U32 HostIp;
_U32 HostIpState;
char BootDirc[BOOT_DIRC_SIZE];
_U32 BootDircState;
char LoadFileName[TFTP_LOADNAME_SIZE];
_U32 LoadFileNameState;
_U32 DeviceWorkMode;
_U32 DeviceWorkModeState;
_U16 Reserved;
_U16 InfoCrc;
}BootInfo;
extern _U8 gFPGAMACValue[MAC_ADDR_SIZE];
/* Loopback() */
#define DRV_ENET_NOLOOPBACK 0
#define DRV_ENET_LOOPBACK 1
#define DRV_ENET_EXT_LOOPBACK 2
#define DRV_ENET_DISABLE 0xffffffff
/*****************************************************************************
DRIVER
*****************************************************************************/
#define DRV_ENET_TX_MINFLR 0x004A
/*装备测试使用*/
#define EQUIP_TEST_RESULT_LEN 2048
#define EQUIP_TEST_RESERVE_LEN 256
#define EQUIP_TEST_FACT_LEN (EQUIP_TEST_RESULT_LEN-EQUIP_TEST_RESERVE_LEN)
#define EQUIP_MAX_CHIP_NUM 4
#define EQUIP_MAX_CHANNEL_NUM 512
#define BLOCK_49LV040_SIZE 0x00080000
#define EQUIP_TEST_OK 0
#define EQUIP_GENERAL_ERR 1
#define EQUIP_FLASH_ERASE_ERR 2
#define EQUIP_FLASH_WRITE_ERR 3
#define EQUIP_FLASH_READ_ERR 4
#define EQUIP_E1_GEN_ERR 9
#define EQUIP_NET_INIT_ERR 10
#define EQUIP_NET_WRITE_ERR 11
#define EQUIP_RTC_GET_ERR 12
#define EQUIP_RTC_SET_ERR 13
#define EQUIP_LSW_GET_ERR 14
#define EQUIP_LSW_SET_ERR 15
#define EQUIP_DSP0_RAM_ERR 16
#define EQUIP_DSP1_RAM_ERR 17
#define MAX_DRV_ADDR_SIZE 8 /* 驱动的硬件地址字节数 */
#define MAX_DRV_NAME_SIZE 12 /* 驱动的名字长度 */
#define MAX_ENET_DRIVER_NUM 1
#define MAX_SERIAL_DRIVER_NUM 1
#define DRV_BOOTINFO_MODEFIED 0x03
#define DRV_BOOTINFO_UN_MODEFIED 0x06
/* 驱动的IO命令 */
#define DRV_ENET_RESET_RXBD 0x0001
#define DRV_ENET_RESET_TXBD 0x0002
#define DRV_ENET_RESET_DRIVER 0x0003
#define DRV_ENET_RESET_ALLBD 0x0004
#define DRV_ENET_RESET_STATIC 0x0005
#define DRV_ENET_GET_STATIC 0x0007
#define DRV_ENET_SET_HARDWARE_ADDR 0x0008
#define DRV_ENET_GET_HARDWARE_ADDR 0x0009
#define DRV_ENET_GET_BD_STATUS 0x000A
#define DRV_ENET_GET_REG_STATUS 0x000B
#define DRV_ENET_GET_LOOP_STATUS 0x000C
#define DRV_ENET_LOOP_ENABLE 0x000D
#define DRV_ENET_LOOP_DISABLE 0x000F
#define DRV_ENET_GET_LOOP_TYPE 0x0010
#define DRV_ENET_OPEN 0x0011
#define DRV_ENET_CLOSE 0x0012
#define DRV_ENET_SET_ALLOC 0x0013
#define DRV_ENET_SET_FREE 0x0014
#define DRV_ENET_TX_PRINT 0x0015
#define DRV_ENET_RX_PRINT 0x0016
#define DRV_ENET_TEST0 0x0017
#define DRV_ENET_TEST1 0x0018
#define DRV_ENET_TEST2 0x0019
#define DRV_ENET_TEST_RESULT 0x0020
#define DRV_ENET_RESTART_TX 0x0021
#define DRV_ENET_SET_STATICS_TIME 0x0025
#define DRV_ENET_GET_STATICS_INFO 0x0026
#define DRV_ENET_SET_PACKAGE_DIAG_TIME 0x0027
#define DRV_ENET_GET_PACKAGE_DIAG_TIME 0x0028
#define DRV_ENET_GET_PACKAGE_PROC_TIME 0x0029
#define DRV_BOOT_SET_OUTER_IP 0x0101
#define DRV_BOOT_GET_OUTER_IP 0x0102
#define DRV_BOOT_SET_OUTER_MASK 0x0103
#define DRV_BOOT_GET_OUTER_MASK 0x0104
#define DRV_BOOT_SET_OUTER_GATE 0x0105
#define DRV_BOOT_GET_OUTER_GATE 0x0106
#define DRV_BOOT_SET_OUTER_MAC 0x0107
#define DRV_BOOT_GET_OUTER_MAC 0x0108
#define DRV_BOOT_SET_INNER_IP 0x0109
#define DRV_BOOT_GET_INNER_IP 0x010A
#define DRV_BOOT_SET_INNER_MAC 0x010B
#define DRV_BOOT_GET_INNER_MAC 0x010C
#define DRV_BOOT_SET_HOSTIP 0x010D
#define DRV_BOOT_GET_HOSTIP 0x010E
#define DRV_BOOT_SET_BOOTDIRC 0x010F
#define DRV_BOOT_GET_BOOTDIRC 0x0110
#define DRV_BOOT_SET_BOOTFILE 0x0111
#define DRV_BOOT_GET_BOOTFILE 0x0112
#define DRV_BOOT_SET_WORKMODE 0x0113
#define DRV_BOOT_GET_WORKMODE 0x0114
#define DRV_BOOT_SET_LOADPROGSTATE 0x0115
#define DRV_BOOT_GET_LOADPROGSTATE 0x0116
#define DRV_BOOT_SET_LOADDATASTATE 0x0117
#define DRV_BOOT_GET_LOADDATASTATE 0x0118
#define DRV_BOOT_SET_BOOT_TIMES 0x0119
#define DRV_BOOT_GET_BOOT_TIMES 0x011A
#define DRV_BOOT_SET_BOOT_STAB_TIME 0x011B
#define DRV_BOOT_GET_BOOT_STAB_TIME 0x011C
#define DRV_BOOT_SET_BOOT_COUNT 0x011D
#define DRV_BOOT_GET_BOOT_COUNT 0x011E
#define DRV_BOOT_SET_OUTER_IP_STATE 0x0121
#define DRV_BOOT_GET_OUTER_IP_STATE 0x0122
#define DRV_BOOT_SET_OUTER_MASK_STATE 0x0123
#define DRV_BOOT_GET_OUTER_MASK_STATE 0x0124
#define DRV_BOOT_SET_OUTER_GATE_STATE 0x0125
#define DRV_BOOT_GET_OUTER_GATE_STATE 0x0126
#define DRV_BOOT_SET_OUTER_MAC_STATE 0x0127
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -