initial commmit
This commit is contained in:
@@ -0,0 +1,201 @@
|
||||
;* ----------------------------------------------------------------------------
|
||||
;* -- _____ ______ _____ -
|
||||
;* -- |_ _| | ____|/ ____| -
|
||||
;* -- | | _ __ | |__ | (___ Institute of Embedded Systems -
|
||||
;* -- | | | '_ \| __| \___ \ Zurich University of -
|
||||
;* -- _| |_| | | | |____ ____) | Applied Sciences -
|
||||
;* -- |_____|_| |_|______|_____/ 8401 Winterthur, Switzerland -
|
||||
;* ----------------------------------------------------------------------------
|
||||
;* --
|
||||
;* -- Project : CT1 - Lab 12
|
||||
;* -- Description : Read potentiometer and generate analog voltage
|
||||
;* --
|
||||
;* -- 1) Setup ADC for reading analog voltage of potentiometer
|
||||
;* -- 2) Setup DAC for generating analog voltage signal
|
||||
;* --
|
||||
;* -- $Id: analog.s 1016 2014-11-28 07:27:21Z feur $
|
||||
;* ----------------------------------------------------------------------------
|
||||
|
||||
IMPORT set_sfr
|
||||
IMPORT clear_sfr
|
||||
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; -- Constants
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
AREA myCode, CODE, READONLY
|
||||
|
||||
THUMB
|
||||
|
||||
REG_RCC_AHB1ENR EQU 0x40023830
|
||||
REG_RCC_APB1ENR EQU 0x40023840
|
||||
REG_RCC_APB2ENR EQU 0x40023844
|
||||
|
||||
REG_GPIOA_MODER EQU 0x40020000
|
||||
REG_GPIOA_OSPEEDR EQU 0x40020008
|
||||
REG_GPIOA_PUPDR EQU 0x4002000c
|
||||
REG_GPIOF_MODER EQU 0x40021400
|
||||
|
||||
REG_ADC3_SR EQU 0x40012200
|
||||
REG_ADC3_CR1 EQU 0x40012204
|
||||
REG_ADC3_CR2 EQU 0x40012208
|
||||
REG_ADC3_SMPR2 EQU 0x40012210
|
||||
REG_ADC3_SQR1 EQU 0x4001222c
|
||||
REG_ADC3_SQR3 EQU 0x40012234
|
||||
REG_ADC3_DR EQU 0x4001224c
|
||||
|
||||
REG_DAC_CR EQU 0x40007400
|
||||
REG_DAC_DHR8R1 EQU 0x40007410
|
||||
|
||||
REG_EXTI_IMR EQU 0x40013c00
|
||||
REG_EXTI_RTSR EQU 0x40013c08
|
||||
REG_EXTI_FTSR EQU 0x40013c0c
|
||||
|
||||
REG_NVIC_ISER0 EQU 0xe000e100
|
||||
REG_NVIC_ICER0 EQU 0xe000e180
|
||||
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; Initialize ADC and DAC
|
||||
; -----------------------------------------------------------------------------
|
||||
init_analog PROC
|
||||
EXPORT init_analog
|
||||
|
||||
PUSH {R6-R7, LR}
|
||||
|
||||
init_adc ; Clock configuration
|
||||
LDR R6, =REG_RCC_AHB1ENR
|
||||
LDR R7, =0x20 ; Enable GPIOF clock
|
||||
BL set_sfr
|
||||
|
||||
LDR R6, =REG_RCC_APB2ENR
|
||||
LDR R7, =0x400 ; Enable ADC3 clock
|
||||
BL set_sfr
|
||||
|
||||
; Analog pin configuration (PF.6)
|
||||
LDR R6, =REG_GPIOF_MODER
|
||||
LDR R7, =0x3000
|
||||
BL set_sfr
|
||||
|
||||
; ADC configuration
|
||||
LDR R6, =REG_ADC3_CR1
|
||||
LDR R7, =0x2000000 ; 8 bit resolution
|
||||
; Disable scan mode
|
||||
BL set_sfr
|
||||
|
||||
LDR R6, =REG_ADC3_CR2
|
||||
LDR R7, =0x3 ; Enable continous conv. mode
|
||||
; Enable ADC
|
||||
BL set_sfr
|
||||
|
||||
; Select channel to read from
|
||||
LDR R6, =REG_ADC3_SMPR2
|
||||
LDR R7, =0x6000 ; ch4: 144 cycles sampling time
|
||||
BL set_sfr
|
||||
|
||||
LDR R6, =REG_ADC3_SQR3
|
||||
LDR R7, =0x4 ; ch4: rank 1 (?)
|
||||
BL set_sfr
|
||||
|
||||
|
||||
init_dac ; Clock configuration
|
||||
LDR R6, =REG_RCC_AHB1ENR
|
||||
LDR R7, =0x1 ; Enable GPIOA clock
|
||||
BL set_sfr
|
||||
|
||||
LDR R6, =REG_RCC_APB1ENR
|
||||
LDR R7, =0x20000000 ; Enable DAC clock
|
||||
BL set_sfr
|
||||
|
||||
; Analog pin configuration (PA.4)
|
||||
LDR R6, =REG_GPIOA_MODER
|
||||
LDR R7, =0x300
|
||||
BL set_sfr
|
||||
|
||||
; DAC configuration
|
||||
LDR R6, =REG_DAC_CR
|
||||
LDR R7, =0x1 ; Enable ch. 1
|
||||
BL set_sfr
|
||||
|
||||
LDR R6, =REG_DAC_DHR8R1
|
||||
LDR R7, =0x0 ; Set initial value (=0)
|
||||
BL set_sfr
|
||||
|
||||
; Return
|
||||
POP {R6-R7, PC}
|
||||
|
||||
ENDP
|
||||
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; Process reading ADC and outputing via DAC
|
||||
; -----------------------------------------------------------------------------
|
||||
do_analog PROC
|
||||
EXPORT do_analog
|
||||
|
||||
PUSH {R0-R2, R6, LR}
|
||||
|
||||
BL get_adc ; Get ADC value in R7
|
||||
BL set_dac ; Set DAC value from R7
|
||||
|
||||
POP {R0-R2, R6, PC} ; Restore registers and return
|
||||
|
||||
ENDP ; Return
|
||||
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; Convert with ADC an return value
|
||||
; - converted analog value in R7
|
||||
; -----------------------------------------------------------------------------
|
||||
get_adc PROC
|
||||
EXPORT get_adc
|
||||
|
||||
PUSH {R0-R2, R6, LR}
|
||||
|
||||
LDR R6, =REG_ADC3_CR2
|
||||
LDR R7, =0x40000000 ; Start conversion
|
||||
BL set_sfr
|
||||
|
||||
LDR R0, =REG_ADC3_SR
|
||||
adc_wait LDR R1, =0x2
|
||||
LDR R2, [R0]
|
||||
BICS R1, R1, R2 ; Is conversion finished
|
||||
BNE adc_wait
|
||||
|
||||
LDR R0, =REG_ADC3_DR
|
||||
LDR R1, [R0] ; Get converted value
|
||||
LDR R7, =0xffff
|
||||
ANDS R7, R7, R1 ; Mask upper halfword
|
||||
|
||||
POP {R0-R2, R6, PC} ; Restore registers and return
|
||||
|
||||
ENDP ; Return
|
||||
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; Set DAC output
|
||||
; - digital value in R7
|
||||
; -----------------------------------------------------------------------------
|
||||
set_dac PROC
|
||||
EXPORT set_dac
|
||||
|
||||
PUSH {R0-R1, R6, LR}
|
||||
|
||||
LDR R6, =REG_DAC_DHR8R1
|
||||
LDR R0, [R6]
|
||||
LDR R1, =0xff
|
||||
BICS R0, R0, R1 ; Clear bits
|
||||
STR R0, [R6]
|
||||
BL set_sfr ; Set value in R7
|
||||
|
||||
POP {R0-R1, R6, PC} ; Restore registers and return
|
||||
|
||||
ENDP ; Return
|
||||
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; -- End of file
|
||||
; -----------------------------------------------------------------------------
|
||||
END
|
||||
|
||||
@@ -0,0 +1,165 @@
|
||||
;* ----------------------------------------------------------------------------
|
||||
;* -- _____ ______ _____ -
|
||||
;* -- |_ _| | ____|/ ____| -
|
||||
;* -- | | _ __ | |__ | (___ Institute of Embedded Systems -
|
||||
;* -- | | | '_ \| __| \___ \ Zurich University of -
|
||||
;* -- _| |_| | | | |____ ____) | Applied Sciences -
|
||||
;* -- |_____|_| |_|______|_____/ 8401 Winterthur, Switzerland -
|
||||
;* ----------------------------------------------------------------------------
|
||||
;* --
|
||||
;* -- Project : CT1 - Lab 12
|
||||
;* -- Description : Control motor speed and direction
|
||||
;* --
|
||||
;* -- $Id: control.s 1016 2014-11-28 07:27:21Z feur $
|
||||
;* ----------------------------------------------------------------------------
|
||||
|
||||
IMPORT set_sfr
|
||||
IMPORT clear_sfr
|
||||
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; -- Constants
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
AREA myCode, CODE, READONLY
|
||||
|
||||
THUMB
|
||||
|
||||
REG_RCC_AHB1ENR EQU 0x40023830
|
||||
|
||||
REG_GPIOA_MODER EQU 0x40020000
|
||||
REG_GPIOA_OSPEEDR EQU 0x40020008
|
||||
REG_GPIOA_BSRR EQU 0x40020018
|
||||
|
||||
REG_CT_DIPSW EQU 0x60000200
|
||||
|
||||
jump_table DCD case_00, case_01, case_10, case_11
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; Initialize EXTI
|
||||
; -----------------------------------------------------------------------------
|
||||
init_control PROC
|
||||
EXPORT init_control
|
||||
|
||||
PUSH {R6-R7, LR}
|
||||
|
||||
init_gpio ; Clock configuration
|
||||
LDR R6, =REG_RCC_AHB1ENR
|
||||
LDR R7, =0x1 ; Enable GPIOA clock
|
||||
BL set_sfr
|
||||
|
||||
; Output pin configuration (PA.5, PA.6)
|
||||
LDR R6, =REG_GPIOA_MODER
|
||||
LDR R7, =0x1400 ; Set pin to output mode
|
||||
BL set_sfr
|
||||
|
||||
LDR R6, =REG_GPIOA_OSPEEDR
|
||||
LDR R7, =0x1400 ; Set pin to high speed
|
||||
BL set_sfr
|
||||
|
||||
; Return
|
||||
POP {R6-R7, PC}
|
||||
|
||||
NOP
|
||||
ENDP
|
||||
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; Check buttons
|
||||
; -----------------------------------------------------------------------------
|
||||
do_input PROC
|
||||
EXPORT do_input
|
||||
|
||||
PUSH {R0-R2, LR}
|
||||
|
||||
LDR R0, =REG_CT_DIPSW
|
||||
LDRB R1, [R0]
|
||||
LDR R2, =0x3
|
||||
ANDS R1, R1, R2
|
||||
|
||||
case_switch CMP R1, #4
|
||||
BGE case_00
|
||||
LSLS R1, #2
|
||||
LDR R2, =jump_table
|
||||
LDR R2, [R2, R1]
|
||||
BX R2
|
||||
|
||||
case_00 BL motor_off
|
||||
BL motor_ccw
|
||||
B case_end
|
||||
|
||||
case_01 BL motor_on
|
||||
BL motor_ccw
|
||||
B case_end
|
||||
|
||||
case_10 BL motor_off
|
||||
BL motor_cw
|
||||
B case_end
|
||||
|
||||
case_11 BL motor_on
|
||||
BL motor_cw
|
||||
|
||||
case_end POP {R0-R2, PC}
|
||||
ENDP
|
||||
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; Motor control
|
||||
; -----------------------------------------------------------------------------
|
||||
motor_on PROC
|
||||
EXPORT motor_on
|
||||
|
||||
PUSH {R0-R7, LR}
|
||||
|
||||
LDR R0, =REG_GPIOA_BSRR
|
||||
LDR R1, =0x20 ; Set bit 5 -> PA.5
|
||||
STR R1, [R0]
|
||||
|
||||
POP {R0-R7, PC}
|
||||
ENDP
|
||||
|
||||
|
||||
motor_off PROC
|
||||
EXPORT motor_off
|
||||
|
||||
PUSH {R0-R7, LR}
|
||||
|
||||
LDR R0, =REG_GPIOA_BSRR
|
||||
LDR R1, =0x200000 ; Reset bit 5 -> PA.5
|
||||
STR R1, [R0]
|
||||
|
||||
POP {R0-R7, PC}
|
||||
ENDP
|
||||
|
||||
|
||||
motor_cw PROC
|
||||
EXPORT motor_cw
|
||||
|
||||
PUSH {R0-R7, LR}
|
||||
|
||||
LDR R0, =REG_GPIOA_BSRR
|
||||
LDR R1, =0x40 ; Set bit 6 -> PA.6
|
||||
STR R1, [R0]
|
||||
|
||||
POP {R0-R7, PC}
|
||||
ENDP
|
||||
|
||||
|
||||
motor_ccw PROC
|
||||
EXPORT motor_ccw
|
||||
|
||||
PUSH {R0-R7, LR}
|
||||
|
||||
LDR R0, =REG_GPIOA_BSRR
|
||||
LDR R1, =0x400000 ; Reset bit 6 -> PA.6
|
||||
STR R1, [R0]
|
||||
|
||||
POP {R0-R7, PC}
|
||||
ENDP
|
||||
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; -- End of file
|
||||
; -----------------------------------------------------------------------------
|
||||
END
|
||||
|
||||
@@ -0,0 +1,104 @@
|
||||
;* ----------------------------------------------------------------------------
|
||||
;* -- _____ ______ _____ -
|
||||
;* -- |_ _| | ____|/ ____| -
|
||||
;* -- | | _ __ | |__ | (___ Institute of Embedded Systems -
|
||||
;* -- | | | '_ \| __| \___ \ Zurich University of -
|
||||
;* -- _| |_| | | | |____ ____) | Applied Sciences -
|
||||
;* -- |_____|_| |_|______|_____/ 8401 Winterthur, Switzerland -
|
||||
;* ----------------------------------------------------------------------------
|
||||
;* --
|
||||
;* -- Project : CT1 - Lab 12
|
||||
;* -- Description : Reading the User-Button as Interrupt source
|
||||
;* --
|
||||
;* -- $Id: main.s 5082 2020-05-14 13:56:07Z akdi $
|
||||
;* --
|
||||
;* ----------------------------------------------------------------------------
|
||||
|
||||
|
||||
IMPORT init_measurement
|
||||
IMPORT clear_IRQ_EXTI0
|
||||
IMPORT clear_IRQ_TIM2
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; -- Constants
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
AREA myCode, CODE, READONLY
|
||||
|
||||
THUMB
|
||||
|
||||
REG_GPIOA_IDR EQU 0x40020010
|
||||
LED_15_0 EQU 0x60000100
|
||||
LED_16_31 EQU 0x60000102
|
||||
REG_CT_7SEG EQU 0x60000114
|
||||
REG_SETENA0 EQU 0xe000e100
|
||||
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; -- Main
|
||||
; -----------------------------------------------------------------------------
|
||||
main PROC
|
||||
EXPORT main
|
||||
|
||||
|
||||
BL init_measurement
|
||||
|
||||
; Configure NVIC (enable interrupt channel)
|
||||
; STUDENTS: To be programmed
|
||||
|
||||
|
||||
; END: To be programmed
|
||||
|
||||
; Initialize variables
|
||||
; STUDENTS: To be programmed
|
||||
|
||||
|
||||
; END: To be programmed
|
||||
|
||||
loop
|
||||
; Output counter on 7-seg
|
||||
; STUDENTS: To be programmed
|
||||
|
||||
|
||||
; END: To be programmed
|
||||
|
||||
B loop
|
||||
|
||||
|
||||
ENDP
|
||||
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; Handler for EXTI0 interrupt
|
||||
; -----------------------------------------------------------------------------
|
||||
; STUDENTS: To be programmed
|
||||
|
||||
|
||||
; END: To be programmed
|
||||
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; Handler for TIM2 interrupt
|
||||
; -----------------------------------------------------------------------------
|
||||
; STUDENTS: To be programmed
|
||||
|
||||
|
||||
; END: To be programmed
|
||||
ALIGN
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; -- Variables
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
AREA myVars, DATA, READWRITE
|
||||
|
||||
; STUDENTS: To be programmed
|
||||
|
||||
|
||||
; END: To be programmed
|
||||
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; -- End of file
|
||||
; -----------------------------------------------------------------------------
|
||||
END
|
||||
@@ -0,0 +1,138 @@
|
||||
;* ----------------------------------------------------------------------------
|
||||
;* -- _____ ______ _____ -
|
||||
;* -- |_ _| | ____|/ ____| -
|
||||
;* -- | | _ __ | |__ | (___ Institute of Embedded Systems -
|
||||
;* -- | | | '_ \| __| \___ \ Zurich University of -
|
||||
;* -- _| |_| | | | |____ ____) | Applied Sciences -
|
||||
;* -- |_____|_| |_|______|_____/ 8401 Winterthur, Switzerland -
|
||||
;* ----------------------------------------------------------------------------
|
||||
;* --
|
||||
;* -- Project : CT1 - Lab 12
|
||||
;* -- Description : Meassuring motor speed and direction
|
||||
;* --
|
||||
;* -- 1) Setup external interrupt EXTI for counting motor pulses
|
||||
;* -- 2) Setup TIM2 for generating 1 Hz reference clock
|
||||
;* -- 3) Functions to clear IRQ Flip-flops
|
||||
;* --
|
||||
;* -- $Id: measurement.s 3858 2017-01-09 13:26:26Z kesr $
|
||||
;* ----------------------------------------------------------------------------
|
||||
|
||||
IMPORT set_sfr
|
||||
IMPORT clear_sfr
|
||||
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; -- Constants
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
AREA myCode, CODE, READONLY
|
||||
|
||||
THUMB
|
||||
|
||||
REG_RCC_AHB1ENR EQU 0x40023830
|
||||
REG_RCC_APB1ENR EQU 0x40023840
|
||||
REG_RCC_APB2ENR EQU 0x40023844
|
||||
|
||||
REG_GPIOA_PUPDR EQU 0x4002000c
|
||||
|
||||
REG_EXTI_IMR EQU 0x40013c00
|
||||
REG_EXTI_RTSR EQU 0x40013c08
|
||||
REG_EXTI_PR EQU 0x40013c14
|
||||
|
||||
REG_TIM2_CR1 EQU 0x40000000
|
||||
REG_TIM2_DIER EQU 0x4000000c
|
||||
REG_TIM2_SR EQU 0x40000010
|
||||
REG_TIM2_EGR EQU 0x40000014
|
||||
REG_TIM2_PSC EQU 0x40000028
|
||||
REG_TIM2_ARR EQU 0x4000002c
|
||||
|
||||
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; Initialize EXTI
|
||||
; -----------------------------------------------------------------------------
|
||||
init_measurement PROC
|
||||
EXPORT init_measurement
|
||||
|
||||
PUSH {LR}
|
||||
|
||||
init_exti ; Clock configuration
|
||||
LDR R0, =REG_RCC_AHB1ENR
|
||||
LDR R1, =0x1 ; Enable GPIOA clock
|
||||
BL set_sfr
|
||||
|
||||
LDR R0, =REG_RCC_APB2ENR
|
||||
LDR R1, =0x4000 ; Enable SYSCFG clock
|
||||
BL set_sfr
|
||||
|
||||
; Input pin configuration (PA.0)
|
||||
LDR R0, =REG_GPIOA_PUPDR
|
||||
LDR R1, =0x2 ; Set pin to pull-down mode
|
||||
BL set_sfr
|
||||
|
||||
; Configure EXTI
|
||||
LDR R0, =REG_EXTI_IMR
|
||||
LDR R1, =0x1 ; Unmask EXTI0 interrupt
|
||||
BL set_sfr
|
||||
|
||||
LDR R0, =REG_EXTI_RTSR
|
||||
LDR R1, =0x1 ; Trigger on rising edge
|
||||
BL set_sfr
|
||||
|
||||
|
||||
init_timer ; Clock configuration
|
||||
LDR R0, =REG_RCC_APB1ENR
|
||||
LDR R1, =0x1 ; Enable TIM2 clock
|
||||
BL set_sfr
|
||||
|
||||
; Configure TIM2 frequency
|
||||
LDR R0, =REG_TIM2_PSC
|
||||
LDR R1, =839 ; Timer prescaler => 84Mhz / 840 = 100kHz => 10us
|
||||
BL set_sfr
|
||||
|
||||
LDR R0, =REG_TIM2_ARR
|
||||
LDR R1, =0xffffffff ; Clear Register first, it gets
|
||||
BL clear_sfr ; initialized with 0xffffffff
|
||||
LDR R1, =199998 ; Autoreload value => 99999+1 => 1s
|
||||
BL set_sfr
|
||||
|
||||
LDR R0, =REG_TIM2_EGR
|
||||
LDR R1, =0x1 ; Update TIM2 configuration
|
||||
BL set_sfr
|
||||
|
||||
LDR R0, =REG_TIM2_DIER
|
||||
LDR R1, =0x1 ; Enable interrupt source
|
||||
BL set_sfr
|
||||
|
||||
LDR R0, =REG_TIM2_CR1
|
||||
LDR R1, =0x1 ; Enable TIM2
|
||||
BL set_sfr
|
||||
|
||||
; Return
|
||||
POP {PC}
|
||||
ENDP
|
||||
|
||||
clear_IRQ_EXTI0 PROC
|
||||
EXPORT clear_IRQ_EXTI0
|
||||
PUSH {LR}
|
||||
LDR R0, =REG_EXTI_PR
|
||||
LDR R1, =0x1 ; Clear irq pending bit
|
||||
BL set_sfr
|
||||
POP {PC}
|
||||
ENDP
|
||||
|
||||
clear_IRQ_TIM2 PROC
|
||||
EXPORT clear_IRQ_TIM2
|
||||
PUSH {LR}
|
||||
LDR R0, =REG_TIM2_SR
|
||||
LDR R1, =0x1 ; Clear irq pending bit
|
||||
BL clear_sfr
|
||||
POP {PC}
|
||||
ENDP
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; -- End of file
|
||||
; -----------------------------------------------------------------------------
|
||||
ALIGN
|
||||
END
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
;* ----------------------------------------------------------------------------
|
||||
;* -- _____ ______ _____ -
|
||||
;* -- |_ _| | ____|/ ____| -
|
||||
;* -- | | _ __ | |__ | (___ Institute of Embedded Systems -
|
||||
;* -- | | | '_ \| __| \___ \ Zurich University of -
|
||||
;* -- _| |_| | | | |____ ____) | Applied Sciences -
|
||||
;* -- |_____|_| |_|______|_____/ 8401 Winterthur, Switzerland -
|
||||
;* ----------------------------------------------------------------------------
|
||||
;* --
|
||||
;* -- Project : CT1 - Lab 12
|
||||
;* -- Description : Common procedures
|
||||
;* --
|
||||
;* -- $Id: utils.s 1244 2015-02-03 10:12:17Z ruan $
|
||||
;* ----------------------------------------------------------------------------
|
||||
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; -- Constants
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
AREA myCode, CODE, READONLY
|
||||
|
||||
THUMB
|
||||
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; Set bit of a register (SFR, word -> 32 bit)
|
||||
; - Address of register in R6
|
||||
; - Bits to be set in R7
|
||||
; -----------------------------------------------------------------------------
|
||||
set_sfr PROC
|
||||
EXPORT set_sfr
|
||||
|
||||
PUSH {LR}
|
||||
|
||||
LDR R2, [R0] ; Load register value to R0
|
||||
ORRS R2, R2, R1 ; Set bits
|
||||
STR R2, [R0] ; Store new register value
|
||||
|
||||
POP {PC} ; Restore registers and return
|
||||
|
||||
ENDP
|
||||
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; Clear all bits of a register (SFR, word -> 32 bit)
|
||||
; - Address of register in R0
|
||||
; - Bits to be cleared in R1
|
||||
; -----------------------------------------------------------------------------
|
||||
clear_sfr PROC
|
||||
EXPORT clear_sfr
|
||||
|
||||
PUSH {LR}
|
||||
|
||||
LDR R2, [R0] ; Load register value to R0
|
||||
BICS R2, R2, R1 ; Clear bits
|
||||
STR R2, [R0] ; Store new register value
|
||||
|
||||
POP {PC} ; Restore registers and return
|
||||
|
||||
ENDP
|
||||
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; -- End of file
|
||||
; -----------------------------------------------------------------------------
|
||||
END
|
||||
|
||||
Reference in New Issue
Block a user