325 lines
7.9 KiB
NASM
325 lines
7.9 KiB
NASM
;--------------------------------------------------------
|
|
; File Created by SDCC : free open source ISO C Compiler
|
|
; Version 4.5.0 #15242 (Linux)
|
|
;--------------------------------------------------------
|
|
.module main
|
|
|
|
;--------------------------------------------------------
|
|
; Public variables in this module
|
|
;--------------------------------------------------------
|
|
.globl _main
|
|
.globl _USART_Cmd
|
|
.globl _USART_Init
|
|
.globl _GPIO_ResetBits
|
|
.globl _GPIO_SetBits
|
|
.globl _GPIO_Init
|
|
.globl _CLK_PeripheralClockConfig
|
|
.globl _CLK_SYSCLKSourceSwitchCmd
|
|
.globl _CLK_SYSCLKDivConfig
|
|
.globl _CLK_GetSYSCLKSource
|
|
.globl _CLK_SYSCLKSourceConfig
|
|
;--------------------------------------------------------
|
|
; ram data
|
|
;--------------------------------------------------------
|
|
.area DATA
|
|
;--------------------------------------------------------
|
|
; ram data
|
|
;--------------------------------------------------------
|
|
.area INITIALIZED
|
|
;--------------------------------------------------------
|
|
; Stack segment in internal ram
|
|
;--------------------------------------------------------
|
|
.area SSEG
|
|
__start__stack:
|
|
.ds 1
|
|
|
|
;--------------------------------------------------------
|
|
; absolute external ram data
|
|
;--------------------------------------------------------
|
|
.area DABS (ABS)
|
|
|
|
; default segment ordering for linker
|
|
.area HOME
|
|
.area GSINIT
|
|
.area GSFINAL
|
|
.area CONST
|
|
.area INITIALIZER
|
|
.area CODE
|
|
|
|
;--------------------------------------------------------
|
|
; interrupt vector
|
|
;--------------------------------------------------------
|
|
.area HOME
|
|
__interrupt_vect:
|
|
int s_GSINIT ; reset
|
|
int _TRAP_IRQHandler ; trap
|
|
int 0x000000 ; int0
|
|
int _FLASH_IRQHandler ; int1
|
|
int _DMA1_CHANNEL0_1_IRQHandler ; int2
|
|
int _DMA1_CHANNEL2_3_IRQHandler ; int3
|
|
int _RTC_CSSLSE_IRQHandler ; int4
|
|
int _EXTIE_F_PVD_IRQHandler ; int5
|
|
int _EXTIB_G_IRQHandler ; int6
|
|
int _EXTID_H_IRQHandler ; int7
|
|
int _EXTI0_IRQHandler ; int8
|
|
int _EXTI1_IRQHandler ; int9
|
|
int _EXTI2_IRQHandler ; int10
|
|
int _EXTI3_IRQHandler ; int11
|
|
int _EXTI4_IRQHandler ; int12
|
|
int _EXTI5_IRQHandler ; int13
|
|
int _EXTI6_IRQHandler ; int14
|
|
int _EXTI7_IRQHandler ; int15
|
|
int _LCD_AES_IRQHandler ; int16
|
|
int _SWITCH_CSS_BREAK_DAC_IRQHandler ; int17
|
|
int _ADC1_COMP_IRQHandler ; int18
|
|
int _TIM2_UPD_OVF_TRG_BRK_USART2_TX_IRQHandler ; int19
|
|
int _TIM2_CC_USART2_RX_IRQHandler ; int20
|
|
int _TIM3_UPD_OVF_TRG_BRK_USART3_TX_IRQHandler ; int21
|
|
int _TIM3_CC_USART3_RX_IRQHandler ; int22
|
|
int _TIM1_UPD_OVF_TRG_COM_IRQHandler ; int23
|
|
int _TIM1_CC_IRQHandler ; int24
|
|
int _TIM4_UPD_OVF_TRG_IRQHandler ; int25
|
|
int _SPI1_IRQHandler ; int26
|
|
int _USART1_TX_TIM5_UPD_OVF_TRG_BRK_IRQHandler ; int27
|
|
int _USART1_RX_TIM5_CC_IRQHandler ; int28
|
|
int _I2C1_SPI2_IRQHandler ; int29
|
|
;--------------------------------------------------------
|
|
; global & static initialisations
|
|
;--------------------------------------------------------
|
|
.area HOME
|
|
.area GSINIT
|
|
.area GSFINAL
|
|
.area GSINIT
|
|
call ___sdcc_external_startup
|
|
tnz a
|
|
jreq __sdcc_init_data
|
|
jp __sdcc_program_startup
|
|
__sdcc_init_data:
|
|
; stm8_genXINIT() start
|
|
ldw x, #l_DATA
|
|
jreq 00002$
|
|
00001$:
|
|
clr (s_DATA - 1, x)
|
|
decw x
|
|
jrne 00001$
|
|
00002$:
|
|
ldw x, #l_INITIALIZER
|
|
jreq 00004$
|
|
00003$:
|
|
ld a, (s_INITIALIZER - 1, x)
|
|
ld (s_INITIALIZED - 1, x), a
|
|
decw x
|
|
jrne 00003$
|
|
00004$:
|
|
; stm8_genXINIT() end
|
|
.area GSFINAL
|
|
jp __sdcc_program_startup
|
|
;--------------------------------------------------------
|
|
; Home
|
|
;--------------------------------------------------------
|
|
.area HOME
|
|
.area HOME
|
|
__sdcc_program_startup:
|
|
jp _main
|
|
; return from main will return to caller
|
|
;--------------------------------------------------------
|
|
; code
|
|
;--------------------------------------------------------
|
|
.area CODE
|
|
; ../src/main.c: 24: void main(void)
|
|
; -----------------------------------------
|
|
; function main
|
|
; -----------------------------------------
|
|
_main:
|
|
; ../src/main.c: 27: Led_Init;
|
|
push #0xc0
|
|
ld a, #0x10
|
|
ldw x, #0x500a
|
|
call _GPIO_Init
|
|
; ../src/main.c: 28: blink(1);
|
|
clrw x
|
|
incw x
|
|
call _blink
|
|
; ../src/main.c: 29: USART_Config();
|
|
call _USART_Config
|
|
; ../src/main.c: 30: println("Hello");
|
|
ldw x, #(___str_0+0)
|
|
call _println
|
|
; ../src/main.c: 31: while (1);
|
|
00102$:
|
|
jra 00102$
|
|
; ../src/main.c: 32: }
|
|
ret
|
|
; ../src/main.c: 34: static void CLK_Config(void)
|
|
; -----------------------------------------
|
|
; function CLK_Config
|
|
; -----------------------------------------
|
|
_CLK_Config:
|
|
; ../src/main.c: 37: CLK_SYSCLKSourceSwitchCmd(ENABLE);
|
|
ld a, #0x01
|
|
call _CLK_SYSCLKSourceSwitchCmd
|
|
; ../src/main.c: 38: CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_LSE);
|
|
ld a, #0x08
|
|
call _CLK_SYSCLKSourceConfig
|
|
; ../src/main.c: 40: CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);
|
|
clr a
|
|
call _CLK_SYSCLKDivConfig
|
|
; ../src/main.c: 41: while (CLK_GetSYSCLKSource() != CLK_SYSCLKSource_LSE);
|
|
00101$:
|
|
call _CLK_GetSYSCLKSource
|
|
cp a, #0x08
|
|
jrne 00101$
|
|
ret
|
|
jra 00101$
|
|
; ../src/main.c: 42: }
|
|
ret
|
|
; ../src/main.c: 44: static void blink(uint16_t repeats) {
|
|
; -----------------------------------------
|
|
; function blink
|
|
; -----------------------------------------
|
|
_blink:
|
|
sub sp, #4
|
|
ldw (0x01, sp), x
|
|
; ../src/main.c: 45: for (uint16_t i = 0; i <= repeats; i++) {
|
|
clrw x
|
|
ldw (0x03, sp), x
|
|
00111$:
|
|
ldw x, (0x03, sp)
|
|
cpw x, (0x01, sp)
|
|
jrugt 00113$
|
|
; ../src/main.c: 46: Led_ON;
|
|
ld a, #0x10
|
|
ldw x, #0x500a
|
|
call _GPIO_SetBits
|
|
; ../src/main.c: 47: for (uint16_t j = 0; j <= 4000; j++) {nop();}
|
|
clrw x
|
|
00105$:
|
|
ldw y, x
|
|
cpw y, #0x0fa0
|
|
jrugt 00101$
|
|
nop
|
|
incw x
|
|
jra 00105$
|
|
00101$:
|
|
; ../src/main.c: 48: Led_OFF;
|
|
ld a, #0x10
|
|
ldw x, #0x500a
|
|
call _GPIO_ResetBits
|
|
; ../src/main.c: 49: for (uint16_t j = 0; j <= 4000; j++) {nop();}
|
|
clrw x
|
|
00108$:
|
|
ldw y, x
|
|
cpw y, #0x0fa0
|
|
jrugt 00112$
|
|
nop
|
|
incw x
|
|
jra 00108$
|
|
00112$:
|
|
; ../src/main.c: 45: for (uint16_t i = 0; i <= repeats; i++) {
|
|
ldw x, (0x03, sp)
|
|
incw x
|
|
ldw (0x03, sp), x
|
|
jra 00111$
|
|
00113$:
|
|
; ../src/main.c: 51: }
|
|
addw sp, #4
|
|
ret
|
|
; ../src/main.c: 53: static void putchar(uint8_t Data) {
|
|
; -----------------------------------------
|
|
; function putchar
|
|
; -----------------------------------------
|
|
_putchar:
|
|
; ../src/main.c: 54: while (!(USART1->SR & USART_FLAG_TXE));
|
|
00101$:
|
|
ldw x, #0x5230
|
|
push a
|
|
ld a, (x)
|
|
ld xh, a
|
|
pop a
|
|
tnzw x
|
|
jrpl 00101$
|
|
; ../src/main.c: 55: USART1->DR = Data;
|
|
ld 0x5231, a
|
|
; ../src/main.c: 56: }
|
|
ret
|
|
; ../src/main.c: 58: static void print(const char* s){
|
|
; -----------------------------------------
|
|
; function print
|
|
; -----------------------------------------
|
|
_print:
|
|
; ../src/main.c: 59: while (*s) {
|
|
00101$:
|
|
ld a, (x)
|
|
jrne 00121$
|
|
ret
|
|
00121$:
|
|
; ../src/main.c: 60: putchar(*s++);
|
|
incw x
|
|
pushw x
|
|
call _putchar
|
|
popw x
|
|
jra 00101$
|
|
; ../src/main.c: 62: }
|
|
ret
|
|
; ../src/main.c: 64: static void println(const char* s){
|
|
; -----------------------------------------
|
|
; function println
|
|
; -----------------------------------------
|
|
_println:
|
|
; ../src/main.c: 65: print(s);
|
|
call _print
|
|
; ../src/main.c: 66: putchar('\n');
|
|
ld a, #0x0a
|
|
; ../src/main.c: 67: }
|
|
jp _putchar
|
|
; ../src/main.c: 69: static void USART_Config(void)
|
|
; -----------------------------------------
|
|
; function USART_Config
|
|
; -----------------------------------------
|
|
_USART_Config:
|
|
; ../src/main.c: 72: SYSCFG->RMPCR1 &= ~(0b11 << 4);
|
|
ld a, 0x509e
|
|
and a, #0xcf
|
|
ld 0x509e, a
|
|
; ../src/main.c: 73: SYSCFG->RMPCR1 |= (0b01 << 4);
|
|
bset 0x509e, #4
|
|
; ../src/main.c: 75: GPIO_Init(GPIOA, GPIO_Pin_2, GPIO_Mode_Out_PP_High_Fast);
|
|
push #0xf0
|
|
ld a, #0x04
|
|
ldw x, #0x5000
|
|
call _GPIO_Init
|
|
; ../src/main.c: 76: GPIO_Init(GPIOA, GPIO_Pin_3, GPIO_Mode_In_FL_No_IT);
|
|
push #0x00
|
|
ld a, #0x08
|
|
ldw x, #0x5000
|
|
call _GPIO_Init
|
|
; ../src/main.c: 78: CLK_PeripheralClockConfig(CLK_Peripheral_USART1, ENABLE);
|
|
push #0x01
|
|
ld a, #0x05
|
|
call _CLK_PeripheralClockConfig
|
|
; ../src/main.c: 80: USART_Init(USART1, (uint32_t)9600,
|
|
push #0x08
|
|
push #0x00
|
|
push #0x00
|
|
push #0x00
|
|
push #0x80
|
|
push #0x25
|
|
clrw x
|
|
pushw x
|
|
ldw x, #0x5230
|
|
call _USART_Init
|
|
; ../src/main.c: 83: USART_Cmd(USART1, ENABLE);
|
|
ld a, #0x01
|
|
ldw x, #0x5230
|
|
; ../src/main.c: 84: }
|
|
jp _USART_Cmd
|
|
.area CODE
|
|
.area CONST
|
|
.area CONST
|
|
___str_0:
|
|
.ascii "Hello"
|
|
.db 0x00
|
|
.area CODE
|
|
.area INITIALIZER
|
|
.area CABS (ABS)
|