[FL-1311] F6, app LF-RFID: Updated timer api and config (#465)
* F6, app LF-RFID: Updated timer api and config * Api hal rfid: updated comments Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
		| @@ -2,6 +2,11 @@ | ||||
| #include <api-hal-ibutton.h> | ||||
| #include <api-hal-resources.h> | ||||
|  | ||||
| #define LFRFID_READ_TIM htim1 | ||||
| #define LFRFID_READ_CHANNEL TIM_CHANNEL_1 | ||||
| #define LFRFID_EMULATE_TIM htim2 | ||||
| #define LFRFID_EMULATE_CHANNEL TIM_CHANNEL_3 | ||||
|  | ||||
| void api_hal_rfid_pins_reset() { | ||||
|     // ibutton bus disable | ||||
|     api_hal_ibutton_stop(); | ||||
| @@ -56,21 +61,20 @@ void api_hal_rfid_tim_read(float freq, float duty_cycle) { | ||||
|     TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; | ||||
|  | ||||
|     // basic PWM setup with needed freq and internal clock | ||||
|     LFRFID_TIM.Instance = TIM1; | ||||
|     LFRFID_TIM.Init.Prescaler = 0; | ||||
|     LFRFID_TIM.Init.CounterMode = TIM_COUNTERMODE_UP; | ||||
|     LFRFID_TIM.Init.Period = period; | ||||
|     LFRFID_TIM.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; | ||||
|     LFRFID_TIM.Init.RepetitionCounter = 0; | ||||
|     LFRFID_TIM.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; | ||||
|     if(HAL_TIM_Base_Init(&LFRFID_TIM) != HAL_OK) { | ||||
|     LFRFID_READ_TIM.Init.Prescaler = 0; | ||||
|     LFRFID_READ_TIM.Init.CounterMode = TIM_COUNTERMODE_UP; | ||||
|     LFRFID_READ_TIM.Init.Period = period; | ||||
|     LFRFID_READ_TIM.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; | ||||
|     LFRFID_READ_TIM.Init.RepetitionCounter = 0; | ||||
|     LFRFID_READ_TIM.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; | ||||
|     if(HAL_TIM_Base_Init(&LFRFID_READ_TIM) != HAL_OK) { | ||||
|         Error_Handler(); | ||||
|     } | ||||
|     sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; | ||||
|     if(HAL_TIM_ConfigClockSource(&LFRFID_TIM, &sClockSourceConfig) != HAL_OK) { | ||||
|     if(HAL_TIM_ConfigClockSource(&LFRFID_READ_TIM, &sClockSourceConfig) != HAL_OK) { | ||||
|         Error_Handler(); | ||||
|     } | ||||
|     if(HAL_TIM_PWM_Init(&LFRFID_TIM) != HAL_OK) { | ||||
|     if(HAL_TIM_PWM_Init(&LFRFID_READ_TIM) != HAL_OK) { | ||||
|         Error_Handler(); | ||||
|     } | ||||
|  | ||||
| @@ -78,19 +82,19 @@ void api_hal_rfid_tim_read(float freq, float duty_cycle) { | ||||
|     sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; | ||||
|     sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET; | ||||
|     sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; | ||||
|     if(HAL_TIMEx_MasterConfigSynchronization(&LFRFID_TIM, &sMasterConfig) != HAL_OK) { | ||||
|     if(HAL_TIMEx_MasterConfigSynchronization(&LFRFID_READ_TIM, &sMasterConfig) != HAL_OK) { | ||||
|         Error_Handler(); | ||||
|     } | ||||
|  | ||||
|     // pwm config | ||||
|     sConfigOC.OCMode = TIM_OCMODE_PWM1; | ||||
|     sConfigOC.Pulse = (uint32_t)(LFRFID_TIM.Init.Period * duty_cycle); | ||||
|     sConfigOC.Pulse = (uint32_t)(LFRFID_READ_TIM.Init.Period * duty_cycle); | ||||
|     sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; | ||||
|     sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; | ||||
|     sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; | ||||
|     sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; | ||||
|     sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; | ||||
|     if(HAL_TIM_OC_ConfigChannel(&LFRFID_TIM, &sConfigOC, LFRFID_CH) != HAL_OK) { | ||||
|     if(HAL_TIM_OC_ConfigChannel(&LFRFID_READ_TIM, &sConfigOC, LFRFID_READ_CHANNEL) != HAL_OK) { | ||||
|         Error_Handler(); | ||||
|     } | ||||
|  | ||||
| @@ -108,17 +112,17 @@ void api_hal_rfid_tim_read(float freq, float duty_cycle) { | ||||
|     sBreakDeadTimeConfig.Break2Filter = 0; | ||||
|     sBreakDeadTimeConfig.Break2AFMode = TIM_BREAK_AFMODE_INPUT; | ||||
|     sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; | ||||
|     if(HAL_TIMEx_ConfigBreakDeadTime(&LFRFID_TIM, &sBreakDeadTimeConfig) != HAL_OK) { | ||||
|     if(HAL_TIMEx_ConfigBreakDeadTime(&LFRFID_READ_TIM, &sBreakDeadTimeConfig) != HAL_OK) { | ||||
|         Error_Handler(); | ||||
|     } | ||||
| } | ||||
|  | ||||
| void api_hal_rfid_tim_read_start() { | ||||
|     HAL_TIMEx_PWMN_Start(&LFRFID_TIM, LFRFID_CH); | ||||
|     HAL_TIMEx_PWMN_Start(&LFRFID_READ_TIM, LFRFID_READ_CHANNEL); | ||||
| } | ||||
|  | ||||
| void api_hal_rfid_tim_read_stop() { | ||||
|     HAL_TIMEx_PWMN_Stop(&LFRFID_TIM, LFRFID_CH); | ||||
|     HAL_TIMEx_PWMN_Stop(&LFRFID_READ_TIM, LFRFID_READ_CHANNEL); | ||||
| } | ||||
|  | ||||
| void api_hal_rfid_tim_emulate(float freq) { | ||||
| @@ -131,21 +135,20 @@ void api_hal_rfid_tim_emulate(float freq) { | ||||
|     TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; | ||||
|  | ||||
|     // basic PWM setup with needed freq and internal clock | ||||
|     LFRFID_TIM.Instance = TIM1; | ||||
|     LFRFID_TIM.Init.Prescaler = prescaler; | ||||
|     LFRFID_TIM.Init.CounterMode = TIM_COUNTERMODE_UP; | ||||
|     LFRFID_TIM.Init.Period = 1; | ||||
|     LFRFID_TIM.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; | ||||
|     LFRFID_TIM.Init.RepetitionCounter = 0; | ||||
|     LFRFID_TIM.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; | ||||
|     if(HAL_TIM_Base_Init(&LFRFID_TIM) != HAL_OK) { | ||||
|     LFRFID_EMULATE_TIM.Init.Prescaler = prescaler; | ||||
|     LFRFID_EMULATE_TIM.Init.CounterMode = TIM_COUNTERMODE_UP; | ||||
|     LFRFID_EMULATE_TIM.Init.Period = 1; | ||||
|     LFRFID_EMULATE_TIM.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; | ||||
|     LFRFID_EMULATE_TIM.Init.RepetitionCounter = 0; | ||||
|     LFRFID_EMULATE_TIM.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; | ||||
|     if(HAL_TIM_Base_Init(&LFRFID_EMULATE_TIM) != HAL_OK) { | ||||
|         Error_Handler(); | ||||
|     } | ||||
|     sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; | ||||
|     if(HAL_TIM_ConfigClockSource(&LFRFID_TIM, &sClockSourceConfig) != HAL_OK) { | ||||
|     if(HAL_TIM_ConfigClockSource(&LFRFID_EMULATE_TIM, &sClockSourceConfig) != HAL_OK) { | ||||
|         Error_Handler(); | ||||
|     } | ||||
|     if(HAL_TIM_PWM_Init(&LFRFID_TIM) != HAL_OK) { | ||||
|     if(HAL_TIM_PWM_Init(&LFRFID_EMULATE_TIM) != HAL_OK) { | ||||
|         Error_Handler(); | ||||
|     } | ||||
|  | ||||
| @@ -153,7 +156,7 @@ void api_hal_rfid_tim_emulate(float freq) { | ||||
|     sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; | ||||
|     sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET; | ||||
|     sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; | ||||
|     if(HAL_TIMEx_MasterConfigSynchronization(&LFRFID_TIM, &sMasterConfig) != HAL_OK) { | ||||
|     if(HAL_TIMEx_MasterConfigSynchronization(&LFRFID_EMULATE_TIM, &sMasterConfig) != HAL_OK) { | ||||
|         Error_Handler(); | ||||
|     } | ||||
|  | ||||
| @@ -165,7 +168,8 @@ void api_hal_rfid_tim_emulate(float freq) { | ||||
|     sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; | ||||
|     sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; | ||||
|     sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; | ||||
|     if(HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, LFRFID_CH) != HAL_OK) { | ||||
|     if(HAL_TIM_PWM_ConfigChannel(&LFRFID_EMULATE_TIM, &sConfigOC, LFRFID_EMULATE_CHANNEL) != | ||||
|        HAL_OK) { | ||||
|         Error_Handler(); | ||||
|     } | ||||
|  | ||||
| @@ -183,20 +187,48 @@ void api_hal_rfid_tim_emulate(float freq) { | ||||
|     sBreakDeadTimeConfig.Break2Filter = 0; | ||||
|     sBreakDeadTimeConfig.Break2AFMode = TIM_BREAK_AFMODE_INPUT; | ||||
|     sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; | ||||
|     if(HAL_TIMEx_ConfigBreakDeadTime(&LFRFID_TIM, &sBreakDeadTimeConfig) != HAL_OK) { | ||||
|     if(HAL_TIMEx_ConfigBreakDeadTime(&LFRFID_EMULATE_TIM, &sBreakDeadTimeConfig) != HAL_OK) { | ||||
|         Error_Handler(); | ||||
|     } | ||||
| } | ||||
|  | ||||
| void api_hal_rfid_tim_emulate_start() { | ||||
|     HAL_TIM_PWM_Start_IT(&LFRFID_TIM, LFRFID_CH); | ||||
|     HAL_TIM_Base_Start_IT(&LFRFID_TIM); | ||||
|     HAL_TIM_PWM_Start_IT(&LFRFID_EMULATE_TIM, LFRFID_EMULATE_CHANNEL); | ||||
|     HAL_TIM_Base_Start_IT(&LFRFID_EMULATE_TIM); | ||||
| } | ||||
|  | ||||
| void api_hal_rfid_tim_emulate_stop() { | ||||
|     HAL_TIM_Base_Stop(&LFRFID_TIM); | ||||
|     HAL_TIM_PWM_Stop(&LFRFID_TIM, LFRFID_CH); | ||||
|     HAL_TIM_Base_Stop(&LFRFID_EMULATE_TIM); | ||||
|     HAL_TIM_PWM_Stop(&LFRFID_EMULATE_TIM, LFRFID_EMULATE_CHANNEL); | ||||
| } | ||||
|  | ||||
| void api_hal_rfid_tim_reset() { | ||||
| } | ||||
|  | ||||
| bool api_hal_rfid_is_tim_emulate(TIM_HandleTypeDef* hw) { | ||||
|     return (hw == &LFRFID_EMULATE_TIM); | ||||
| } | ||||
|  | ||||
| void api_hal_rfid_set_emulate_period(uint32_t period) { | ||||
|     LFRFID_EMULATE_TIM.Instance->ARR = period; | ||||
| } | ||||
|  | ||||
| void api_hal_rfid_set_emulate_pulse(uint32_t pulse) { | ||||
|     switch(LFRFID_EMULATE_CHANNEL) { | ||||
|     case TIM_CHANNEL_1: | ||||
|         LFRFID_EMULATE_TIM.Instance->CCR1 = pulse; | ||||
|         break; | ||||
|     case TIM_CHANNEL_2: | ||||
|         LFRFID_EMULATE_TIM.Instance->CCR2 = pulse; | ||||
|         break; | ||||
|     case TIM_CHANNEL_3: | ||||
|         LFRFID_EMULATE_TIM.Instance->CCR3 = pulse; | ||||
|         break; | ||||
|     case TIM_CHANNEL_4: | ||||
|         LFRFID_EMULATE_TIM.Instance->CCR4 = pulse; | ||||
|         break; | ||||
|     default: | ||||
|         furi_check(0); | ||||
|         break; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user