@.CHARSET CP1251

@ GNU AS
.syntax unified
.cpu cortex-m4
.thumb
.fpu fpv4-sp-d16

.INCLUDE  "/src/inc/rcc.inc"
.INCLUDE  "/src/inc/tim2-5.inc"

@.desc name=TIM2_CH1_PWM_INIT type=proc
@ +--------------------------------------------------------+
@ |                                                        |
@ |      Настройка Timer 2 Ch 1 в режим PWM                |
@ |                                                        |
@ +--------------------------------------------------------+
@.enddesc

.SECTION .asmcode

.global TIM2_CH1_PWM_INIT
TIM2_CH1_PWM_INIT:

                         MOV         R1, 1

                     @ включим тактирование Timer 2
                         LDR         R2, = PERIPH_BB_BASE + ( RCC_BASE + RCC_APB1ENR ) * 32 + RCC_APB1ENR_TIM2EN_N * 4
                         STR         R1, [ R2 ]

                     @ настройка таймера Timer 2
                         LDR         R2, = TIM2

                         LDR         R0, =  42-1              @ предделитель счетчика частота счета 42Mhz / 420 = 100 Кгц
                         STR         R0, [ R2, TIM2T5_PSC ]

                         LDR         R0, = 1000                 @ максимальное значение счетчика
                         STR         R0, [ R2, TIM2T5_ARR ]

                         LDR         R0, = TIM2T5_CR1_CEN + TIM2T5_CR1_APRE    @ включить таймер
                         STR         R0, [ R2, TIM2T5_CR1 ]

                     @ настройка блока сравнения
                         LDR         R0, = TIM2T5_CCMR1_OC1M_PWM1    @ режим pwm 1 для OC1M ( CH1 )
                         STR         R0, [ R2, TIM2T5_CCMR1 ]

                         LDR         R0, = 100                       @ значение сравнения
                         STR         R0, [ R2, TIM2T5_CCR1 ]

                         LDR         R0, = TIM2T5_CCER_CC1E          @ включим выход  CH1
                         STR         R0, [ R2, TIM2T5_CCER ]

                         BX         LR

@ +------------------------------------------------------------------+
@ |                     Код использования модуля                     |
@ +------------------------------------------------------------------+
@
@ изменение заполнения сигнала ШИМ
@                         LDR         R0, = Значение заполнения от 1 до 1000
@                         STR         R0, [ R2, TIM2T5_CCR1 ]
@
@ временное выключение генерации
@                         LDR         R0, = TIM2T5_CCMR1_OC1M_INACT    @ неактивный уровень на выходе
@                         STR         R0, [ R2, TIM2T5_CCMR1 ]
@
@ последующее включение генерации
@                         LDR         R0, = TIM2T5_CCMR1_OC1M_PWM1    @ режим pwm 1 для OC1M ( CH1 )
@                         STR         R0, [ R2, TIM2T5_CCMR1 ]



