350 lines
10 KiB
NASM
350 lines
10 KiB
NASM
;--------------------------------------------------------
|
|
; File Created by SDCC : free open source ISO C Compiler
|
|
; Version 4.5.0 #15242 (Linux)
|
|
;--------------------------------------------------------
|
|
.module stm8l15x_gpio
|
|
|
|
;--------------------------------------------------------
|
|
; Public variables in this module
|
|
;--------------------------------------------------------
|
|
.globl _GPIO_DeInit
|
|
.globl _GPIO_Init
|
|
.globl _GPIO_ExternalPullUpConfig
|
|
.globl _GPIO_Write
|
|
.globl _GPIO_WriteBit
|
|
.globl _GPIO_SetBits
|
|
.globl _GPIO_ResetBits
|
|
.globl _GPIO_ToggleBits
|
|
.globl _GPIO_ReadInputData
|
|
.globl _GPIO_ReadOutputData
|
|
.globl _GPIO_ReadInputDataBit
|
|
.globl _GPIO_ReadOutputDataBit
|
|
;--------------------------------------------------------
|
|
; ram data
|
|
;--------------------------------------------------------
|
|
.area DATA
|
|
;--------------------------------------------------------
|
|
; ram data
|
|
;--------------------------------------------------------
|
|
.area INITIALIZED
|
|
;--------------------------------------------------------
|
|
; absolute external ram data
|
|
;--------------------------------------------------------
|
|
.area DABS (ABS)
|
|
|
|
; default segment ordering for linker
|
|
.area HOME
|
|
.area GSINIT
|
|
.area GSFINAL
|
|
.area CONST
|
|
.area INITIALIZER
|
|
.area CODE
|
|
|
|
;--------------------------------------------------------
|
|
; global & static initialisations
|
|
;--------------------------------------------------------
|
|
.area HOME
|
|
.area GSINIT
|
|
.area GSFINAL
|
|
.area GSINIT
|
|
;--------------------------------------------------------
|
|
; Home
|
|
;--------------------------------------------------------
|
|
.area HOME
|
|
.area HOME
|
|
;--------------------------------------------------------
|
|
; code
|
|
;--------------------------------------------------------
|
|
.area CODE
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 96: void GPIO_DeInit(GPIO_TypeDef* GPIOx)
|
|
; -----------------------------------------
|
|
; function GPIO_DeInit
|
|
; -----------------------------------------
|
|
_GPIO_DeInit:
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 98: GPIOx->CR2 = GPIO_CR2_RESET_VALUE; /* Reset Control Register 2 */
|
|
ldw y, x
|
|
clr (0x0004, x)
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 99: GPIOx->ODR = GPIO_ODR_RESET_VALUE; /* Reset Output Data Register */
|
|
clr (y)
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 100: GPIOx->DDR = GPIO_DDR_RESET_VALUE; /* Reset Data Direction Register */
|
|
ldw x, y
|
|
clr (0x02, x)
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 101: GPIOx->CR1 = GPIO_CR1_RESET_VALUE; /* Reset Control Register 1 */
|
|
ldw x, y
|
|
clr (0x0003, x)
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 102: }
|
|
ret
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 133: void GPIO_Init(GPIO_TypeDef* GPIOx, uint8_t GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode)
|
|
; -----------------------------------------
|
|
; function GPIO_Init
|
|
; -----------------------------------------
|
|
_GPIO_Init:
|
|
sub sp, #8
|
|
ldw (0x07, sp), x
|
|
ld (0x06, sp), a
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 143: GPIOx->CR2 &= (uint8_t)(~(GPIO_Pin));
|
|
ldw x, (0x07, sp)
|
|
addw x, #0x0004
|
|
ldw (0x01, sp), x
|
|
ld a, (x)
|
|
push a
|
|
ld a, (0x07, sp)
|
|
cpl a
|
|
ld (0x04, sp), a
|
|
pop a
|
|
and a, (0x03, sp)
|
|
ldw x, (0x01, sp)
|
|
ld (x), a
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 159: GPIOx->DDR |= GPIO_Pin;
|
|
ldw x, (0x07, sp)
|
|
incw x
|
|
incw x
|
|
ldw (0x04, sp), x
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 149: if ((((uint8_t)(GPIO_Mode)) & (uint8_t)0x80) != (uint8_t)0x00) /* Output mode */
|
|
tnz (0x0b, sp)
|
|
jrpl 00105$
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 153: GPIOx->ODR |= GPIO_Pin;
|
|
ldw x, (0x07, sp)
|
|
ld a, (x)
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 151: if ((((uint8_t)(GPIO_Mode)) & (uint8_t)0x10) != (uint8_t)0x00) /* High level */
|
|
push a
|
|
ld a, (0x0c, sp)
|
|
bcp a, #0x10
|
|
pop a
|
|
jreq 00102$
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 153: GPIOx->ODR |= GPIO_Pin;
|
|
or a, (0x06, sp)
|
|
ld (x), a
|
|
jra 00103$
|
|
00102$:
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 156: GPIOx->ODR &= (uint8_t)(~(GPIO_Pin));
|
|
and a, (0x03, sp)
|
|
ld (x), a
|
|
00103$:
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 159: GPIOx->DDR |= GPIO_Pin;
|
|
ldw x, (0x04, sp)
|
|
ld a, (x)
|
|
or a, (0x06, sp)
|
|
ldw x, (0x04, sp)
|
|
ld (x), a
|
|
jra 00106$
|
|
00105$:
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 163: GPIOx->DDR &= (uint8_t)(~(GPIO_Pin));
|
|
ldw x, (0x04, sp)
|
|
ld a, (x)
|
|
and a, (0x03, sp)
|
|
ldw x, (0x04, sp)
|
|
ld (x), a
|
|
00106$:
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 172: GPIOx->CR1 |= GPIO_Pin;
|
|
ldw x, (0x07, sp)
|
|
addw x, #0x0003
|
|
ld a, (x)
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 170: if ((((uint8_t)(GPIO_Mode)) & (uint8_t)0x40) != (uint8_t)0x00) /* Pull-Up or Push-Pull */
|
|
push a
|
|
ld a, (0x0c, sp)
|
|
bcp a, #0x40
|
|
pop a
|
|
jreq 00108$
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 172: GPIOx->CR1 |= GPIO_Pin;
|
|
or a, (0x06, sp)
|
|
ld (x), a
|
|
jra 00109$
|
|
00108$:
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 175: GPIOx->CR1 &= (uint8_t)(~(GPIO_Pin));
|
|
and a, (0x03, sp)
|
|
ld (x), a
|
|
00109$:
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 143: GPIOx->CR2 &= (uint8_t)(~(GPIO_Pin));
|
|
ldw x, (0x01, sp)
|
|
ld a, (x)
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 182: if ((((uint8_t)(GPIO_Mode)) & (uint8_t)0x20) != (uint8_t)0x00) /* Interrupt or Slow slope */
|
|
push a
|
|
ld a, (0x0c, sp)
|
|
bcp a, #0x20
|
|
pop a
|
|
jreq 00111$
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 184: GPIOx->CR2 |= GPIO_Pin;
|
|
or a, (0x06, sp)
|
|
ldw x, (0x01, sp)
|
|
ld (x), a
|
|
jra 00113$
|
|
00111$:
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 187: GPIOx->CR2 &= (uint8_t)(~(GPIO_Pin));
|
|
and a, (0x03, sp)
|
|
ldw x, (0x01, sp)
|
|
ld (x), a
|
|
00113$:
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 190: }
|
|
addw sp, #8
|
|
popw x
|
|
pop a
|
|
jp (x)
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 209: void GPIO_ExternalPullUpConfig(GPIO_TypeDef* GPIOx, uint8_t GPIO_Pin, FunctionalState NewState)
|
|
; -----------------------------------------
|
|
; function GPIO_ExternalPullUpConfig
|
|
; -----------------------------------------
|
|
_GPIO_ExternalPullUpConfig:
|
|
push a
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 217: GPIOx->CR1 |= GPIO_Pin;
|
|
addw x, #0x0003
|
|
push a
|
|
ld a, (x)
|
|
ld (0x02, sp), a
|
|
pop a
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 215: if (NewState != DISABLE) /* External Pull-Up Set*/
|
|
tnz (0x04, sp)
|
|
jreq 00102$
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 217: GPIOx->CR1 |= GPIO_Pin;
|
|
or a, (0x01, sp)
|
|
ld (x), a
|
|
jra 00104$
|
|
00102$:
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 220: GPIOx->CR1 &= (uint8_t)(~(GPIO_Pin));
|
|
cpl a
|
|
and a, (0x01, sp)
|
|
ld (x), a
|
|
00104$:
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 222: }
|
|
pop a
|
|
popw x
|
|
pop a
|
|
jp (x)
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 248: void GPIO_Write(GPIO_TypeDef* GPIOx, uint8_t GPIO_PortVal)
|
|
; -----------------------------------------
|
|
; function GPIO_Write
|
|
; -----------------------------------------
|
|
_GPIO_Write:
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 250: GPIOx->ODR = GPIO_PortVal;
|
|
ld (x), a
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 251: }
|
|
ret
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 270: void GPIO_WriteBit(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, BitAction GPIO_BitVal)
|
|
; -----------------------------------------
|
|
; function GPIO_WriteBit
|
|
; -----------------------------------------
|
|
_GPIO_WriteBit:
|
|
push a
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 278: GPIOx->ODR |= GPIO_Pin;
|
|
push a
|
|
ld a, (x)
|
|
ld (0x02, sp), a
|
|
pop a
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 276: if (GPIO_BitVal != RESET)
|
|
tnz (0x04, sp)
|
|
jreq 00102$
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 278: GPIOx->ODR |= GPIO_Pin;
|
|
or a, (0x01, sp)
|
|
ld (x), a
|
|
jra 00104$
|
|
00102$:
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 283: GPIOx->ODR &= (uint8_t)(~GPIO_Pin);
|
|
cpl a
|
|
and a, (0x01, sp)
|
|
ld (x), a
|
|
00104$:
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 285: }
|
|
pop a
|
|
popw x
|
|
pop a
|
|
jp (x)
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 303: void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint8_t GPIO_Pin)
|
|
; -----------------------------------------
|
|
; function GPIO_SetBits
|
|
; -----------------------------------------
|
|
_GPIO_SetBits:
|
|
push a
|
|
ld (0x01, sp), a
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 305: GPIOx->ODR |= GPIO_Pin;
|
|
ld a, (x)
|
|
or a, (0x01, sp)
|
|
ld (x), a
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 306: }
|
|
pop a
|
|
ret
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 324: void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint8_t GPIO_Pin)
|
|
; -----------------------------------------
|
|
; function GPIO_ResetBits
|
|
; -----------------------------------------
|
|
_GPIO_ResetBits:
|
|
push a
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 326: GPIOx->ODR &= (uint8_t)(~GPIO_Pin);
|
|
push a
|
|
ld a, (x)
|
|
ld (0x02, sp), a
|
|
pop a
|
|
cpl a
|
|
and a, (0x01, sp)
|
|
ld (x), a
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 327: }
|
|
pop a
|
|
ret
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 336: void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint8_t GPIO_Pin)
|
|
; -----------------------------------------
|
|
; function GPIO_ToggleBits
|
|
; -----------------------------------------
|
|
_GPIO_ToggleBits:
|
|
push a
|
|
ld (0x01, sp), a
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 338: GPIOx->ODR ^= GPIO_Pin;
|
|
ld a, (x)
|
|
xor a, (0x01, sp)
|
|
ld (x), a
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 339: }
|
|
pop a
|
|
ret
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 347: uint8_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx)
|
|
; -----------------------------------------
|
|
; function GPIO_ReadInputData
|
|
; -----------------------------------------
|
|
_GPIO_ReadInputData:
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 349: return ((uint8_t)GPIOx->IDR);
|
|
ld a, (0x1, x)
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 350: }
|
|
ret
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 358: uint8_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)
|
|
; -----------------------------------------
|
|
; function GPIO_ReadOutputData
|
|
; -----------------------------------------
|
|
_GPIO_ReadOutputData:
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 360: return ((uint8_t)GPIOx->ODR);
|
|
ld a, (x)
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 361: }
|
|
ret
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 378: BitStatus GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin)
|
|
; -----------------------------------------
|
|
; function GPIO_ReadInputDataBit
|
|
; -----------------------------------------
|
|
_GPIO_ReadInputDataBit:
|
|
push a
|
|
ld (0x01, sp), a
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 380: return ((BitStatus)(GPIOx->IDR & (uint8_t)GPIO_Pin));
|
|
ld a, (0x1, x)
|
|
and a, (0x01, sp)
|
|
neg a
|
|
clr a
|
|
rlc a
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 381: }
|
|
addw sp, #1
|
|
ret
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 389: BitStatus GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin)
|
|
; -----------------------------------------
|
|
; function GPIO_ReadOutputDataBit
|
|
; -----------------------------------------
|
|
_GPIO_ReadOutputDataBit:
|
|
push a
|
|
ld (0x01, sp), a
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 391: return ((BitStatus)(GPIOx->ODR & (uint8_t)GPIO_Pin));
|
|
ld a, (x)
|
|
and a, (0x01, sp)
|
|
neg a
|
|
clr a
|
|
rlc a
|
|
; ../inc/stm8l151x/src/stm8l15x_gpio.c: 392: }
|
|
addw sp, #1
|
|
ret
|
|
.area CODE
|
|
.area CONST
|
|
.area INITIALIZER
|
|
.area CABS (ABS)
|