63 lines
1.9 KiB
C
63 lines
1.9 KiB
C
|
|
#include "bsp_moto.h"
|
||
|
|
|
||
|
|
|
||
|
|
void bsp_moto_init(uint16_t div, uint16_t period)
|
||
|
|
{
|
||
|
|
gpio_init_type gpio_init_struct;
|
||
|
|
tmr_output_config_type tmr_output_struct;
|
||
|
|
|
||
|
|
/* enable tmr1/gpioa/gpiob clock */
|
||
|
|
crm_periph_clock_enable(CRM_TMR4_PERIPH_CLOCK, TRUE);
|
||
|
|
crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
|
||
|
|
|
||
|
|
gpio_init_struct.gpio_pins = GPIO_PINS_6 | GPIO_PINS_7;
|
||
|
|
gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
|
||
|
|
gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
|
||
|
|
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
|
||
|
|
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
|
||
|
|
gpio_init(GPIOB, &gpio_init_struct);
|
||
|
|
|
||
|
|
gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE6, GPIO_MUX_2);
|
||
|
|
gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE7, GPIO_MUX_2);
|
||
|
|
|
||
|
|
|
||
|
|
tmr_reset(TMR4);
|
||
|
|
tmr_base_init(TMR4, period, div);
|
||
|
|
tmr_cnt_dir_set(TMR4, TMR_COUNT_UP);
|
||
|
|
|
||
|
|
tmr_output_default_para_init(&tmr_output_struct);
|
||
|
|
tmr_output_struct.oc_mode = TMR_OUTPUT_CONTROL_PWM_MODE_A;
|
||
|
|
tmr_output_struct.oc_output_state = TRUE;
|
||
|
|
tmr_output_struct.oc_polarity = TMR_OUTPUT_ACTIVE_HIGH;
|
||
|
|
tmr_output_struct.oc_idle_state = FALSE;
|
||
|
|
|
||
|
|
/* channel 1 */
|
||
|
|
tmr_output_channel_config(TMR4, TMR_SELECT_CHANNEL_1, &tmr_output_struct);
|
||
|
|
tmr_output_channel_buffer_enable(TMR4, TMR_SELECT_CHANNEL_1, TRUE);
|
||
|
|
|
||
|
|
/* channel 2 */
|
||
|
|
tmr_output_channel_config(TMR4, TMR_SELECT_CHANNEL_2, &tmr_output_struct);
|
||
|
|
tmr_output_channel_buffer_enable(TMR4, TMR_SELECT_CHANNEL_2, TRUE);
|
||
|
|
|
||
|
|
tmr_period_buffer_enable(TMR4, TRUE);
|
||
|
|
|
||
|
|
|
||
|
|
/* enable tmr1 */
|
||
|
|
tmr_counter_enable(TMR4, TRUE);
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
void set_moto_out(uint8_t dir, uint32_t speed)
|
||
|
|
{
|
||
|
|
if( dir == 1 )
|
||
|
|
{
|
||
|
|
tmr_channel_value_set(TMR4, TMR_SELECT_CHANNEL_1, 0);
|
||
|
|
tmr_channel_value_set(TMR4, TMR_SELECT_CHANNEL_2, speed);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
tmr_channel_value_set(TMR4, TMR_SELECT_CHANNEL_1, speed);
|
||
|
|
tmr_channel_value_set(TMR4, TMR_SELECT_CHANNEL_2, 0);
|
||
|
|
}
|
||
|
|
}
|