// // Created by Cfif on 14.12.23. // #include #include "fc7xxx_driver_port.h" #include "fc7xxx_driver_gpio.h" #include "Lins.h" tLinPorts LIN_PORTS; #define numOfClassicPID 20 const uint8_t classicPID[numOfClassicPID] = { CFR_INI, CFR_SET, CFR_MOD, CFR_ADR, CFR_PRG, DFR_PRG, RFR_PRG, RFR_ISSR1, RFR_ISSR2, RFR_ISSR3, RFR_ISSR4, RFR_ISSR5, RFR_ISSR6, RFR_ISSR7, RFR_ISSR8, RFR_ISSR9, DFR_STA, RFR_STA, DFR_IDE, RFR_IDE }; static void Lin0CallbackHandler(uint8_t u8LinIndex, void *state) { LIN_PORTS.lin0.LinExtCallbackHandler(LIN_PORTS.lin0.envCallExtBack, u8LinIndex, state); } void FCUART4_RxTx_IRQHandler(void) { LIN_DrvIRQHandler(LIN_PORTS.lin0.UART_INDEX); } tLinData *Lin0_Init(lin_callback_ext_t Lin_ExtCallbackHandler) { tLinPorts *env = &LIN_PORTS; PORT_InitType tInitStruct = {0}; GPIO_InitType tGpioInitStruct = {0}; // Port D12: MUX = ALT3, UART4_RX tInitStruct.u32PortPins = PORT_PIN_12; tInitStruct.uPortPinMux.u32PortPinMode = PORTD_12_FCUART4_RX; tInitStruct.bPullEn = true; tInitStruct.ePullSel = PORT_PULL_UP; PORT_InitPins(PORT_D, &tInitStruct); tGpioInitStruct.u32GpioPins = GPIO_PIN_12; tGpioInitStruct.ePinDirection = GPIO_IN; GPIO_InitPins(GPIO_D, &tGpioInitStruct); // Port D5: MUX = ALT3, UART4_TX tInitStruct.u32PortPins = PORT_PIN_5; tInitStruct.uPortPinMux.u32PortPinMode = PORTD_5_FCUART4_TX; PORT_InitPins(PORT_D, &tInitStruct); tGpioInitStruct.u32GpioPins = GPIO_PIN_5; tGpioInitStruct.ePinDirection = GPIO_OUT; tGpioInitStruct.ePinLevel = GPIO_HIGH; GPIO_InitPins(GPIO_D, &tGpioInitStruct); // Port D18: MUX = GPIO output ENABLE tInitStruct.u32PortPins = PORT_PIN_18; tInitStruct.uPortPinMux.u32PortPinMode = PORT_GPIO_MODE; PORT_InitPins(PORT_D, &tInitStruct); tGpioInitStruct.u32GpioPins = GPIO_PIN_18; tGpioInitStruct.ePinDirection = GPIO_OUT; tGpioInitStruct.ePinLevel = GPIO_HIGH; GPIO_InitPins(GPIO_D, &tGpioInitStruct); LIN_Initial( &env->lin0, FCUART4, 9600, 4, // UART0 = 0 ... UART7 = 7 FCUART4_IRQn, // FCUART0_IRQn ... FCUART7_IRQn 0xFF, NULL, Lin0CallbackHandler, Lin_ExtCallbackHandler, &env->lin0.linData, classicPID, numOfClassicPID ); env->lin0_Io = vLinGetIo(&env->lin0); return &env->lin0.linData; }