bspconfig.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. /*******************************************************************************
  2. 版权所有:
  3. 文件名称: bspconfig.h
  4. 文件版本: 01.01
  5. 创建作者: sunxi
  6. 创建日期: 2012-05-10
  7. 功能说明: 冷火实时LINUX的配置文件。
  8. 其它说明:
  9. 修改记录:
  10. */
  11. #ifndef _BSPCONFIG_H_
  12. #define _BSPCONFIG_H_
  13. #include "rt.h"
  14. #include "MCF54418.h"
  15. #include "build_info.h"
  16. #include "defineSys.h"
  17. //----------------------------- BSP版本 ---------------------------
  18. #define __DFTU_V4_HV0102__ 1 // sunxi 20180724 第二版
  19. #define PROTECT_AC_ADJUST //保护电流校准
  20. #define EQUIP_NAME_STRING "OLE-DFTU" // 装置名称
  21. #define EQUIP_TYPE_STRING "OLE-DFTU" // 装置类型
  22. #define KO_FILE_NAME "/app/dtu_t536"
  23. #define KO_FILE_NAME_1 "dtu_t536"
  24. //----------------------------- 设备架构 ---------------------------
  25. #define EQU_SLOT_NUM_MAX 16
  26. #define EQU_SLOT_AC_BEGIN 1 // 采样板起始槽位
  27. #define EQU_SLOT_AC_NUM 1 // 一个装置支持AC板的最大槽数。1 -> 2 DTUv5采用两块采样板
  28. #define EQU_SLOT_AC_CHN 16 // 每个槽中支持的最大AC通道数
  29. #define EQU_DB_YX_NUM 32 // 数据总线长度
  30. #define EQU_SLOT_NUM_06 6 // DTUv5 目前配置卡槽数量为6,后续根据需求修改
  31. #define EQU_SLOT_AC_BEGIN06 0 // 定义6卡槽DTUv5中AC采样板的卡槽开始位置
  32. //----------------------------- 线路开关 ---------------------------
  33. #define SWITCH_NUM_MAX 6 // 开关数量,本装置实际支持的开关数,不包含级联部分。
  34. #define SWITCH_NUM_EXT 31 // 扩展开关数量,后面部分供级联用。
  35. #define SWITCH_NUM_EXT_PUB 32 // 扩展开关数量加公共部分,后面部分供级联用。此值不能超过32
  36. //----------------------------- 设备级联 ---------------------------
  37. #ifdef FUN_NETWORK_ADD40
  38. #define CFG_LINK_104_NUM 48 // 104级联数目
  39. #else
  40. #define CFG_LINK_104_NUM 8 // 104级联数目
  41. #endif
  42. #define CFG_LINK_101_NUM 6 // 101级联数目
  43. #define CFG_LONK_EQU_SOE_NUM 10 // 级联装置保存SOE数量
  44. //----------------------------- CPU主时钟 ---------------------------
  45. #define CFG_EXT_OSC_CLK 50000000 //外部晶体频率
  46. #define CFG_CPU_CLK 250000000 //CPU时钟根据外部晶体频率和系统配置算出来
  47. //----------------------------- 中断级别 ---------------------------
  48. //MCF54418用3bits表示中断级别(LEVEL),其中0表示不产生中断,7表示不可屏蔽中断。
  49. //数字越大,中断优先级越高。由于我们将来有可能在一颗CPU上同时运行保护和人机功能,
  50. //所以我们将中断分为两个部分:实时(保护)和非实时(人机)。中断级别1~3分配给非实时部分,
  51. //4~6分配给实时部分。在原Linux中关中断时只屏蔽中断1~3,不屏蔽4~6。
  52. //MCF54418有三个中断控制器INTC0、INTC1、INTC2,每个中断控制器有64个中断源。在设置为相同
  53. //中断级别的情况下,INTC0的优先级最高,INTC2最低;在相同的中断控制器中,数值大的优先级高,
  54. //数值小的优先级低: 63最高,0最低。
  55. //NET1: INTC0(49~61)
  56. //NET0: INTC0(36~48)
  57. //DTM(0~3): INTC0(32~35)
  58. //UART(0~3): INTC0(26~29)
  59. //DMA INTC0(8~24)
  60. //EPORT INTC0(1~7)
  61. //UART(4~9): INTC1(48~53)
  62. //CAN1: INTC1(04~07)
  63. //CAN0: INTC1(00~03)
  64. //PIT(0~3): INTC2(13~16)
  65. //实时
  66. #define CFG_INT_LEVEL_CAN 5 // CAN总线
  67. //非实时。级别相同的,依MCF54418的规则,排前面的优先级更高。
  68. //非实时中断,如果没有指定优先级,在request_irq函数中将默认指定为2。
  69. //----------------------------- 外部中断 ---------------------------
  70. //-------------------------------- FlexBus -----------------------------------
  71. //目前假设CPU最高频率为250MHZ,那么FlexBus的时钟频率为62.5MHZ,周期16ns。
  72. //默认情况下每个占用256M地址空间,基址为片选索引乘256M。
  73. //CS0,NOR FLASH,在U-BOOT中设置,kernel中不重新设置。
  74. //CS1,外部AD1
  75. //-------------------------------- 网络 --------------------------------
  76. //
  77. #define CFG_ETH_MAX_PHY 3 // 实体网口phy数量
  78. #define CFG_ETH_MAX_LOGIC 4 // 逻辑网卡最大数量
  79. //FUXI 共享内存地址,请参看《fuxi核间通信结构体定义.doc》
  80. //1. linux核->裸核空间定义如下:
  81. #define SHM_ADDR_D_FREQ_TR 0x00000000 //频率跟踪
  82. #define SHM_ADDR_D_RFV_1 0x00000040 //第一片AD7616参考电压范围
  83. #define SHM_ADDR_D_RFV_2 0x00000080 //第二片AD7616参考电压范围
  84. #define SHM_ADDR_D_RFV_3 0x000000C0 //第三片AD7616参考电压范围
  85. #define SHM_ADDR_D_RFV_4 0x00000100 //第四片AD7616参考电压范围
  86. #define SHM_ADDR_D_TIME 0x00001000 //系统时间 linux向裸核校时
  87. #define SHM_ADDR_D_HB 0x00001040 //心跳
  88. //2. 裸核->linux核空间定义如下:
  89. #define SHM_ADDR_U_TIME 0x00001000 //系统时间 裸核向linux校时
  90. #define SHM_ADDR_U_FREQ 0x00001040 //频率
  91. #define SHM_ADDR_U_DC 0x00001080 //直流
  92. #define SHM_ADDR_U_WP 0x000010C0 //AD7616采样点写指针
  93. #define SHM_ADDR_U_WR 0x00001100 //打印信息读写指针
  94. #define SHM_ADDR_U_VER 0x00001140 //裸核版本信息
  95. #define SHM_ADDR_U_PRO_W_F 0x00001180 //裸核程序空间写完标志结构体
  96. #define SHM_ADDR_U_DEBUG_MSG 0x00005000 //打印缓冲区
  97. #define SHM_ADDR_U_E907_PRO 0x00005200 //存放裸核的程序
  98. #define SHM_ADDR_U_ADC_1 0x00040000 //第一片AD7616 采样数据区
  99. #define SHM_ADDR_U_ADC_2 0x00060000 //第二片AD7616 采样数据区
  100. #define SHM_ADDR_U_ADC_3 0x00080000 //第三片AD7616 采样数据区
  101. #define SHM_ADDR_U_ADC_4 0x000A0000 //第四片AD7616 采样数据区
  102. #define SHM_ADC_SIZE (SHM_ADDR_U_ADC_2 - SHM_ADDR_U_ADC_1)
  103. //-------------------------------- ADC --------------------------------
  104. //
  105. #define CFG_256_DOTS_PER_PERIOD // 一周波采256点
  106. #ifdef CFG_256_DOTS_PER_PERIOD
  107. #define CFG_ADC_MOD_NUM 8 //256采样时8个点抽一个,抽取32个计算,比率为8
  108. #else
  109. #define CFG_ADC_MOD_NUM 4
  110. #endif
  111. #define CFG_ADC_DOTS_PER_PERIOD 32 // 每个周波的采样点数。
  112. #define CFG_ADC_DOTS_PER_CHANNEL 256 // 每个ADC通道保存的采样点数(8个周波)。
  113. #define CFG_ADC_DOTS_MASK (CFG_ADC_DOTS_PER_CHANNEL-1)// 每个ADC通道保存的采样点数的MASK。
  114. #define CFG_ADC_BUF_MASK (~(CFG_ADC_DOTS_PER_CHANNEL*2)) // 提供给MAC设置用(short->byte*2)
  115. #define CFG_ADC_OS_BASE 0 // 过采样基数
  116. #define CFG_ADC_OS_NUM (1<<CFG_ADC_OS_BASE) // 过采样倍数
  117. #define CFG_ADC_CHANNEL 16 // ADC采样的通道数
  118. #define CFG_ADC_CHANNEL_DC 2 // 直流ADC通道数量
  119. #define CFG_ADC_CHANNEL_ALL (CFG_ADC_CHANNEL + CFG_ADC_CHANNEL_DC) // 所有通道数
  120. #define CFG_ADC_CHANNEL_ZERO (CFG_ADC_CHANNEL_ALL) // 全0通道索引
  121. #define CFG_ADC_DMA_CHANNEL 8 // ADC占用4个DMA通道8~11
  122. #define CFG_ADC_DMA_CHANNEL_REC (CFG_ADC_DMA_CHANNEL+EQU_SLOT_AC_NUM) // ADC录波占用1个DMA通道.
  123. #define CFG_ADC_DMA_VECTOR_REC (64+16+EQU_SLOT_AC_NUM) // DMA通道8对应INTC0的中断向量16.
  124. //-----------------------------------------------------------------------------
  125. //-------------------------------- PIT Timers --------------------------------
  126. #define CFG_PIT_KERNEL 0 // linux 内核调度定时器
  127. #define CFG_PIT_1 1 // CAN 1ms定时器 (优先级高于linux kernel)
  128. #define CFG_PIT_5MS 2 // 5ms保护中断
  129. #define CFG_PIT_SAMPLE 3 // 156us采样中断
  130. #define CFG_PIT_VECTOR_BEGIN (192 + 13) //中断向量
  131. #define CFG_PIT_CD_BEGIN (32)
  132. /*PMR寄存器值PMRn[PM] = (T * fsys/2) / 2^PCSRn[PRE] - 1*/
  133. //数字大的PIT中断优先级高
  134. #define PIT_PERIOD_156US ((CFG_CPU_CLK/2)/6400/1 - 1) // 1分频
  135. #define PIT_PERIOD_5MS ((CFG_CPU_CLK/2)/200/16 - 1) // 16分频
  136. //-------------------------------- DMA Timers --------------------------------
  137. #define CFG_DTIM_GPS_CAP 1 // GPS对时,捕获(与微秒定时器共用)
  138. //-------------------------------- 测频 ----------------------------------------
  139. #define CFG_FREQ_NUM 2 //一路测频
  140. //TODO. noted by sunxi: 根据实际情况,定义串口号
  141. #define CFG_UART_HMI 1 //
  142. /* T536版fuxi串口分配 注意uart11 13实际没接任何东西 */
  143. #define CFG_UART_485_0 6
  144. #define CFG_UART_485_1 4
  145. #define CFG_UART_232_0 3
  146. #define CFG_UART_232_1 1
  147. #define CFG_UART_GPS 14
  148. #define CFG_UART_BK_0 11
  149. #define CFG_UART_BK_1 13
  150. #define CFG_UART_CHIP_S1 10 // 南网加密芯片用
  151. #define CFG_UART_GPRS_IN 10
  152. #define CFG_UART_NUM_MAX 7 // 最大UART数量 标准化端子4 gps1 备用2
  153. #define CFG_ETH_NUM_MAX 3 // 网络数量
  154. //-------------------------------- CAN ----------------------------------------
  155. #define CFG_CAN_VECTOR_BEGIN (128 + 0) //中断向量
  156. //-------------------------------- I2C ----------------------------------------
  157. /* I2C CMODULE 2 */
  158. #define MCF_I2AR *(volatile unsigned char *)(0xEC010000) /* I2C Address */
  159. #define MCF_I2FDR *(volatile unsigned char *)(0xEC010004) /* I2C Frequency Divider */
  160. #define MCF_I2CR *(volatile unsigned char *)(0xEC010008) /* I2C Control */
  161. #define MCF_I2SR *(volatile unsigned char *)(0xEC01000C) /* I2C Status */
  162. #define MCF_I2DR *(volatile unsigned char *)(0xEC010010) /* I2C Data I/O */
  163. //-------------------------------- E2PROM(24LC256) -----------------------------
  164. #ifdef SOE_PARA_ALL_SAVE
  165. #define CFG_E2PROM_SIZE (256*1024)
  166. #else
  167. #define CFG_E2PROM_SIZE (128*1024)
  168. #endif
  169. #define CFG_E2PROM_PAGE_SIZE 64
  170. //-------------------------------- RTC(DS1338) ---------------------------------
  171. #define CFG_RTC_BUFFER_SIZE (16)
  172. #define CFG_RTC_NVRAM_SIZE (1)
  173. //-------------------------------- DSPI ----------------------------------------
  174. #define CFG_DSPI_INDEX 0
  175. //-------------------------------- FLASH(AT45DB321) ----------------------------
  176. #define CFG_FLASH_PAGE_SIZE 512 //页面大小
  177. #define CFG_FLASH_PAGE_NUM 8192 //页面数
  178. #define CFG_FLASH_SIZE (CFG_FLASH_PAGE_SIZE*CFG_FLASH_PAGE_NUM)//FLASH的大小
  179. //-------------------------------- GPIO --------------------------------------
  180. /*
  181. // 核心板GPIO配置
  182. NOR_WP:MII0_COL/RMII1_MDC/ULPI_STP/GPIOJ0
  183. WDOG:DSPI0_PCS0/SS_B/I2C3_SDA/SDHC_DAT3/GPIOD7
  184. RUN:SDHC_DAT1/PWMA2/DSPI1_PCS1/GPIOF0
  185. ERR:SDHC_DAT2/PWMB1/DSPI1_PCS2/GPIOF1
  186. PWM1:SDHC_CMD/PWMB0/DSPI1_SIN/GPIOG6
  187. PWM2:SDHC_CLK/PWMA0/DSPI1_SCK/GPIOG5
  188. PWM3:SDHC_DAT0/PWMB2/DSPI1_SOUT/GPIOG7
  189. PWM4:SDHC_DAT3/PWMA1/DSPI1_PCS0/GPIOF2
  190. DSPIO_PCS1:DSPI0_PCS1/SBF_CS_B/GPIOC0
  191. GPIO_0:SSI0_MCLK/SSI_CLKIN/SIM1_CLK/GPIOH4
  192. GPIO_1:SIM0_XMT/PWM_FAULT2/SDHC_DAT7/GPIOG4/RGPIO
  193. GPIO_2:SIM0_VEN/PWM_FAULT0/GPIOG3/RGPIO
  194. GPIO_3:SIM0_CLK/PWM_FAULT1/SDHC_DAT4/GPIOG0/RGPIO
  195. GPIO_4:SIM0_RST/PWM_FORCE/SDHC_DAT6/GPIOG2/RGPIO
  196. GPIO_5:SIM0_PD/PWM_SYNC/SDHC_DAT5/GPIOG1/RGPIO
  197. GPIO_6:DDATA[0]/GPIOI6
  198. GPIO_7:DDATA[1]/GPIOI7
  199. GPIO_8:DDATA[2]/GPIOH0
  200. GPIO_9:DDATA[3]/GPIOH1
  201. GPIO_10:MII0_TXER/RMII1_MDIO/ULPI_DATA4/GPIOK7
  202. */
  203. //看门狗/运行灯(看门狗边沿有效,运行灯低有效)
  204. #define GPIO_WATCHDOG_BIT 7
  205. #define GPIO_WATCHDOG_LOW() GPIO_D_L(GPIO_WATCHDOG_BIT)
  206. #define GPIO_WATCHDOG_HIGH() GPIO_D_H(GPIO_WATCHDOG_BIT)
  207. #define GPIO_WATCHDOG_STATUS() GPIO_D_S(GPIO_WATCHDOG_BIT)
  208. #define GPIO_WATCHDOG_INIT() GPIO_D_L(GPIO_WATCHDOG_BIT); \
  209. GPIO_D_O(GPIO_WATCHDOG_BIT)
  210. //NOR flash写保护(低禁止写) J0
  211. #define GPIO_WP_NORFLASH_BIT 0
  212. #define GPIO_WP_NORFLASH_LOW() GPIO_J_L(GPIO_WP_NORFLASH_BIT)
  213. #define GPIO_WP_NORFLASH_HIGH() GPIO_J_H(GPIO_WP_NORFLASH_BIT)
  214. #define GPIO_WP_NORFLASH_INIT() GPIO_J_L(GPIO_WP_NORFLASH_BIT); \
  215. GPIO_J_O(GPIO_WP_NORFLASH_BIT)
  216. //ESAM加密芯片
  217. //DSPI0_CTRN:IRQ7:C6(电源控制)
  218. //#define GPIO_ESAM_POWER_BIT 6
  219. #define GPIO_ESAM_POWER_LOW() esam_power_ctrl(0)//GPIO_C_L(GPIO_ESAM_POWER_BIT)
  220. #define GPIO_ESAM_POWER_HIGH() esam_power_ctrl(1)//GPIO_C_H(GPIO_ESAM_POWER_BIT)
  221. //#define GPIO_ESAM_POWER_INIT() GPIO_C_L(GPIO_ESAM_POWER_BIT);GPIO_C_O(GPIO_ESAM_POWER_BIT)
  222. //GPS_对时,使用两个管脚,一个用作捕获,一个用作检查检查管脚电平。
  223. //这是因为用作捕获的管脚,在MCF5441X上没有办法取得管脚的状态
  224. #define GPIO_GPS_INT_BIT 1
  225. #define GPIO_GPS_INT_STATUS() GPIO_C_S(GPIO_GPS_INT_BIT)
  226. #define GPIO_GPS_INT_INIT() if(0)//do{ MCF_PAD_PAR_TIMER |= (3<<(CFG_DTIM_GPS_CAP*2));}while(0)
  227. //GPS对时输出(给各个分板)
  228. #define GPIO_GPS_LOW() {}
  229. #define GPIO_GPS_HIGH() {}
  230. #define GPIO_GPS_INIT() {}
  231. //LED
  232. #ifdef __DFTU_V4_HV0102__ // sunxi 20180724 第二版
  233. //GPIO_LED_COMM 去掉了
  234. #define GPIO_LED_COMM_ON() do{}while(0)
  235. #define GPIO_LED_COMM_OFF() do{}while(0)
  236. #define GPIO_LED_COMM_STATUS() 0
  237. #define GPIO_LED_COMM_INIT() do{}while(0)
  238. //GPIO_LED_ACT 去掉了
  239. #define GPIO_LED_ACT_ON() do{}while(0)
  240. #define GPIO_LED_ACT_OFF() do{}while(0)
  241. #define GPIO_LED_ACT_STATUS() 0
  242. #define GPIO_LED_ACT_INIT() do{}while(0)
  243. #else // sunxi 20180724 第一版
  244. //GPIO_LED_COMM H4
  245. #define GPIO_LED_COMM_BIT 4
  246. #define GPIO_LED_COMM_ON() GPIO_H_L(GPIO_LED_COMM_BIT)
  247. #define GPIO_LED_COMM_OFF() GPIO_H_H(GPIO_LED_COMM_BIT)
  248. #define GPIO_LED_COMM_STATUS() GPIO_H_S(GPIO_LED_COMM_BIT)
  249. #define GPIO_LED_COMM_INIT() GPIO_H_H(GPIO_LED_COMM_BIT); \
  250. GPIO_H_O(GPIO_LED_COMM_BIT)
  251. //GPIO_LED_ACT G0
  252. #define GPIO_LED_ACT_BIT 0
  253. #define GPIO_LED_ACT_ON() GPIO_G_L(GPIO_LED_ACT_BIT)
  254. #define GPIO_LED_ACT_OFF() GPIO_G_H(GPIO_LED_ACT_BIT)
  255. #define GPIO_LED_ACT_STATUS() GPIO_G_S(GPIO_LED_ACT_BIT)
  256. #define GPIO_LED_ACT_INIT() GPIO_G_H(GPIO_LED_ACT_BIT); \
  257. GPIO_G_O(GPIO_LED_ACT_BIT)
  258. #endif
  259. #define MCF_REG08(x) x
  260. #define MCF_REG16(x) x
  261. #define MCF_REG32(x) x
  262. #define CFG_BSP_DEBUG 1
  263. #endif //_BSPCONFIG_H_