ganz hässliche code zwischen speicher
This commit is contained in:
@ -29,6 +29,7 @@
|
||||
void ftcan_msg_received_cb(uint16_t id, size_t datalen, const uint8_t *data);
|
||||
|
||||
HAL_StatusTypeDef can_init(FDCAN_HandleTypeDef* handle);
|
||||
HAL_StatusTypeDef can_change_ts_state(TSState state);
|
||||
HAL_StatusTypeDef can_update_state();
|
||||
void ftcan_msg_received_cb(uint16_t id, size_t len, const uint8_t* data);
|
||||
|
||||
#endif
|
||||
@ -61,7 +61,6 @@ void Error_Handler(void);
|
||||
/* Private defines -----------------------------------------------------------*/
|
||||
#define TS_ON_Pin GPIO_PIN_8
|
||||
#define TS_ON_GPIO_Port GPIOI
|
||||
#define TS_ON_EXTI_IRQn EXTI9_5_IRQn
|
||||
#define SDC_ON_Pin GPIO_PIN_0
|
||||
#define SDC_ON_GPIO_Port GPIOI
|
||||
#define SDC_ENABLE_Pin GPIO_PIN_1
|
||||
@ -79,8 +78,9 @@ void Error_Handler(void);
|
||||
#define IMD_ERROR_GPIO_Port GPIOI
|
||||
|
||||
/* USER CODE BEGIN Private defines */
|
||||
#define AMS_TIMEOUT 150
|
||||
#define AMS_TIMEOUT 5000
|
||||
#define TRY(call) {if (call) return HAL_ERROR;}
|
||||
#define SHOW_STATE(call) {if (call) led_blink(&htim3, COLOR_ERROR, 0);}
|
||||
/* USER CODE END Private defines */
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@ -47,5 +47,8 @@ extern IMDData imd_data;
|
||||
void error_led_init();
|
||||
void sdc_init();
|
||||
void ts_handle_ams_status(const uint8_t* data);
|
||||
HAL_StatusTypeDef change_ts_state(TSState state);
|
||||
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
|
||||
HAL_StatusTypeDef check_sdc_state();
|
||||
|
||||
#endif
|
||||
@ -55,7 +55,7 @@ void SVC_Handler(void);
|
||||
void DebugMon_Handler(void);
|
||||
void PendSV_Handler(void);
|
||||
void SysTick_Handler(void);
|
||||
void EXTI9_5_IRQHandler(void);
|
||||
void FDCAN1_IT0_IRQHandler(void);
|
||||
void EXTI15_10_IRQHandler(void);
|
||||
/* USER CODE BEGIN EFP */
|
||||
|
||||
|
||||
Submodule Software/Core/Lib/can-halal updated: 887f92167d...60dab2ade1
@ -6,6 +6,7 @@
|
||||
#include "can-halal.h"
|
||||
|
||||
extern int can_ams_last_tick;
|
||||
extern TSState request_state;
|
||||
|
||||
HAL_StatusTypeDef can_init(FDCAN_HandleTypeDef* handle) {
|
||||
TRY(ftcan_init(handle));
|
||||
@ -15,17 +16,17 @@ HAL_StatusTypeDef can_init(FDCAN_HandleTypeDef* handle) {
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
HAL_StatusTypeDef can_change_ts_state(TSState state) {
|
||||
uint8_t data[2];
|
||||
if (state == TS_ACTIVE) {
|
||||
data[0] = state;
|
||||
return ftcan_transmit(CAN_ID_AMS_IN, data, sizeof(data));
|
||||
} else if (state == TS_INACTIVE){
|
||||
data[0] = state;
|
||||
return ftcan_transmit(CAN_ID_AMS_IN, data, sizeof(data));
|
||||
HAL_StatusTypeDef can_update_state(){
|
||||
uint8_t data;
|
||||
if (request_state == TS_ACTIVE){
|
||||
data = 0x01;
|
||||
} else if (request_state == TS_INACTIVE) {
|
||||
data = 0x00;
|
||||
} else {
|
||||
return HAL_ERROR;
|
||||
}
|
||||
|
||||
return ftcan_transmit(CAN_ID_AMS_IN, &data, sizeof(data));
|
||||
}
|
||||
|
||||
void ftcan_msg_received_cb(uint16_t id, size_t len, const uint8_t* data) {
|
||||
|
||||
@ -63,8 +63,9 @@ PCD_HandleTypeDef hpcd_USB_OTG_FS;
|
||||
SDRAM_HandleTypeDef hsdram1;
|
||||
|
||||
/* USER CODE BEGIN PV */
|
||||
extern TSStateHandle ts_state;
|
||||
int can_ams_last_tick = 0;
|
||||
|
||||
GPIO_PinState TSON = 0;
|
||||
/* USER CODE END PV */
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
@ -134,7 +135,9 @@ int main(void)
|
||||
error_led_init();
|
||||
sdc_init();
|
||||
led_init(&htim3);
|
||||
can_init(&hfdcan1);
|
||||
while (can_init(&hfdcan1)){
|
||||
led_blink(&htim3, 0x00FFFF00, 0);
|
||||
}
|
||||
/* USER CODE END 2 */
|
||||
|
||||
/* Infinite loop */
|
||||
@ -147,9 +150,18 @@ int main(void)
|
||||
if (HAL_GetTick() - can_ams_last_tick > AMS_TIMEOUT) {
|
||||
error_led_init();
|
||||
led_blink(&htim3, COLOR_ERROR, 0);
|
||||
} else {
|
||||
led_blink(&htim3, COLOR_HEARTBEAT, 1000);
|
||||
}
|
||||
|
||||
led_blink(&htim3, COLOR_HEARTBEAT, 1000);
|
||||
// SHOW_STATE(check_sdc_state());
|
||||
// SHOW_STATE(can_update_state());
|
||||
TSON = HAL_GPIO_ReadPin(TS_ON_GPIO_Port, TS_ON_Pin);
|
||||
if (TSON == 1){
|
||||
change_ts_state(TS_ACTIVE);
|
||||
}
|
||||
check_sdc_state();
|
||||
can_update_state();
|
||||
}
|
||||
/* USER CODE END 3 */
|
||||
}
|
||||
@ -273,9 +285,9 @@ static void MX_FDCAN1_Init(void)
|
||||
hfdcan1.Init.AutoRetransmission = DISABLE;
|
||||
hfdcan1.Init.TransmitPause = DISABLE;
|
||||
hfdcan1.Init.ProtocolException = DISABLE;
|
||||
hfdcan1.Init.NominalPrescaler = 16;
|
||||
hfdcan1.Init.NominalPrescaler = 5;
|
||||
hfdcan1.Init.NominalSyncJumpWidth = 1;
|
||||
hfdcan1.Init.NominalTimeSeg1 = 1;
|
||||
hfdcan1.Init.NominalTimeSeg1 = 8;
|
||||
hfdcan1.Init.NominalTimeSeg2 = 1;
|
||||
hfdcan1.Init.DataPrescaler = 1;
|
||||
hfdcan1.Init.DataSyncJumpWidth = 1;
|
||||
@ -284,7 +296,7 @@ static void MX_FDCAN1_Init(void)
|
||||
hfdcan1.Init.MessageRAMOffset = 0;
|
||||
hfdcan1.Init.StdFiltersNbr = 32;
|
||||
hfdcan1.Init.ExtFiltersNbr = 0;
|
||||
hfdcan1.Init.RxFifo0ElmtsNbr = 0;
|
||||
hfdcan1.Init.RxFifo0ElmtsNbr = 16;
|
||||
hfdcan1.Init.RxFifo0ElmtSize = FDCAN_DATA_BYTES_8;
|
||||
hfdcan1.Init.RxFifo1ElmtsNbr = 0;
|
||||
hfdcan1.Init.RxFifo1ElmtSize = FDCAN_DATA_BYTES_8;
|
||||
@ -292,7 +304,7 @@ static void MX_FDCAN1_Init(void)
|
||||
hfdcan1.Init.RxBufferSize = FDCAN_DATA_BYTES_8;
|
||||
hfdcan1.Init.TxEventsNbr = 0;
|
||||
hfdcan1.Init.TxBuffersNbr = 0;
|
||||
hfdcan1.Init.TxFifoQueueElmtsNbr = 0;
|
||||
hfdcan1.Init.TxFifoQueueElmtsNbr = 32;
|
||||
hfdcan1.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;
|
||||
hfdcan1.Init.TxElmtSize = FDCAN_DATA_BYTES_8;
|
||||
if (HAL_FDCAN_Init(&hfdcan1) != HAL_OK)
|
||||
@ -709,17 +721,11 @@ static void MX_GPIO_Init(void)
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(GPIOI, AMS_ERROR_Pin|IMD_ERROR_Pin, GPIO_PIN_SET);
|
||||
|
||||
/*Configure GPIO pin : TS_ON_Pin */
|
||||
GPIO_InitStruct.Pin = TS_ON_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(TS_ON_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pin : SDC_ON_Pin */
|
||||
GPIO_InitStruct.Pin = SDC_ON_Pin;
|
||||
/*Configure GPIO pins : TS_ON_Pin SDC_ON_Pin */
|
||||
GPIO_InitStruct.Pin = TS_ON_Pin|SDC_ON_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(SDC_ON_GPIO_Port, &GPIO_InitStruct);
|
||||
HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pin : SDC_ENABLE_Pin */
|
||||
GPIO_InitStruct.Pin = SDC_ENABLE_Pin;
|
||||
@ -748,9 +754,6 @@ static void MX_GPIO_Init(void)
|
||||
HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);
|
||||
|
||||
/* EXTI interrupt init*/
|
||||
HAL_NVIC_SetPriority(TS_ON_EXTI_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(TS_ON_EXTI_IRQn);
|
||||
|
||||
HAL_NVIC_SetPriority(ENC_PUSH_ON_EXTI_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(ENC_PUSH_ON_EXTI_IRQn);
|
||||
|
||||
|
||||
@ -4,6 +4,8 @@
|
||||
|
||||
TSStateHandle ts_state;
|
||||
IMDData imd_data;
|
||||
uint8_t led_state;
|
||||
TSState request_state = TS_INACTIVE;
|
||||
|
||||
void error_led_init() {
|
||||
HAL_GPIO_WritePin(AMS_ERROR_GPIO_Port, AMS_ERROR_Pin, GPIO_PIN_SET);
|
||||
@ -17,34 +19,38 @@ void sdc_init() {
|
||||
void ts_handle_ams_status(const uint8_t* data) {
|
||||
ts_state.current_state = data[0] & 0b01111111;
|
||||
imd_data.ok = data[6] & 0b10000000;
|
||||
led_state = data[7];
|
||||
|
||||
if (ts_state.current_state != TS_ERROR) {
|
||||
HAL_GPIO_WritePin(AMS_ERROR_GPIO_Port, AMS_ERROR_Pin, GPIO_PIN_RESET);
|
||||
} else {
|
||||
if ((led_state | 0b00000010) == 0b10) {
|
||||
HAL_GPIO_WritePin(AMS_ERROR_GPIO_Port, AMS_ERROR_Pin, GPIO_PIN_SET);
|
||||
} else {
|
||||
HAL_GPIO_WritePin(AMS_ERROR_GPIO_Port, AMS_ERROR_Pin, GPIO_PIN_RESET);
|
||||
}
|
||||
|
||||
if (imd_data.ok) {
|
||||
HAL_GPIO_WritePin(IMD_ERROR_GPIO_Port, IMD_ERROR_Pin, GPIO_PIN_RESET);
|
||||
} else {
|
||||
if ((led_state | 0b00000100) == 0b100) {
|
||||
HAL_GPIO_WritePin(IMD_ERROR_GPIO_Port, IMD_ERROR_Pin, GPIO_PIN_SET);
|
||||
} else {
|
||||
HAL_GPIO_WritePin(IMD_ERROR_GPIO_Port, IMD_ERROR_Pin, GPIO_PIN_RESET);
|
||||
}
|
||||
}
|
||||
|
||||
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
|
||||
{
|
||||
if(GPIO_Pin == TS_ON_Pin) {
|
||||
can_change_ts_state(TS_ACTIVE);
|
||||
} else if (GPIO_Pin == ENC_PUSH_ON_Pin){
|
||||
can_change_ts_state(TS_INACTIVE);
|
||||
HAL_StatusTypeDef change_ts_state(TSState state) {
|
||||
if (state == TS_ACTIVE) {
|
||||
request_state = TS_ACTIVE;
|
||||
|
||||
return HAL_OK;
|
||||
} else if (state == TS_INACTIVE){
|
||||
request_state = TS_INACTIVE;
|
||||
|
||||
return HAL_OK;
|
||||
} else {
|
||||
__NOP();
|
||||
return HAL_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
HAL_StatusTypeDef check_sdc_state() {
|
||||
if (!HAL_GPIO_ReadPin(SDC_ON_GPIO_Port, SDC_ON_Pin)) {
|
||||
TRY(can_change_ts_state(TS_INACTIVE));
|
||||
TRY(change_ts_state(TS_INACTIVE));
|
||||
}
|
||||
|
||||
return HAL_OK;
|
||||
|
||||
@ -163,6 +163,9 @@ void HAL_FDCAN_MspInit(FDCAN_HandleTypeDef* hfdcan)
|
||||
GPIO_InitStruct.Alternate = GPIO_AF9_FDCAN1;
|
||||
HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
|
||||
|
||||
/* FDCAN1 interrupt Init */
|
||||
HAL_NVIC_SetPriority(FDCAN1_IT0_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(FDCAN1_IT0_IRQn);
|
||||
/* USER CODE BEGIN FDCAN1_MspInit 1 */
|
||||
|
||||
/* USER CODE END FDCAN1_MspInit 1 */
|
||||
@ -193,6 +196,8 @@ void HAL_FDCAN_MspDeInit(FDCAN_HandleTypeDef* hfdcan)
|
||||
*/
|
||||
HAL_GPIO_DeInit(GPIOH, GPIO_PIN_13|GPIO_PIN_14);
|
||||
|
||||
/* FDCAN1 interrupt DeInit */
|
||||
HAL_NVIC_DisableIRQ(FDCAN1_IT0_IRQn);
|
||||
/* USER CODE BEGIN FDCAN1_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END FDCAN1_MspDeInit 1 */
|
||||
|
||||
@ -55,7 +55,7 @@
|
||||
/* USER CODE END 0 */
|
||||
|
||||
/* External variables --------------------------------------------------------*/
|
||||
|
||||
extern FDCAN_HandleTypeDef hfdcan1;
|
||||
/* USER CODE BEGIN EV */
|
||||
|
||||
/* USER CODE END EV */
|
||||
@ -199,17 +199,17 @@ void SysTick_Handler(void)
|
||||
/******************************************************************************/
|
||||
|
||||
/**
|
||||
* @brief This function handles EXTI line[9:5] interrupts.
|
||||
* @brief This function handles FDCAN1 interrupt 0.
|
||||
*/
|
||||
void EXTI9_5_IRQHandler(void)
|
||||
void FDCAN1_IT0_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN EXTI9_5_IRQn 0 */
|
||||
/* USER CODE BEGIN FDCAN1_IT0_IRQn 0 */
|
||||
|
||||
/* USER CODE END EXTI9_5_IRQn 0 */
|
||||
HAL_GPIO_EXTI_IRQHandler(TS_ON_Pin);
|
||||
/* USER CODE BEGIN EXTI9_5_IRQn 1 */
|
||||
/* USER CODE END FDCAN1_IT0_IRQn 0 */
|
||||
HAL_FDCAN_IRQHandler(&hfdcan1);
|
||||
/* USER CODE BEGIN FDCAN1_IT0_IRQn 1 */
|
||||
|
||||
/* USER CODE END EXTI9_5_IRQn 1 */
|
||||
/* USER CODE END FDCAN1_IT0_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user