#include #include "board.h" #include "debug.h" #include "regs_base.h" #include "irq_num.h" #include "clock_cfg.h" #include "reset_cfg.h" #include "pinmux_cfg.h" #include "eth_cfg.h" #include "lwip/err.h" #include "lwip/inet.h" #include "lwip/tcp.h" #include "lwip/timeouts.h" #include #include "sdrv_eth.h" #include "lwip/udp.h" #include "flexcan_cfg.h" #include "interface_config.h" //app包含 #include "app/app_config.h" #define IP_ADDR0 10 #define IP_ADDR1 18 #define IP_ADDR2 252 #define IP_ADDR3 34 extern int btm_init(void); extern struct tcp_pcb *netdemo_connect_server(char *ip, int port); extern bool netdemo_tcp_connected(void); extern bool netdemo_tcp_send_done(void); extern void netdemo_clear_tcp_send_done(void); static bool g_eth1_rx_pkt; static void eth_dma_rx_int_cb(struct net_driver_s *dev) { if (dev == &g_eth1_dev) g_eth1_rx_pkt = true; } uint8_t mainCnt = 0; uint8_t mainCntarr[8] = {0x56,0x88,0x98,0x79,0x23}; uint8_t desIp[4] = {192,168,17,3}; uint8_t test_app[26] = {0}; //uint8_t key_state = 0; int main(void) { bool eth_pool_rx = false; // ip4_addr_t Desaddr; // struct pbuf *DesPuff = NULL; // char *g_lwip_demo_sendbuf = "ALIENTEK DATA\r\n"; uint8_t BOOT_Arr[2] = {0x01,0x02}; // struct udp_pcb *udpcb_2; //------------------------------------------------------------------------------ // 释放MCU各模块reset信号 board_reset_init(); // 配置时钟 int ret = sdrv_ckgen_init(&g_clock_config); ASSERT(ret == 0); // VIC初始化 irq_initialize(VIC1_BASE, IRQ_MAX_INTR_NUM); // 配置pinmux sdrv_pinctrl_init(NUM_OF_CONFIGURED_PINS, g_pin_init_config); feedWatchdog();//喂狗 // Timer初始化,用于提供LWIP sys_now接口获取当前时间 btm_init(); // 使能打印 board_debug_console_init(); //遥控串口初始化 // uart_Initialize(); //初始化所有can initialization_All_Flexcan(); // ETH初始化 board_eth_init(); feedWatchdog();//喂狗 if (!eth_pool_rx) { // 使能DMA Rx中断。Tx未使用中断,因为ETH速率很高, // Tx中断处理耗时反而可能拖慢发送速度。 dwc_eth_enable_dma_rx_int(&g_eth1_dev, eth_dma_rx_int_cb); } // UDP_Echo_Init();//读取 //以太网端口初始化 UDP_Echo_Init(UDPCB_1, udp_Callback_1, COMMUNICATION_PORT); UDP_Echo_Init(UDPCB_2, udp_Callback_2, UPPER_PORT); UDP_Echo_Init(UDPCB_3, udp_Callback_3, PARAM_PORT); // IP4_ADDR(&Desaddr,IP_ADDR0,IP_ADDR1,IP_ADDR2,IP_ADDR3); // wdt_init(WDT_OUTms); //读取标志 g_systemDataRecord.canBootloaderUpgrade = rdbyte_24c02(0x00); CAN_Send_Msg(&can_handle_6,OTA_CANTxID, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, BOOT_Arr,2, TX_MB_INDEX);//app 帧 ssdk_printf(SSDK_NOTICE, "SSDK E3 V1.68\r\n"); // brakeAppInit(); // 初始化框架 initFramework(); testAppInit(); paramAppInit(); ethernetAppInit(); for (;;) { // 处理信号 processMessages(); // 接收ETH帧,并传递给LWIP协议栈 // 如果使能接收中断,因为ISR里会disable接收中断,因此,这里对于 // 中断接收标志(g_eth1_rx_pkt)的处理过程中不会有 // 新的接收中断被响应,所以,这里不存在原子性问题。 if ((!eth_pool_rx && g_eth1_rx_pkt) || eth_pool_rx) { g_eth1_rx_pkt = false; dwc_eth_rx(&g_eth1_dev, eth_pool_rx); } // LWIP协议栈接口,用于做LWIP超时检测 sys_check_timeouts(); if(1 == Btm10ms)//10ms到 { Btm10ms = 0; bootmian();//boot和喂狗处理 mainCnt ++; if(mainCnt>=10) { mainCnt = 0; // CAN_Send_Msg(&can_handle_0, 0x400, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, mainCntarr, 8, 15); // CAN_Send_Msg(&can_handle_1, 0x401, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, mainCntarr, 8, 15); // CAN_Send_Msg(&can_handle_2, 0x402, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, mainCntarr, 8, 15); // CAN_Send_Msg(&can_handle_3, 0x403, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, mainCntarr, 8, 15); // CAN_Send_Msg(&can_handle_4, 0x404, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, mainCntarr, 8, 15); // CAN_Send_Msg(&can_handle_5, 0x405, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, mainCntarr, 8, 15); CAN_Send_Msg(&can_handle_6, 0x453, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, &un_temp_module_input.ArrData.arr[0][0], 8, 15); // CAN_Send_Msg(&can_handle_6, 0x454, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, &un_temp_module_input.ArrData.arr[1][0], 8, 16); CAN_Send_Msg(&can_handle_6, 0x455, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, &un_temp_module_input.ArrData.arr[1][0], 8, 17); CAN_Send_Msg(&can_handle_6, 0x456, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, &un_bms_input.ArrData.arr[0][0] , 8, 18); CAN_Send_Msg(&can_handle_6, 0x457, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, &un_bms_input.ArrData.arr[1][0] , 8, 19); CAN_Send_Msg(&can_handle_6, 0x458, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, &un_motor_input2.ArrData.arr[0][0], 8, 20); CAN_Send_Msg(&can_handle_6, 0x459, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, &un_motor_input1.ArrData.arr[0][0], 8, 14); mainCntarr[0] = can_fault_info.navigator_state;//状态发送出去 mainCntarr[1] = can_fault_info.motor1_state; mainCntarr[2] = can_fault_info.motor2_state; mainCntarr[3] = can_fault_info.bms_state; mainCntarr[4] = can_fault_info.temperature_state; mainCntarr[5] = can_fault_info.remote_state; CAN_Send_Msg(&can_handle_6, 0x461, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, mainCntarr, 8, 15); gpioTimerProcess(mainCntarr); CAN_Send_Msg(&can_handle_6, 0x12000023, FLEXCAN_EXTEND_FRAME, FLEXCAN_FrameTypeData, &un_remote_control_input.ArrData.arr[0][0], 8, 16); CAN_Send_Msg(&can_handle_6, 0x462, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, &un_sw_sample.ArrData.arr[0][0], 6, 15); powerOn(); ethernetTimerProcess(); canTimerProcess(); flexcan_Busoff_Recovery(); // ssdk_printf(SSDK_NOTICE, "SSDK E3 run!\r\n"); // UdpSendToData(UDPCB_1,test_app, 25, desIp, 8011); // UdpSendToData(UDPCB_2,(uint8_t *)g_lwip_demo_sendbuf, 12, desIp, 8011); } } } }