This commit is contained in:
刘正航
2026-04-16 16:55:01 +08:00
commit 609eb878d1
624 changed files with 214375 additions and 0 deletions

View File

@@ -0,0 +1,207 @@
{
"configurations": [
{
"name": "Flash",
"includePath": [
"d:\\Project\\MFT\\Motor\\Libraries\\CMSIS\\Device\\ST\\STM32F10x\\Include",
"d:\\Project\\MFT\\Motor\\Libraries\\STM32F10x_StdPeriph_Driver\\inc",
"d:\\Project\\MFT\\Motor\\Libraries\\STM32_USB-FS-Device_Driver\\inc",
"d:\\Project\\MFT\\Motor\\Libraries\\CMSIS\\Include",
"d:\\Project\\MFT\\Motor\\User\\bsp",
"d:\\Project\\MFT\\Motor\\User\\bsp\\inc",
"d:\\Project\\MFT\\Motor\\User\\app\\inc",
"d:\\Project\\MFT\\Motor\\User",
"C:\\Keil_v5\\ARM\\ARMCC\\include",
"C:\\Keil_v5\\ARM\\ARMCC\\include\\rw",
"d:\\Project\\MFT\\Motor\\User\\app\\src",
"d:\\Project\\MFT\\Motor\\User\\bsp\\src",
"d:\\Project\\MFT\\Motor\\Libraries\\CMSIS\\Device\\ST\\STM32F10x\\Source\\Templates\\arm",
"d:\\Project\\MFT\\Motor\\Libraries\\STM32F10x_StdPeriph_Driver\\src",
"d:\\Project\\MFT\\Motor\\Doc"
],
"defines": [
"USE_STDPERIPH_DRIVER",
"STM32F10X_HD",
"__CC_ARM",
"__arm__",
"__align(x)=",
"__ALIGNOF__(x)=",
"__alignof__(x)=",
"__asm(x)=",
"__forceinline=",
"__restrict=",
"__global_reg(n)=",
"__inline=",
"__int64=long long",
"__INTADDR__(expr)=0",
"__irq=",
"__packed=",
"__pure=",
"__smc(n)=",
"__svc(n)=",
"__svc_indirect(n)=",
"__svc_indirect_r7(n)=",
"__value_in_regs=",
"__weak=",
"__writeonly=",
"__declspec(x)=",
"__attribute__(x)=",
"__nonnull__(x)=",
"__register=",
"__breakpoint(x)=",
"__cdp(x,y,z)=",
"__clrex()=",
"__clz(x)=0U",
"__current_pc()=0U",
"__current_sp()=0U",
"__disable_fiq()=",
"__disable_irq()=",
"__dmb(x)=",
"__dsb(x)=",
"__enable_fiq()=",
"__enable_irq()=",
"__fabs(x)=0.0",
"__fabsf(x)=0.0f",
"__force_loads()=",
"__force_stores()=",
"__isb(x)=",
"__ldrex(x)=0U",
"__ldrexd(x)=0U",
"__ldrt(x)=0U",
"__memory_changed()=",
"__nop()=",
"__pld(...)=",
"__pli(...)=",
"__qadd(x,y)=0",
"__qdbl(x)=0",
"__qsub(x,y)=0",
"__rbit(x)=0U",
"__rev(x)=0U",
"__return_address()=0U",
"__ror(x,y)=0U",
"__schedule_barrier()=",
"__semihost(x,y)=0",
"__sev()=",
"__sqrt(x)=0.0",
"__sqrtf(x)=0.0f",
"__ssat(x,y)=0",
"__strex(x,y)=0U",
"__strexd(x,y)=0",
"__strt(x,y)=",
"__swp(x,y)=0U",
"__usat(x,y)=0U",
"__wfe()=",
"__wfi()=",
"__yield()=",
"__vfp_status(x,y)=0"
],
"intelliSenseMode": "${default}"
},
{
"name": "CpuRAM",
"includePath": [
"d:\\Project\\MFT\\Motor\\Libraries\\CMSIS\\Device\\ST\\STM32F10x\\Include",
"d:\\Project\\MFT\\Motor\\Libraries\\STM32F10x_StdPeriph_Driver\\inc",
"d:\\Project\\MFT\\Motor\\Libraries\\STM32_USB-FS-Device_Driver\\inc",
"d:\\Project\\MFT\\Motor\\Libraries\\CMSIS\\Include",
"d:\\Project\\MFT\\Motor\\User\\bsp",
"d:\\Project\\MFT\\Motor\\User\\bsp\\inc",
"d:\\Project\\MFT\\Motor\\User\\app\\inc",
"d:\\Project\\MFT\\Motor\\User\\fonts",
"d:\\Project\\MFT\\Motor\\User\\images",
"d:\\Project\\MFT\\Motor\\User\\uIP\\uip",
"d:\\Project\\MFT\\Motor\\User\\uIP\\http",
"d:\\Project\\MFT\\Motor\\User\\uIP\\dm9000",
"d:\\Project\\MFT\\Motor\\User\\FatFS\\src",
"d:\\Project\\MFT\\Motor\\User\\usb_mass",
"d:\\Project\\MFT\\Motor\\User\\CH376\\inc",
"C:\\Keil_v5\\ARM\\ARMCC\\include",
"C:\\Keil_v5\\ARM\\ARMCC\\include\\rw",
"d:\\Project\\MFT\\Motor\\User\\app\\src",
"d:\\Project\\MFT\\Motor\\User\\bsp\\src",
"d:\\Project\\MFT\\Motor\\Libraries\\CMSIS\\Device\\ST\\STM32F10x\\Source\\Templates\\arm",
"d:\\Project\\MFT\\Motor\\Libraries\\STM32F10x_StdPeriph_Driver\\src",
"d:\\Project\\MFT\\Motor\\Doc"
],
"defines": [
"USE_STDPERIPH_DRIVER",
"STM32F10X_HD",
"VECT_TAB_SRAM",
"__CC_ARM",
"__arm__",
"__align(x)=",
"__ALIGNOF__(x)=",
"__alignof__(x)=",
"__asm(x)=",
"__forceinline=",
"__restrict=",
"__global_reg(n)=",
"__inline=",
"__int64=long long",
"__INTADDR__(expr)=0",
"__irq=",
"__packed=",
"__pure=",
"__smc(n)=",
"__svc(n)=",
"__svc_indirect(n)=",
"__svc_indirect_r7(n)=",
"__value_in_regs=",
"__weak=",
"__writeonly=",
"__declspec(x)=",
"__attribute__(x)=",
"__nonnull__(x)=",
"__register=",
"__breakpoint(x)=",
"__cdp(x,y,z)=",
"__clrex()=",
"__clz(x)=0U",
"__current_pc()=0U",
"__current_sp()=0U",
"__disable_fiq()=",
"__disable_irq()=",
"__dmb(x)=",
"__dsb(x)=",
"__enable_fiq()=",
"__enable_irq()=",
"__fabs(x)=0.0",
"__fabsf(x)=0.0f",
"__force_loads()=",
"__force_stores()=",
"__isb(x)=",
"__ldrex(x)=0U",
"__ldrexd(x)=0U",
"__ldrt(x)=0U",
"__memory_changed()=",
"__nop()=",
"__pld(...)=",
"__pli(...)=",
"__qadd(x,y)=0",
"__qdbl(x)=0",
"__qsub(x,y)=0",
"__rbit(x)=0U",
"__rev(x)=0U",
"__return_address()=0U",
"__ror(x,y)=0U",
"__schedule_barrier()=",
"__semihost(x,y)=0",
"__sev()=",
"__sqrt(x)=0.0",
"__sqrtf(x)=0.0f",
"__ssat(x,y)=0",
"__strex(x,y)=0U",
"__strexd(x,y)=0",
"__strt(x,y)=",
"__swp(x,y)=0U",
"__usat(x,y)=0U",
"__wfe()=",
"__wfi()=",
"__yield()=",
"__vfp_status(x,y)=0"
],
"intelliSenseMode": "${default}"
}
],
"version": 4
}

View File

@@ -0,0 +1,18 @@
[info] Log at : 2025/7/17|16:20:31|GMT+0800
[info] Log at : 2025/7/17|16:20:38|GMT+0800
[info] Log at : 2025/7/17|16:31:17|GMT+0800
[info] Log at : 2025/7/17|16:32:14|GMT+0800
[info] Log at : 2025/7/17|16:32:17|GMT+0800
[info] Log at : 2026/4/15|18:36:04|GMT+0800
[info] Log at : 2026/4/15|18:36:07|GMT+0800
[info] Log at : 2026/4/16|09:06:52|GMT+0800
[info] Log at : 2026/4/16|16:26:04|GMT+0800

9
Project/MDK-ARM/.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,9 @@
{
"files.associations": {
"*.bin": "plaintext",
"bsp.h": "c",
"string.h": "c",
"math.h": "c",
"stdint.h": "c"
}
}

3
Project/MDK-ARM/.vscode/uv4.log vendored Normal file
View File

@@ -0,0 +1,3 @@
Load "d:\\Project\\MFT\\Motor\\Project\\MDK-ARM\\Flash\\Obj\\output.axf"
Erase Done.Programming Done.Verify OK.Application running ...
Flash Load finished at 16:27:27

1
Project/MDK-ARM/.vscode/uv4.log.lock vendored Normal file
View File

@@ -0,0 +1 @@
2026/4/16 16:27:27

View File

@@ -0,0 +1,31 @@
/*
*********************************************************************************************************
【本例程在安富莱STM32F103ZE-EK开发板上调试通过 】
【QQ: 1295744630, 旺旺armfly, Email: armfly@qq.com 】
文件名: CpuRAM.ini
这是CPU内部RAM调试脚本。开始Load程序时由IDE控制仿真器执行这段脚本程序。
本脚本完成的功能是
(1) 装载目标程序到CPU内部RAM
(2) 设置堆栈指针SP
(3) 修改PC指针
脚本的语法:
参加MDK的HELP, 搜索关键字 “uv3 Library Routines” 可以看到uv3支持的脚本命令
Copyright (C), 2013-2014, 安富莱电子 www.armfly.com
*********************************************************************************************************
*/
FUNC void Setup (void) {
SP = _RDWORD(0x20000000); // 设置堆栈指针
PC = _RDWORD(0x20000004); // 设置PC指针
_WDWORD(0xE000ED08, 0x20000000); // 设置中断向量表地址
}
LOAD CpuRAM\obj\output.axf INCREMENTAL // 先装载代码到CPU内部RAM (工程选项中就不要选Load Application ar Startup)
Setup(); // 再调用Setup函数修改堆栈和PC指针(因为SP的值需要从目标代码中读取)
g, main // 运行到main()函数

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<component_viewer schemaVersion="0.1" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="Component_Viewer.xsd">
<component name="EventRecorderStub" version="1.0.0"/> <!--name and version of the component-->
<events>
</events>
</component_viewer>

View File

@@ -0,0 +1,149 @@
; generated by Component: ARM Compiler 5.06 update 7 (build 960) Tool: ArmCC [4d365d]
; commandline ArmCC [--list --split_sections --debug -c --asm --interleave -o.\flash\obj\bsp.o --asm_dir=.\Flash\List\ --list_dir=.\Flash\List\ --depend=.\flash\obj\bsp.d --cpu=Cortex-M3 --apcs=interwork -O0 --diag_suppress=9931,870 -I..\..\Libraries\CMSIS\Device\ST\STM32F10x\Include -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Libraries\STM32_USB-FS-Device_Driver\inc -I..\..\Libraries\CMSIS\Include -I..\..\User\bsp -I..\..\User\bsp\inc -I..\..\User\app\inc -I..\..\User -IC:\Users\w1619\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__MICROLIB -D__UVISION_VERSION=538 -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD --omf_browse=.\flash\obj\bsp.crf ..\..\User\bsp\bsp.c]
THUMB
AREA ||i.bsp_Idle||, CODE, READONLY, ALIGN=1
bsp_Idle PROC
;;;104 */
;;;105 void bsp_Idle(void)
000000 4770 BX lr
;;;106 {
;;;107 /* --- 喂狗 */
;;;108
;;;109 /* --- 让CPU进入休眠由Systick定时中断唤醒或者其他中断唤醒 */
;;;110
;;;111 /* 例如 emWin 图形库,可以插入图形库需要的轮询函数 */
;;;112 // GUI_Exec();
;;;113
;;;114 /* 例如 uIP 协议可以插入uip轮询函数 */
;;;115 }
;;;116
ENDP
AREA ||i.bsp_Init||, CODE, READONLY, ALIGN=2
bsp_Init PROC
;;;32 */
;;;33 void bsp_Init(void)
000000 b510 PUSH {r4,lr}
;;;34 {
;;;35 /*
;;;36 由于ST固件库的启动文件已经执行了CPU系统时钟的初始化所以不必再次重复配置系统时钟。
;;;37 启动文件配置了CPU主时钟频率、内部Flash访问速度和可选的外部SRAM FSMC初始化。
;;;38
;;;39 系统时钟缺省配置为72MHz如果需要更改可以修改 system_stm32f103.c 文件
;;;40 */
;;;41
;;;42 /* 优先级分组设置为4 */
;;;43 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
000002 f44f7040 MOV r0,#0x300
000006 f7fffffe BL NVIC_PriorityGroupConfig
;;;44
;;;45 bsp_InitKey(); /* 初始化按键 */
00000a f7fffffe BL bsp_InitKey
;;;46
;;;47 bsp_InitTimer(); /* 初始化系统滴答定时器 (此函数会开中断) */
00000e f7fffffe BL bsp_InitTimer
;;;48
;;;49 /* 初始化串口驱动 */
;;;50 USART_Config();
000012 f7fffffe BL USART_Config
;;;51 /* 配置使用DMA模式 */
;;;52 USARTx_DMA_Config();
000016 f7fffffe BL USARTx_DMA_Config
;;;53 USART_DMACmd(DEBUG_USARTx, USART_DMAReq_Rx, ENABLE);
00001a 2201 MOVS r2,#1
00001c 2140 MOVS r1,#0x40
00001e 4807 LDR r0,|L2.60|
000020 f7fffffe BL USART_DMACmd
;;;54
;;;55 BEEP_InitHard(); /* 配置蜂鸣器GPIO */
000024 f7fffffe BL BEEP_InitHard
;;;56
;;;57 bsp_InitI2C(); /* 配置I2C总线 */
000028 f7fffffe BL bsp_InitI2C
;;;58 bsp_InitDigitalTube(); // 初始化数码管控制端口
00002c f7fffffe BL bsp_InitDigitalTube
;;;59
;;;60 bsp_Init_Drv8880_Hard();
000030 f7fffffe BL bsp_Init_Drv8880_Hard
;;;61 bsp_InitStepMoto();
000034 f7fffffe BL bsp_InitStepMoto
;;;62 }
000038 bd10 POP {r4,pc}
;;;63
ENDP
00003a 0000 DCW 0x0000
|L2.60|
DCD 0x40013800
AREA ||i.bsp_RunPer10ms||, CODE, READONLY, ALIGN=1
bsp_RunPer10ms PROC
;;;72 */
;;;73 void bsp_RunPer10ms(void)
000000 b510 PUSH {r4,lr}
;;;74 {
;;;75 bsp_KeyScan(); /* 每10ms扫描按键一次 */
000002 f7fffffe BL bsp_KeyScan
;;;76
;;;77 BEEP_Pro(); /* 蜂鸣器定时处理 */
000006 f7fffffe BL BEEP_Pro
;;;78
;;;79 // bsp_FpgaPowerMainLoop(30); // 给FPAGA延迟供电延迟时间位30*10ms
;;;80 }
00000a bd10 POP {r4,pc}
;;;81
ENDP
AREA ||i.bsp_RunPer1ms||, CODE, READONLY, ALIGN=1
bsp_RunPer1ms PROC
;;;90 */
;;;91 void bsp_RunPer1ms(void)
000000 b510 PUSH {r4,lr}
;;;92 {
;;;93 bsp_DigitalTubeMainLoop();
000002 f7fffffe BL bsp_DigitalTubeMainLoop
;;;94 }
000006 bd10 POP {r4,pc}
;;;95
ENDP
AREA ||.data||, DATA, ALIGN=2
RxCount
DCD 0x00000000
TxCount
DCD 0x00000000
;*** Start embedded assembler ***
#line 1 "..\\..\\User\\bsp\\bsp.c"
AREA ||.rev16_text||, CODE
THUMB
EXPORT |__asm___5_bsp_c_RxCount____REV16|
#line 114 "..\\..\\Libraries\\CMSIS\\Include\\core_cmInstr.h"
|__asm___5_bsp_c_RxCount____REV16| PROC
#line 115
rev16 r0, r0
bx lr
ENDP
AREA ||.revsh_text||, CODE
THUMB
EXPORT |__asm___5_bsp_c_RxCount____REVSH|
#line 128
|__asm___5_bsp_c_RxCount____REVSH| PROC
#line 129
revsh r0, r0
bx lr
ENDP
;*** End embedded assembler ***

View File

View File

@@ -0,0 +1,323 @@
; generated by Component: ARM Compiler 5.06 update 7 (build 960) Tool: ArmCC [4d365d]
; commandline ArmCC [--list --split_sections --debug -c --asm --interleave -o.\flash\obj\bsp_beep.o --asm_dir=.\Flash\List\ --list_dir=.\Flash\List\ --depend=.\flash\obj\bsp_beep.d --cpu=Cortex-M3 --apcs=interwork -O0 --diag_suppress=9931,870 -I..\..\Libraries\CMSIS\Device\ST\STM32F10x\Include -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Libraries\STM32_USB-FS-Device_Driver\inc -I..\..\Libraries\CMSIS\Include -I..\..\User\bsp -I..\..\User\bsp\inc -I..\..\User\app\inc -I..\..\User -IC:\Users\w1619\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__MICROLIB -D__UVISION_VERSION=538 -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD --omf_browse=.\flash\obj\bsp_beep.crf ..\..\User\bsp\src\bsp_beep.c]
THUMB
AREA ||i.BEEP_InitHard||, CODE, READONLY, ALIGN=2
BEEP_InitHard PROC
;;;51 */
;;;52 void BEEP_InitHard(void)
000000 b508 PUSH {r3,lr}
;;;53 {
;;;54 #ifdef BEEP_HAVE_POWER /* 有源蜂鸣器 */
;;;55 GPIO_InitTypeDef GPIO_InitStructure;
;;;56
;;;57 /* 打开GPIO的时钟 */
;;;58 RCC_APB2PeriphClockCmd(GPIO_RCC_BEEP, ENABLE);
000002 2101 MOVS r1,#1
000004 2008 MOVS r0,#8
000006 f7fffffe BL RCC_APB2PeriphClockCmd
;;;59
;;;60 BEEP_DISABLE();
00000a f44f7080 MOV r0,#0x100
00000e 4908 LDR r1,|L1.48|
000010 6008 STR r0,[r1,#0]
;;;61
;;;62 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
000012 2003 MOVS r0,#3
000014 f88d0002 STRB r0,[sp,#2]
;;;63 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /* 推挽输出模式 */
000018 2010 MOVS r0,#0x10
00001a f88d0003 STRB r0,[sp,#3]
;;;64 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_BEEP;
00001e 0100 LSLS r0,r0,#4
000020 f8ad0000 STRH r0,[sp,#0]
;;;65 GPIO_Init(GPIO_PORT_BEEP, &GPIO_InitStructure);
000024 4669 MOV r1,sp
000026 4802 LDR r0,|L1.48|
000028 3814 SUBS r0,r0,#0x14
00002a f7fffffe BL GPIO_Init
;;;66 #else
;;;67 ; /* 无源蜂鸣器 */
;;;68
;;;69 #endif
;;;70 }
00002e bd08 POP {r3,pc}
;;;71
ENDP
|L1.48|
DCD 0x40010c14
AREA ||i.BEEP_KeyTone||, CODE, READONLY, ALIGN=1
BEEP_KeyTone PROC
;;;124 */
;;;125 void BEEP_KeyTone(void)
000000 b500 PUSH {lr}
;;;126 {
;;;127 BEEP_Start(4300, 4, 1, 1);
000002 2301 MOVS r3,#1
000004 461a MOV r2,r3
000006 2104 MOVS r1,#4
000008 f24100cc MOV r0,#0x10cc
00000c f7fffffe BL BEEP_Start
;;;128 }
000010 bd00 POP {pc}
;;;129
ENDP
AREA ||i.BEEP_Pro||, CODE, READONLY, ALIGN=2
BEEP_Pro PROC
;;;137 */
;;;138 void BEEP_Pro(void)
000000 4827 LDR r0,|L3.160|
;;;139 {
;;;140 if ((g_tBeep.ucEnalbe == 0) || (g_tBeep.usStopTime == 0))
000002 7800 LDRB r0,[r0,#0] ; g_tBeep
000004 b110 CBZ r0,|L3.12|
000006 4826 LDR r0,|L3.160|
000008 8880 LDRH r0,[r0,#4] ; g_tBeep
00000a b900 CBNZ r0,|L3.14|
|L3.12|
;;;141 {
;;;142 return;
;;;143 }
;;;144
;;;145 if (g_tBeep.ucState == 0)
;;;146 {
;;;147 if (g_tBeep.usStopTime > 0) /* 间断发声 */
;;;148 {
;;;149 if (++g_tBeep.usCount >= g_tBeep.usBeepTime)
;;;150 {
;;;151 BEEP_DISABLE(); /* 停止发声 */
;;;152 g_tBeep.usCount = 0;
;;;153 g_tBeep.ucState = 1;
;;;154 }
;;;155 }
;;;156 else
;;;157 {
;;;158 ; /* 不做任何处理,连续发声 */
;;;159 }
;;;160 }
;;;161 else if (g_tBeep.ucState == 1)
;;;162 {
;;;163 if (++g_tBeep.usCount >= g_tBeep.usStopTime)
;;;164 {
;;;165 /* 连续发声时直到调用stop停止为止 */
;;;166 if (g_tBeep.usCycle > 0)
;;;167 {
;;;168 if (++g_tBeep.usCycleCount >= g_tBeep.usCycle)
;;;169 {
;;;170 /* 循环次数到,停止发声 */
;;;171 g_tBeep.ucEnalbe = 0;
;;;172 }
;;;173
;;;174 if (g_tBeep.ucEnalbe == 0)
;;;175 {
;;;176 g_tBeep.usStopTime = 0;
;;;177 return;
;;;178 }
;;;179 }
;;;180
;;;181 g_tBeep.usCount = 0;
;;;182 g_tBeep.ucState = 0;
;;;183
;;;184 BEEP_ENABLE(); /* 开始发声 */
;;;185 }
;;;186 }
;;;187 }
00000c 4770 BX lr
|L3.14|
00000e 4824 LDR r0,|L3.160|
000010 7840 LDRB r0,[r0,#1] ;145 ; g_tBeep
000012 b9b0 CBNZ r0,|L3.66|
000014 4822 LDR r0,|L3.160|
000016 8880 LDRH r0,[r0,#4] ;147 ; g_tBeep
000018 2800 CMP r0,#0 ;147
00001a dd3f BLE |L3.156|
00001c 4820 LDR r0,|L3.160|
00001e 8900 LDRH r0,[r0,#8] ;149 ; g_tBeep
000020 1c40 ADDS r0,r0,#1 ;149
000022 b280 UXTH r0,r0 ;149
000024 491e LDR r1,|L3.160|
000026 8108 STRH r0,[r1,#8] ;149
000028 8849 LDRH r1,[r1,#2] ;149 ; g_tBeep
00002a 4288 CMP r0,r1 ;149
00002c db36 BLT |L3.156|
00002e f44f7080 MOV r0,#0x100 ;151
000032 491c LDR r1,|L3.164|
000034 6008 STR r0,[r1,#0] ;151
000036 2000 MOVS r0,#0 ;152
000038 4919 LDR r1,|L3.160|
00003a 8108 STRH r0,[r1,#8] ;152
00003c 2001 MOVS r0,#1 ;153
00003e 7048 STRB r0,[r1,#1] ;153
000040 e02c B |L3.156|
|L3.66|
000042 4817 LDR r0,|L3.160|
000044 7840 LDRB r0,[r0,#1] ;161 ; g_tBeep
000046 2801 CMP r0,#1 ;161
000048 d128 BNE |L3.156|
00004a 4815 LDR r0,|L3.160|
00004c 8900 LDRH r0,[r0,#8] ;163 ; g_tBeep
00004e 1c40 ADDS r0,r0,#1 ;163
000050 b280 UXTH r0,r0 ;163
000052 4913 LDR r1,|L3.160|
000054 8108 STRH r0,[r1,#8] ;163
000056 8889 LDRH r1,[r1,#4] ;163 ; g_tBeep
000058 4288 CMP r0,r1 ;163
00005a db1f BLT |L3.156|
00005c 4810 LDR r0,|L3.160|
00005e 88c0 LDRH r0,[r0,#6] ;166 ; g_tBeep
000060 2800 CMP r0,#0 ;166
000062 dd12 BLE |L3.138|
000064 480e LDR r0,|L3.160|
000066 8940 LDRH r0,[r0,#0xa] ;168 ; g_tBeep
000068 1c40 ADDS r0,r0,#1 ;168
00006a b280 UXTH r0,r0 ;168
00006c 490c LDR r1,|L3.160|
00006e 8148 STRH r0,[r1,#0xa] ;168
000070 88c9 LDRH r1,[r1,#6] ;168 ; g_tBeep
000072 4288 CMP r0,r1 ;168
000074 db02 BLT |L3.124|
000076 2000 MOVS r0,#0 ;171
000078 4909 LDR r1,|L3.160|
00007a 7008 STRB r0,[r1,#0] ;171
|L3.124|
00007c 4808 LDR r0,|L3.160|
00007e 7800 LDRB r0,[r0,#0] ;174 ; g_tBeep
000080 b918 CBNZ r0,|L3.138|
000082 2000 MOVS r0,#0 ;176
000084 4906 LDR r1,|L3.160|
000086 8088 STRH r0,[r1,#4] ;176
000088 e7c0 B |L3.12|
|L3.138|
00008a 2000 MOVS r0,#0 ;181
00008c 4904 LDR r1,|L3.160|
00008e 8108 STRH r0,[r1,#8] ;181
000090 7048 STRB r0,[r1,#1] ;182
000092 f44f7080 MOV r0,#0x100 ;184
000096 4903 LDR r1,|L3.164|
000098 1f09 SUBS r1,r1,#4 ;184
00009a 6008 STR r0,[r1,#0] ;184
|L3.156|
00009c bf00 NOP
00009e e7b5 B |L3.12|
;;;188
ENDP
|L3.160|
DCD g_tBeep
|L3.164|
DCD 0x40010c14
AREA ||i.BEEP_Start||, CODE, READONLY, ALIGN=2
BEEP_Start PROC
;;;82 */
;;;83 void BEEP_Start(uint32_t _uiFreq, uint16_t _usBeepTime, uint16_t _usStopTime, uint16_t _usCycle)
000000 b530 PUSH {r4,r5,lr}
;;;84 {
;;;85 if (_usBeepTime == 0)
000002 b901 CBNZ r1,|L4.6|
|L4.4|
;;;86 {
;;;87 return;
;;;88 }
;;;89
;;;90 g_tBeep.uiFreq = _uiFreq;
;;;91 g_tBeep.usBeepTime = _usBeepTime;
;;;92 g_tBeep.usStopTime = _usStopTime;
;;;93 g_tBeep.usCycle = _usCycle;
;;;94 g_tBeep.usCount = 0;
;;;95 g_tBeep.usCycleCount = 0;
;;;96 g_tBeep.ucState = 0;
;;;97 g_tBeep.ucEnalbe = 1; /* 设置完全局参数后再使能发声标志 */
;;;98
;;;99 BEEP_ENABLE(); /* 开始发声 */
;;;100 }
000004 bd30 POP {r4,r5,pc}
|L4.6|
000006 4c08 LDR r4,|L4.40|
000008 60e0 STR r0,[r4,#0xc] ;90 ; g_tBeep
00000a 8061 STRH r1,[r4,#2] ;91
00000c 80a2 STRH r2,[r4,#4] ;92
00000e 80e3 STRH r3,[r4,#6] ;93
000010 2400 MOVS r4,#0 ;94
000012 4d05 LDR r5,|L4.40|
000014 812c STRH r4,[r5,#8] ;94
000016 816c STRH r4,[r5,#0xa] ;95
000018 706c STRB r4,[r5,#1] ;96
00001a 2401 MOVS r4,#1 ;97
00001c 702c STRB r4,[r5,#0] ;97
00001e 0224 LSLS r4,r4,#8 ;99
000020 4d02 LDR r5,|L4.44|
000022 602c STR r4,[r5,#0] ;99
000024 bf00 NOP
000026 e7ed B |L4.4|
;;;101
ENDP
|L4.40|
DCD g_tBeep
|L4.44|
DCD 0x40010c10
AREA ||i.BEEP_Stop||, CODE, READONLY, ALIGN=2
BEEP_Stop PROC
;;;109 */
;;;110 void BEEP_Stop(void)
000000 2000 MOVS r0,#0
;;;111 {
;;;112 g_tBeep.ucEnalbe = 0;
000002 4903 LDR r1,|L5.16|
000004 7008 STRB r0,[r1,#0]
;;;113
;;;114 BEEP_DISABLE(); /* 必须在清控制标志后再停止发声,避免停止后在中断中又开启 */
000006 f44f7080 MOV r0,#0x100
00000a 4902 LDR r1,|L5.20|
00000c 6008 STR r0,[r1,#0]
;;;115 }
00000e 4770 BX lr
;;;116
ENDP
|L5.16|
DCD g_tBeep
|L5.20|
DCD 0x40010c14
AREA ||.bss||, DATA, NOINIT, ALIGN=2
g_tBeep
% 16
;*** Start embedded assembler ***
#line 1 "..\\..\\User\\bsp\\src\\bsp_beep.c"
AREA ||.rev16_text||, CODE
THUMB
EXPORT |__asm___10_bsp_beep_c_471486d3____REV16|
#line 114 "..\\..\\Libraries\\CMSIS\\Include\\core_cmInstr.h"
|__asm___10_bsp_beep_c_471486d3____REV16| PROC
#line 115
rev16 r0, r0
bx lr
ENDP
AREA ||.revsh_text||, CODE
THUMB
EXPORT |__asm___10_bsp_beep_c_471486d3____REVSH|
#line 128
|__asm___10_bsp_beep_c_471486d3____REVSH| PROC
#line 129
revsh r0, r0
bx lr
ENDP
;*** End embedded assembler ***

View File

@@ -0,0 +1,238 @@
; generated by Component: ARM Compiler 5.05 update 1 (build 106) Tool: ArmCC [4d0efa]
; commandline ArmCC [--list --split_sections --debug -c --asm --interleave -o.\flash\obj\bsp_channel_realy.o --asm_dir=.\Flash\List\ --list_dir=.\Flash\List\ --depend=.\flash\obj\bsp_channel_realy.d --cpu=Cortex-M3 --apcs=interwork -O0 --diag_suppress=9931,870 -I..\..\Libraries\CMSIS\Device\ST\STM32F10x\Include -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Libraries\STM32_USB-FS-Device_Driver\inc -I..\..\Libraries\CMSIS\Include -I..\..\User\bsp -I..\..\User\bsp\inc -I..\..\User\app\inc -IC:\Keil_v5\ARM\RV31\INC -IC:\Keil_v5\ARM\CMSIS\Include -IC:\Keil_v5\ARM\Inc\ST\STM32F10x -D__MICROLIB -D__UVISION_VERSION=514 -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD --omf_browse=.\flash\obj\bsp_channel_realy.crf ..\..\User\bsp\src\bsp_channel_realy.c]
THUMB
AREA ||i.bsp_InitChannelRelay||, CODE, READONLY, ALIGN=2
bsp_InitChannelRelay PROC
;;;39
;;;40 void bsp_InitChannelRelay(void)
000000 b508 PUSH {r3,lr}
;;;41 {
;;;42 GPIO_InitTypeDef GPIO_InitStructure;
;;;43
;;;44 // ´ò¿ªGPIOʱÖÓ
;;;45 RCC_APB2PeriphClockCmd(RCC_ALL_RELAY, ENABLE);
000002 2101 MOVS r1,#1
000004 2048 MOVS r0,#0x48
000006 f7fffffe BL RCC_APB2PeriphClockCmd
;;;46
;;;47 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
00000a 2003 MOVS r0,#3
00000c f88d0002 STRB r0,[sp,#2]
;;;48 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /* ÍÆÍìÊä³öģʽ */
000010 2010 MOVS r0,#0x10
000012 f88d0003 STRB r0,[sp,#3]
;;;49
;;;50 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_RELAY1;
000016 2008 MOVS r0,#8
000018 f8ad0000 STRH r0,[sp,#0]
;;;51 GPIO_Init(GPIO_PORT_RELAY1, &GPIO_InitStructure);
00001c 4669 MOV r1,sp
00001e 4814 LDR r0,|L1.112|
000020 f7fffffe BL GPIO_Init
;;;52
;;;53 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_RELAY2;
000024 f44f7080 MOV r0,#0x100
000028 f8ad0000 STRH r0,[sp,#0]
;;;54 GPIO_Init(GPIO_PORT_RELAY2, &GPIO_InitStructure);
00002c 4669 MOV r1,sp
00002e 4811 LDR r0,|L1.116|
000030 f7fffffe BL GPIO_Init
;;;55
;;;56 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_RELAY3;
000034 2004 MOVS r0,#4
000036 f8ad0000 STRH r0,[sp,#0]
;;;57 GPIO_Init(GPIO_PORT_RELAY3, &GPIO_InitStructure);
00003a 4669 MOV r1,sp
00003c 480c LDR r0,|L1.112|
00003e f7fffffe BL GPIO_Init
;;;58
;;;59 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_RELAY4;
000042 f44f7000 MOV r0,#0x200
000046 f8ad0000 STRH r0,[sp,#0]
;;;60 GPIO_Init(GPIO_PORT_RELAY4, &GPIO_InitStructure);
00004a 4669 MOV r1,sp
00004c 4809 LDR r0,|L1.116|
00004e f7fffffe BL GPIO_Init
;;;61
;;;62 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_RELAY5;
000052 2002 MOVS r0,#2
000054 f8ad0000 STRH r0,[sp,#0]
;;;63 GPIO_Init(GPIO_PORT_RELAY5, &GPIO_InitStructure);
000058 4669 MOV r1,sp
00005a 4805 LDR r0,|L1.112|
00005c f7fffffe BL GPIO_Init
;;;64
;;;65 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_RELAY6;
000060 2001 MOVS r0,#1
000062 f8ad0000 STRH r0,[sp,#0]
;;;66 GPIO_Init(GPIO_PORT_RELAY6, &GPIO_InitStructure);
000066 4669 MOV r1,sp
000068 4801 LDR r0,|L1.112|
00006a f7fffffe BL GPIO_Init
;;;67
;;;68 }
00006e bd08 POP {r3,pc}
;;;69
ENDP
|L1.112|
DCD 0x40011800
|L1.116|
DCD 0x40010c00
AREA ||i.bsp_RealyAllOff||, CODE, READONLY, ALIGN=2
bsp_RealyAllOff PROC
;;;69
;;;70 void bsp_RealyAllOff(void)
000000 2008 MOVS r0,#8
;;;71 {
;;;72 GPIO_PORT_RELAY1->BRR = GPIO_PIN_RELAY1;
000002 4908 LDR r1,|L2.36|
000004 6008 STR r0,[r1,#0]
;;;73 GPIO_PORT_RELAY2->BRR = GPIO_PIN_RELAY2;
000006 0140 LSLS r0,r0,#5
000008 4907 LDR r1,|L2.40|
00000a 6008 STR r0,[r1,#0]
;;;74 GPIO_PORT_RELAY3->BRR = GPIO_PIN_RELAY3;
00000c 2004 MOVS r0,#4
00000e 4905 LDR r1,|L2.36|
000010 6008 STR r0,[r1,#0]
;;;75 GPIO_PORT_RELAY4->BRR = GPIO_PIN_RELAY4;
000012 01c0 LSLS r0,r0,#7
000014 4904 LDR r1,|L2.40|
000016 6008 STR r0,[r1,#0]
;;;76 GPIO_PORT_RELAY5->BRR = GPIO_PIN_RELAY5;
000018 2002 MOVS r0,#2
00001a 4902 LDR r1,|L2.36|
00001c 6008 STR r0,[r1,#0]
;;;77 GPIO_PORT_RELAY6->BRR = GPIO_PIN_RELAY6;
00001e 2001 MOVS r0,#1
000020 6008 STR r0,[r1,#0]
;;;78 }
000022 4770 BX lr
;;;79
ENDP
|L2.36|
DCD 0x40011814
|L2.40|
DCD 0x40010c14
AREA ||i.bsp_RelayOn||, CODE, READONLY, ALIGN=2
bsp_RelayOn PROC
;;;85 //------------------------------------------------------------------------------
;;;86 void bsp_RelayOn(uint8_t _ch)
000000 2108 MOVS r1,#8
;;;87 {
;;;88 GPIO_PORT_RELAY1->BRR = GPIO_PIN_RELAY1;
000002 4a1d LDR r2,|L3.120|
000004 6011 STR r1,[r2,#0]
;;;89 GPIO_PORT_RELAY2->BRR = GPIO_PIN_RELAY2;
000006 0149 LSLS r1,r1,#5
000008 4a1c LDR r2,|L3.124|
00000a 6011 STR r1,[r2,#0]
;;;90 GPIO_PORT_RELAY3->BRR = GPIO_PIN_RELAY3;
00000c 2104 MOVS r1,#4
00000e 4a1a LDR r2,|L3.120|
000010 6011 STR r1,[r2,#0]
;;;91 GPIO_PORT_RELAY4->BRR = GPIO_PIN_RELAY4;
000012 01c9 LSLS r1,r1,#7
000014 4a19 LDR r2,|L3.124|
000016 6011 STR r1,[r2,#0]
;;;92 GPIO_PORT_RELAY5->BRR = GPIO_PIN_RELAY5;
000018 2102 MOVS r1,#2
00001a 4a17 LDR r2,|L3.120|
00001c 6011 STR r1,[r2,#0]
;;;93 GPIO_PORT_RELAY6->BRR = GPIO_PIN_RELAY6;
00001e 2101 MOVS r1,#1
000020 6011 STR r1,[r2,#0]
;;;94
;;;95 switch(_ch)
000022 2807 CMP r0,#7
000024 d225 BCS |L3.114|
000026 e8dff000 TBB [pc,r0]
00002a 2404 DCB 0x24,0x04
00002c 090f141a DCB 0x09,0x0f,0x14,0x1a
000030 1f00 DCB 0x1f,0x00
;;;96 {
;;;97 case 1: GPIO_PORT_RELAY1->BSRR = GPIO_PIN_RELAY1; break;
000032 2108 MOVS r1,#8
000034 4a10 LDR r2,|L3.120|
000036 1f12 SUBS r2,r2,#4
000038 6011 STR r1,[r2,#0]
00003a e01b B |L3.116|
;;;98 case 2: GPIO_PORT_RELAY2->BSRR = GPIO_PIN_RELAY2; break;
00003c f44f7180 MOV r1,#0x100
000040 4a0e LDR r2,|L3.124|
000042 1f12 SUBS r2,r2,#4
000044 6011 STR r1,[r2,#0]
000046 e015 B |L3.116|
;;;99 case 3: GPIO_PORT_RELAY3->BSRR = GPIO_PIN_RELAY3; break;
000048 2104 MOVS r1,#4
00004a 4a0b LDR r2,|L3.120|
00004c 1f12 SUBS r2,r2,#4
00004e 6011 STR r1,[r2,#0]
000050 e010 B |L3.116|
;;;100 case 4: GPIO_PORT_RELAY4->BSRR = GPIO_PIN_RELAY4; break;
000052 f44f7100 MOV r1,#0x200
000056 4a09 LDR r2,|L3.124|
000058 1f12 SUBS r2,r2,#4
00005a 6011 STR r1,[r2,#0]
00005c e00a B |L3.116|
;;;101 case 5: GPIO_PORT_RELAY5->BSRR = GPIO_PIN_RELAY5; break;
00005e 2102 MOVS r1,#2
000060 4a05 LDR r2,|L3.120|
000062 1f12 SUBS r2,r2,#4
000064 6011 STR r1,[r2,#0]
000066 e005 B |L3.116|
;;;102 case 6: GPIO_PORT_RELAY6->BSRR = GPIO_PIN_RELAY6; break;
000068 2101 MOVS r1,#1
00006a 4a03 LDR r2,|L3.120|
00006c 1f12 SUBS r2,r2,#4
00006e 6011 STR r1,[r2,#0]
000070 e000 B |L3.116|
|L3.114|
;;;103 default: break;
000072 bf00 NOP
|L3.116|
000074 bf00 NOP ;97
;;;104 }
;;;105 }
000076 4770 BX lr
;;;106
ENDP
|L3.120|
DCD 0x40011814
|L3.124|
DCD 0x40010c14
;*** Start embedded assembler ***
#line 1 "..\\..\\User\\bsp\\src\\bsp_channel_realy.c"
AREA ||.rev16_text||, CODE
THUMB
EXPORT |__asm___19_bsp_channel_realy_c_4e9aa111____REV16|
#line 114 "..\\..\\Libraries\\CMSIS\\Include\\core_cmInstr.h"
|__asm___19_bsp_channel_realy_c_4e9aa111____REV16| PROC
#line 115
rev16 r0, r0
bx lr
ENDP
AREA ||.revsh_text||, CODE
THUMB
EXPORT |__asm___19_bsp_channel_realy_c_4e9aa111____REVSH|
#line 128
|__asm___19_bsp_channel_realy_c_4e9aa111____REVSH| PROC
#line 129
revsh r0, r0
bx lr
ENDP
;*** End embedded assembler ***

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,565 @@
; generated by Component: ARM Compiler 5.06 update 7 (build 960) Tool: ArmCC [4d365d]
; commandline ArmCC [--list --split_sections --debug -c --asm --interleave -o.\flash\obj\bsp_drv8880.o --asm_dir=.\Flash\List\ --list_dir=.\Flash\List\ --depend=.\flash\obj\bsp_drv8880.d --cpu=Cortex-M3 --apcs=interwork -O0 --diag_suppress=9931,870 -I..\..\Libraries\CMSIS\Device\ST\STM32F10x\Include -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Libraries\STM32_USB-FS-Device_Driver\inc -I..\..\Libraries\CMSIS\Include -I..\..\User\bsp -I..\..\User\bsp\inc -I..\..\User\app\inc -I..\..\User -IC:\Users\w1619\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__MICROLIB -D__UVISION_VERSION=538 -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD --omf_browse=.\flash\obj\bsp_drv8880.crf ..\..\User\bsp\src\bsp_drv8880.c]
THUMB
AREA ||i.bsp_Init_Drv8880_Hard||, CODE, READONLY, ALIGN=2
bsp_Init_Drv8880_Hard PROC
;;;191
;;;192 void bsp_Init_Drv8880_Hard(void)
000000 b508 PUSH {r3,lr}
;;;193 {
;;;194 GPIO_InitTypeDef GPIO_InitStructure;
;;;195
;;;196 RCC_APB2PeriphClockCmd(RCC_ALL_MOTO, ENABLE);
000002 2101 MOVS r1,#1
000004 f44f70ac MOV r0,#0x158
000008 f7fffffe BL RCC_APB2PeriphClockCmd
;;;197
;;;198 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
00000c 2003 MOVS r0,#3
00000e f88d0002 STRB r0,[sp,#2]
;;;199 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
000012 2010 MOVS r0,#0x10
000014 f88d0003 STRB r0,[sp,#3]
;;;200
;;;201 // 配置自动整定引脚为高电平,设置为自动整定模式
;;;202 GPIO_PORT_ATE->BSRR = GPIO_PIN_ATE;
000018 02c0 LSLS r0,r0,#11
00001a 4940 LDR r1,|L1.284|
00001c 6008 STR r0,[r1,#0]
;;;203 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_ATE;
00001e f8ad0000 STRH r0,[sp,#0]
;;;204 GPIO_Init(GPIO_PORT_ATE, &GPIO_InitStructure);
000022 4669 MOV r1,sp
000024 483d LDR r0,|L1.284|
000026 3810 SUBS r0,r0,#0x10
000028 f7fffffe BL GPIO_Init
;;;205
;;;206 // 配置脉冲输入引脚,设置为默认低电平
;;;207 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_STEP;
00002c 2080 MOVS r0,#0x80
00002e f8ad0000 STRH r0,[sp,#0]
;;;208 GPIO_Init(GPIO_PORT_STEP, &GPIO_InitStructure);
000032 4669 MOV r1,sp
000034 483a LDR r0,|L1.288|
000036 f7fffffe BL GPIO_Init
;;;209
;;;210 // 配置方向引脚,设置默认为低电平
;;;211 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_DIR;
00003a f44f6080 MOV r0,#0x400
00003e f8ad0000 STRH r0,[sp,#0]
;;;212 GPIO_Init(GPIO_PORT_DIR, &GPIO_InitStructure);
000042 4669 MOV r1,sp
000044 4835 LDR r0,|L1.284|
000046 3810 SUBS r0,r0,#0x10
000048 f7fffffe BL GPIO_Init
;;;213
;;;214 // 配置使能引脚,设置默认为低电平,不使能
;;;215 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_ENABLE;
00004c f44f6000 MOV r0,#0x800
000050 f8ad0000 STRH r0,[sp,#0]
;;;216 GPIO_Init(GPIO_PORT_ENABLE, &GPIO_InitStructure);
000054 4669 MOV r1,sp
000056 4831 LDR r0,|L1.284|
000058 3810 SUBS r0,r0,#0x10
00005a f7fffffe BL GPIO_Init
;;;217
;;;218 // 配置睡眠引脚,设置默认为低电平,处于睡眠状态
;;;219 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_SLEEP;
00005e f44f6000 MOV r0,#0x800
000062 f8ad0000 STRH r0,[sp,#0]
;;;220 GPIO_Init(GPIO_PORT_SLEEP, &GPIO_InitStructure);
000066 4669 MOV r1,sp
000068 482e LDR r0,|L1.292|
00006a f7fffffe BL GPIO_Init
;;;221
;;;222 // 配置细分引脚,设置默认为低电平,不细分
;;;223 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_M1;
00006e f44f7080 MOV r0,#0x100
000072 f8ad0000 STRH r0,[sp,#0]
;;;224 GPIO_Init(GPIO_PORT_M1, &GPIO_InitStructure);
000076 4669 MOV r1,sp
000078 4828 LDR r0,|L1.284|
00007a 3810 SUBS r0,r0,#0x10
00007c f7fffffe BL GPIO_Init
;;;225 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_M0;
000080 2080 MOVS r0,#0x80
000082 f8ad0000 STRH r0,[sp,#0]
;;;226 GPIO_Init(GPIO_PORT_M0, &GPIO_InitStructure);
000086 4669 MOV r1,sp
000088 4824 LDR r0,|L1.284|
00008a 3810 SUBS r0,r0,#0x10
00008c f7fffffe BL GPIO_Init
;;;227
;;;228 // 配置力矩引脚设置默认为低电平100%力矩
;;;229 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_TRQ1;
000090 2002 MOVS r0,#2
000092 f8ad0000 STRH r0,[sp,#0]
;;;230 GPIO_Init(GPIO_PORT_TRQ1, &GPIO_InitStructure);
000096 4669 MOV r1,sp
000098 4823 LDR r0,|L1.296|
00009a f7fffffe BL GPIO_Init
;;;231 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_TRQ0;
00009e 2001 MOVS r0,#1
0000a0 f8ad0000 STRH r0,[sp,#0]
;;;232 GPIO_Init(GPIO_PORT_TRQ0, &GPIO_InitStructure);
0000a4 4669 MOV r1,sp
0000a6 4820 LDR r0,|L1.296|
0000a8 f7fffffe BL GPIO_Init
;;;233
;;;234 // 设置衰减模式设置默认为低电平为slow decay模式
;;;235 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_DECAY1;
0000ac f44f5000 MOV r0,#0x2000
0000b0 f8ad0000 STRH r0,[sp,#0]
;;;236 GPIO_Init(GPIO_PORT_DECAY1, &GPIO_InitStructure);
0000b4 4669 MOV r1,sp
0000b6 4819 LDR r0,|L1.284|
0000b8 3810 SUBS r0,r0,#0x10
0000ba f7fffffe BL GPIO_Init
;;;237 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_DECAY0;
0000be f44f5080 MOV r0,#0x1000
0000c2 f8ad0000 STRH r0,[sp,#0]
;;;238 GPIO_Init(GPIO_PORT_DECAY0, &GPIO_InitStructure);
0000c6 4669 MOV r1,sp
0000c8 4814 LDR r0,|L1.284|
0000ca 3810 SUBS r0,r0,#0x10
0000cc f7fffffe BL GPIO_Init
;;;239
;;;240 // 设置fixed-off-time设置默认为低电平为20us
;;;241 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_TOFF;
0000d0 f44f6080 MOV r0,#0x400
0000d4 f8ad0000 STRH r0,[sp,#0]
;;;242 GPIO_Init(GPIO_PORT_TOFF, &GPIO_InitStructure);
0000d8 4669 MOV r1,sp
0000da 4812 LDR r0,|L1.292|
0000dc f7fffffe BL GPIO_Init
;;;243
;;;244 // 设置报警输出引脚,设置为输入浮空模式
;;;245 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
0000e0 2004 MOVS r0,#4
0000e2 f88d0003 STRB r0,[sp,#3]
;;;246 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_FAULT;
0000e6 0300 LSLS r0,r0,#12
0000e8 f8ad0000 STRH r0,[sp,#0]
;;;247 GPIO_Init(GPIO_PORT_FAULT, &GPIO_InitStructure);
0000ec 4669 MOV r1,sp
0000ee 480b LDR r0,|L1.284|
0000f0 3810 SUBS r0,r0,#0x10
0000f2 f7fffffe BL GPIO_Init
;;;248
;;;249 // 设置细分
;;;250 bsp_drv8880_microstep_config(STEP_1_16);
0000f6 2005 MOVS r0,#5
0000f8 f7fffffe BL bsp_drv8880_microstep_config
;;;251
;;;252 // 方向设置
;;;253 bsp_drv8880_config_dir(DIR_CCW);
0000fc 2001 MOVS r0,#1
0000fe f7fffffe BL bsp_drv8880_config_dir
;;;254
;;;255 // DA输出步进电机电流设置 0.495V
;;;256
;;;257 // 设置DA输出的电压为0.495V
;;;258 bsp_dev8880_vref_init_hard(1500);
000102 f24050dc MOV r0,#0x5dc
000106 f7fffffe BL bsp_dev8880_vref_init_hard
;;;259
;;;260 // 退出睡眠模式
;;;261 GPIO_PORT_SLEEP->BSRR = GPIO_PIN_SLEEP;
00010a f44f6000 MOV r0,#0x800
00010e 4905 LDR r1,|L1.292|
000110 3110 ADDS r1,r1,#0x10
000112 6008 STR r0,[r1,#0]
;;;262
;;;263 // 暂时不使能,等待零点所搜命令
;;;264 // bsp_drv8880_enable_config(DISABLE);
;;;265 bsp_drv8880_enable_config(ENABLE);
000114 2001 MOVS r0,#1
000116 f7fffffe BL bsp_drv8880_enable_config
;;;266 }
00011a bd08 POP {r3,pc}
;;;267
ENDP
|L1.284|
DCD 0x40011810
|L1.288|
DCD 0x40011000
|L1.292|
DCD 0x40010c00
|L1.296|
DCD 0x40012000
AREA ||i.bsp_dev8880_vref_init_hard||, CODE, READONLY, ALIGN=2
bsp_dev8880_vref_init_hard PROC
;;;160 // vol:0~3300,代表0~3.3V
;;;161 static void bsp_dev8880_vref_init_hard(uint16_t vol)
000000 e92d47f0 PUSH {r4-r10,lr}
;;;162 {
000004 b086 SUB sp,sp,#0x18
000006 4604 MOV r4,r0
;;;163 float temp = vol;
000008 4620 MOV r0,r4
00000a f7fffffe BL __aeabi_ui2f
00000e 4681 MOV r9,r0
;;;164
;;;165 GPIO_InitTypeDef GPIO_InitStructure;
;;;166 DAC_InitTypeDef DAC_InitType;
;;;167
;;;168 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 使能PORTA通道时钟
000010 2101 MOVS r1,#1
000012 2004 MOVS r0,#4
000014 f7fffffe BL RCC_APB2PeriphClockCmd
;;;169 RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE); // 使能DAC通道时钟
000018 2101 MOVS r1,#1
00001a 0748 LSLS r0,r1,#29
00001c f7fffffe BL RCC_APB1PeriphClockCmd
;;;170
;;;171 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; // 端口配置
000020 2010 MOVS r0,#0x10
000022 f8ad0014 STRH r0,[sp,#0x14]
;;;172 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; // 模拟输入
000026 2000 MOVS r0,#0
000028 f88d0017 STRB r0,[sp,#0x17]
;;;173 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
00002c 2003 MOVS r0,#3
00002e f88d0016 STRB r0,[sp,#0x16]
;;;174 GPIO_Init(GPIOA, &GPIO_InitStructure);
000032 a905 ADD r1,sp,#0x14
000034 481d LDR r0,|L2.172|
000036 f7fffffe BL GPIO_Init
;;;175 GPIO_SetBits(GPIOA, GPIO_Pin_4); // PA.4 输出高
00003a 2110 MOVS r1,#0x10
00003c 481b LDR r0,|L2.172|
00003e f7fffffe BL GPIO_SetBits
;;;176
;;;177 DAC_InitType.DAC_Trigger = DAC_Trigger_None; // 不使用触发功能 TEN1=0
000042 2000 MOVS r0,#0
000044 9001 STR r0,[sp,#4]
;;;178 DAC_InitType.DAC_WaveGeneration = DAC_WaveGeneration_None; // 不使用波形发生
000046 9002 STR r0,[sp,#8]
;;;179 DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0; // 屏蔽、幅值设置
000048 9003 STR r0,[sp,#0xc]
;;;180 DAC_InitType.DAC_OutputBuffer = DAC_OutputBuffer_Disable; // DAC1输出缓存关闭 BOFF1=1
00004a 2002 MOVS r0,#2
00004c 9004 STR r0,[sp,#0x10]
;;;181 DAC_Init(DAC_Channel_1, &DAC_InitType); // 初始化DAC通道1
00004e a901 ADD r1,sp,#4
000050 2000 MOVS r0,#0
000052 f7fffffe BL DAC_Init
;;;182
;;;183 DAC_Cmd(DAC_Channel_1, ENABLE); // 使能DAC1
000056 2101 MOVS r1,#1
000058 2000 MOVS r0,#0
00005a f7fffffe BL DAC_Cmd
;;;184
;;;185 DAC_SetChannel1Data(DAC_Align_12b_R, 0); // 12位右对齐数据格式设置DAC值
00005e 2100 MOVS r1,#0
000060 4608 MOV r0,r1
000062 f7fffffe BL DAC_SetChannel1Data
;;;186
;;;187 temp /= 1000;
000066 4912 LDR r1,|L2.176|
000068 4648 MOV r0,r9
00006a f7fffffe BL __aeabi_fdiv
00006e 4681 MOV r9,r0
;;;188 temp = temp * 4096 / 3.3;
000070 f04f418b MOV r1,#0x45800000
000074 4648 MOV r0,r9
000076 f7fffffe BL __aeabi_fmul
00007a 4682 MOV r10,r0
00007c f7fffffe BL __aeabi_f2d
000080 4607 MOV r7,r0
000082 f04f3266 MOV r2,#0x66666666
000086 4b0b LDR r3,|L2.180|
000088 f7fffffe BL __aeabi_ddiv
00008c 4605 MOV r5,r0
00008e f7fffffe BL __aeabi_d2f
000092 4681 MOV r9,r0
;;;189 DAC_SetChannel1Data(DAC_Align_12b_R, temp); // 12位右对齐数据格式设置DAC值
000094 4648 MOV r0,r9
000096 f7fffffe BL __aeabi_f2uiz
00009a b285 UXTH r5,r0
00009c 4629 MOV r1,r5
00009e 2000 MOVS r0,#0
0000a0 f7fffffe BL DAC_SetChannel1Data
;;;190 }
0000a4 b006 ADD sp,sp,#0x18
0000a6 e8bd87f0 POP {r4-r10,pc}
;;;191
ENDP
0000aa 0000 DCW 0x0000
|L2.172|
DCD 0x40010800
|L2.176|
DCD 0x447a0000
|L2.180|
DCD 0x400a6666
AREA ||i.bsp_drv8880_config_dir||, CODE, READONLY, ALIGN=2
bsp_drv8880_config_dir PROC
;;;131 }
;;;132 void bsp_drv8880_config_dir(DIR_E dir)
000000 b110 CBZ r0,|L3.8|
;;;133 {
;;;134 switch (dir)
000002 2801 CMP r0,#1
000004 d111 BNE |L3.42|
000006 e007 B |L3.24|
|L3.8|
;;;135 {
;;;136 case DIR_CW:
;;;137 DRV8880_CW;
000008 f44f6180 MOV r1,#0x400
00000c 4a08 LDR r2,|L3.48|
00000e 6011 STR r1,[r2,#0]
;;;138 g_tTube.dir = DIR_CW;
000010 2100 MOVS r1,#0
000012 4a08 LDR r2,|L3.52|
000014 7311 STRB r1,[r2,#0xc]
;;;139 break;
000016 e009 B |L3.44|
|L3.24|
;;;140 case DIR_CCW:
;;;141 DRV8880_CCW;
000018 f44f6180 MOV r1,#0x400
00001c 4a04 LDR r2,|L3.48|
00001e 1f12 SUBS r2,r2,#4
000020 6011 STR r1,[r2,#0]
;;;142 g_tTube.dir = DIR_CCW;
000022 2101 MOVS r1,#1
000024 4a03 LDR r2,|L3.52|
000026 7311 STRB r1,[r2,#0xc]
;;;143 break;
000028 e000 B |L3.44|
|L3.42|
;;;144 default:
;;;145 break;
00002a bf00 NOP
|L3.44|
00002c bf00 NOP ;139
;;;146 }
;;;147 }
00002e 4770 BX lr
;;;148 void bsp_drv8880_enable_config(FunctionalState en)
ENDP
|L3.48|
DCD 0x40011814
|L3.52|
DCD g_tTube
AREA ||i.bsp_drv8880_enable_config||, CODE, READONLY, ALIGN=2
bsp_drv8880_enable_config PROC
;;;147 }
;;;148 void bsp_drv8880_enable_config(FunctionalState en)
000000 b920 CBNZ r0,|L4.12|
;;;149 {
;;;150 if (en == DISABLE)
;;;151 {
;;;152 DRV8880_DISABLE;
000002 f44f6100 MOV r1,#0x800
000006 4a04 LDR r2,|L4.24|
000008 6011 STR r1,[r2,#0]
00000a e004 B |L4.22|
|L4.12|
;;;153 }
;;;154 else
;;;155 {
;;;156 DRV8880_ENABLE;
00000c f44f6100 MOV r1,#0x800
000010 4a01 LDR r2,|L4.24|
000012 1f12 SUBS r2,r2,#4
000014 6011 STR r1,[r2,#0]
|L4.22|
;;;157 }
;;;158 }
000016 4770 BX lr
;;;159
ENDP
|L4.24|
DCD 0x40011814
AREA ||i.bsp_drv8880_microstep_config||, CODE, READONLY, ALIGN=2
bsp_drv8880_microstep_config PROC
;;;95
;;;96 void bsp_drv8880_microstep_config(MICRO_STEPPING_E step)
000000 2806 CMP r0,#6
;;;97 {
;;;98 switch (step)
000002 d26f BCS |L5.228|
000004 e8dff000 TBB [pc,r0]
000008 0315283b DCB 0x03,0x15,0x28,0x3b
00000c 4d5d DCB 0x4d,0x5d
;;;99 {
;;;100 case STEP_FULL: // M1M0: 00
;;;101 M0_SET_AS_OUTPUT();
00000e 4937 LDR r1,|L5.236|
000010 6809 LDR r1,[r1,#0]
000012 f0214170 BIC r1,r1,#0xf0000000
000016 4a35 LDR r2,|L5.236|
000018 6011 STR r1,[r2,#0]
00001a 4611 MOV r1,r2
00001c 6809 LDR r1,[r1,#0]
00001e f0415140 ORR r1,r1,#0x30000000
000022 6011 STR r1,[r2,#0]
;;;102 M1_DISABLE;
000024 1591 ASRS r1,r2,#22
000026 4a31 LDR r2,|L5.236|
000028 3214 ADDS r2,r2,#0x14
00002a 6011 STR r1,[r2,#0]
;;;103 M0_DISABLE;
00002c 2180 MOVS r1,#0x80
00002e 6011 STR r1,[r2,#0]
;;;104 break;
000030 e059 B |L5.230|
;;;105 case STEP_1_2_NC: // M1M0: 01
;;;106 M0_SET_AS_OUTPUT();
000032 492e LDR r1,|L5.236|
000034 6809 LDR r1,[r1,#0]
000036 f0214170 BIC r1,r1,#0xf0000000
00003a 4a2c LDR r2,|L5.236|
00003c 6011 STR r1,[r2,#0]
00003e 4611 MOV r1,r2
000040 6809 LDR r1,[r1,#0]
000042 f0415140 ORR r1,r1,#0x30000000
000046 6011 STR r1,[r2,#0]
;;;107 M1_DISABLE;
000048 1591 ASRS r1,r2,#22
00004a 4a28 LDR r2,|L5.236|
00004c 3214 ADDS r2,r2,#0x14
00004e 6011 STR r1,[r2,#0]
;;;108 M0_ENABLE;
000050 2180 MOVS r1,#0x80
000052 1f12 SUBS r2,r2,#4
000054 6011 STR r1,[r2,#0]
;;;109 break;
000056 e046 B |L5.230|
;;;110 case STEP_1_2: // M1M0: 10
;;;111 M0_SET_AS_OUTPUT();
000058 4924 LDR r1,|L5.236|
00005a 6809 LDR r1,[r1,#0]
00005c f0214170 BIC r1,r1,#0xf0000000
000060 4a22 LDR r2,|L5.236|
000062 6011 STR r1,[r2,#0]
000064 4611 MOV r1,r2
000066 6809 LDR r1,[r1,#0]
000068 f0415140 ORR r1,r1,#0x30000000
00006c 6011 STR r1,[r2,#0]
;;;112 M1_ENABLE;
00006e 1591 ASRS r1,r2,#22
000070 4a1e LDR r2,|L5.236|
000072 3210 ADDS r2,r2,#0x10
000074 6011 STR r1,[r2,#0]
;;;113 M0_DISABLE;
000076 2180 MOVS r1,#0x80
000078 1d12 ADDS r2,r2,#4
00007a 6011 STR r1,[r2,#0]
;;;114 break;
00007c e033 B |L5.230|
;;;115 case STEP_1_4: // M1M0: 11
;;;116 M0_SET_AS_OUTPUT();
00007e 491b LDR r1,|L5.236|
000080 6809 LDR r1,[r1,#0]
000082 f0214170 BIC r1,r1,#0xf0000000
000086 4a19 LDR r2,|L5.236|
000088 6011 STR r1,[r2,#0]
00008a 4611 MOV r1,r2
00008c 6809 LDR r1,[r1,#0]
00008e f0415140 ORR r1,r1,#0x30000000
000092 6011 STR r1,[r2,#0]
;;;117 M1_ENABLE;
000094 1591 ASRS r1,r2,#22
000096 4a15 LDR r2,|L5.236|
000098 3210 ADDS r2,r2,#0x10
00009a 6011 STR r1,[r2,#0]
;;;118 M0_ENABLE;
00009c 2180 MOVS r1,#0x80
00009e 6011 STR r1,[r2,#0]
;;;119 break;
0000a0 e021 B |L5.230|
;;;120 case STEP_1_8: // M1M0: 0Z
;;;121 M0_SET_AS_INPUT();
0000a2 4912 LDR r1,|L5.236|
0000a4 6809 LDR r1,[r1,#0]
0000a6 f0214170 BIC r1,r1,#0xf0000000
0000aa 4a10 LDR r2,|L5.236|
0000ac 6011 STR r1,[r2,#0]
0000ae 4611 MOV r1,r2
0000b0 6809 LDR r1,[r1,#0]
0000b2 f0414180 ORR r1,r1,#0x40000000
0000b6 6011 STR r1,[r2,#0]
;;;122 M1_DISABLE;
0000b8 1591 ASRS r1,r2,#22
0000ba 4a0c LDR r2,|L5.236|
0000bc 3214 ADDS r2,r2,#0x14
0000be 6011 STR r1,[r2,#0]
;;;123 break;
0000c0 e011 B |L5.230|
;;;124 case STEP_1_16: // M1M0: 1Z
;;;125 M0_SET_AS_INPUT();
0000c2 490a LDR r1,|L5.236|
0000c4 6809 LDR r1,[r1,#0]
0000c6 f0214170 BIC r1,r1,#0xf0000000
0000ca 4a08 LDR r2,|L5.236|
0000cc 6011 STR r1,[r2,#0]
0000ce 4611 MOV r1,r2
0000d0 6809 LDR r1,[r1,#0]
0000d2 f0414180 ORR r1,r1,#0x40000000
0000d6 6011 STR r1,[r2,#0]
;;;126 M1_ENABLE;
0000d8 1591 ASRS r1,r2,#22
0000da 4a04 LDR r2,|L5.236|
0000dc 3210 ADDS r2,r2,#0x10
0000de 6011 STR r1,[r2,#0]
;;;127 break;
0000e0 e001 B |L5.230|
0000e2 e7ff B |L5.228|
|L5.228|
;;;128 default:
;;;129 break;
0000e4 bf00 NOP
|L5.230|
0000e6 bf00 NOP ;104
;;;130 }
;;;131 }
0000e8 4770 BX lr
;;;132 void bsp_drv8880_config_dir(DIR_E dir)
ENDP
0000ea 0000 DCW 0x0000
|L5.236|
DCD 0x40011800
;*** Start embedded assembler ***
#line 1 "..\\..\\User\\bsp\\src\\bsp_drv8880.c"
AREA ||.rev16_text||, CODE
THUMB
EXPORT |__asm___13_bsp_drv8880_c_b3f300ed____REV16|
#line 114 "..\\..\\Libraries\\CMSIS\\Include\\core_cmInstr.h"
|__asm___13_bsp_drv8880_c_b3f300ed____REV16| PROC
#line 115
rev16 r0, r0
bx lr
ENDP
AREA ||.revsh_text||, CODE
THUMB
EXPORT |__asm___13_bsp_drv8880_c_b3f300ed____REVSH|
#line 128
|__asm___13_bsp_drv8880_c_b3f300ed____REVSH| PROC
#line 129
revsh r0, r0
bx lr
ENDP
;*** End embedded assembler ***

View File

@@ -0,0 +1,367 @@
; generated by Component: ARM Compiler 5.06 update 7 (build 960) Tool: ArmCC [4d365d]
; commandline ArmCC [--list --split_sections --debug -c --asm --interleave -o.\flash\obj\bsp_eeprom_24xx.o --asm_dir=.\Flash\List\ --list_dir=.\Flash\List\ --depend=.\flash\obj\bsp_eeprom_24xx.d --cpu=Cortex-M3 --apcs=interwork -O0 --diag_suppress=9931,870 -I..\..\Libraries\CMSIS\Device\ST\STM32F10x\Include -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Libraries\STM32_USB-FS-Device_Driver\inc -I..\..\Libraries\CMSIS\Include -I..\..\User\bsp -I..\..\User\bsp\inc -I..\..\User\app\inc -I..\..\User -IC:\Users\w1619\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__MICROLIB -D__UVISION_VERSION=538 -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD --omf_browse=.\flash\obj\bsp_eeprom_24xx.crf ..\..\User\bsp\src\bsp_eeprom_24xx.c]
THUMB
AREA ||i.ee_CheckOk||, CODE, READONLY, ALIGN=1
ee_CheckOk PROC
;;;32 */
;;;33 uint8_t ee_CheckOk(void)
000000 b510 PUSH {r4,lr}
;;;34 {
;;;35 if (i2c_CheckDevice(EE_DEV_ADDR) == 0)
000002 20a0 MOVS r0,#0xa0
000004 f7fffffe BL i2c_CheckDevice
000008 b908 CBNZ r0,|L1.14|
;;;36 {
;;;37 return 1;
00000a 2001 MOVS r0,#1
|L1.12|
;;;38 }
;;;39 else
;;;40 {
;;;41 /* 失败后切记发送I2C总线停止信号 */
;;;42 i2c_Stop();
;;;43 return 0;
;;;44 }
;;;45 }
00000c bd10 POP {r4,pc}
|L1.14|
00000e f7fffffe BL i2c_Stop
000012 2000 MOVS r0,#0 ;43
000014 e7fa B |L1.12|
;;;46
ENDP
AREA ||i.ee_ReadBytes||, CODE, READONLY, ALIGN=1
ee_ReadBytes PROC
;;;56 */
;;;57 uint8_t ee_ReadBytes(uint8_t *_pReadBuf, uint16_t _usAddress, uint16_t _usSize)
000000 e92d41f0 PUSH {r4-r8,lr}
;;;58 {
000004 4607 MOV r7,r0
000006 460d MOV r5,r1
000008 4616 MOV r6,r2
;;;59 uint16_t i;
;;;60
;;;61 /* 采用串行EEPROM随即读取指令序列连续读取若干字节 */
;;;62
;;;63 /* 第1步发起I2C总线启动信号 */
;;;64 i2c_Start();
00000a f7fffffe BL i2c_Start
;;;65
;;;66 /* 第2步发起控制字节高7bit是地址bit0是读写控制位0表示写1表示读 */
;;;67 i2c_SendByte(EE_DEV_ADDR | I2C_WR); /* 此处是写指令 */
00000e 20a0 MOVS r0,#0xa0
000010 f7fffffe BL i2c_SendByte
;;;68
;;;69 /* 第3步发送ACK */
;;;70 if (i2c_WaitAck() != 0)
000014 f7fffffe BL i2c_WaitAck
000018 b100 CBZ r0,|L2.28|
;;;71 {
;;;72 goto cmd_fail; /* EEPROM器件无应答 */
00001a e02c B |L2.118|
|L2.28|
;;;73 }
;;;74
;;;75 /* 第4步发送字节地址24C02只有256字节因此1个字节就够了如果是24C04以上那么此处需要连发多个地址 */
;;;76 if (EE_ADDR_BYTES == 1)
;;;77 {
;;;78 i2c_SendByte((uint8_t)_usAddress);
;;;79 if (i2c_WaitAck() != 0)
;;;80 {
;;;81 goto cmd_fail; /* EEPROM器件无应答 */
;;;82 }
;;;83 }
;;;84 else
;;;85 {
;;;86 i2c_SendByte(_usAddress >> 8);
00001c 1228 ASRS r0,r5,#8
00001e f7fffffe BL i2c_SendByte
;;;87 if (i2c_WaitAck() != 0)
000022 f7fffffe BL i2c_WaitAck
000026 b100 CBZ r0,|L2.42|
;;;88 {
;;;89 goto cmd_fail; /* EEPROM器件无应答 */
000028 e025 B |L2.118|
|L2.42|
;;;90 }
;;;91
;;;92 i2c_SendByte(_usAddress);
00002a b2e8 UXTB r0,r5
00002c f7fffffe BL i2c_SendByte
;;;93 if (i2c_WaitAck() != 0)
000030 f7fffffe BL i2c_WaitAck
000034 b100 CBZ r0,|L2.56|
;;;94 {
;;;95 goto cmd_fail; /* EEPROM器件无应答 */
000036 e01e B |L2.118|
|L2.56|
;;;96 }
;;;97 }
;;;98
;;;99 /* 第6步重新启动I2C总线。下面开始读取数据 */
;;;100 i2c_Start();
000038 f7fffffe BL i2c_Start
;;;101
;;;102 /* 第7步发起控制字节高7bit是地址bit0是读写控制位0表示写1表示读 */
;;;103 i2c_SendByte(EE_DEV_ADDR | I2C_RD); /* 此处是读指令 */
00003c 20a1 MOVS r0,#0xa1
00003e f7fffffe BL i2c_SendByte
;;;104
;;;105 /* 第8步发送ACK */
;;;106 if (i2c_WaitAck() != 0)
000042 f7fffffe BL i2c_WaitAck
000046 b100 CBZ r0,|L2.74|
;;;107 {
;;;108 goto cmd_fail; /* EEPROM器件无应答 */
000048 e015 B |L2.118|
|L2.74|
;;;109 }
;;;110
;;;111 /* 第9步循环读取数据 */
;;;112 for (i = 0; i < _usSize; i++)
00004a 2400 MOVS r4,#0
00004c e00c B |L2.104|
|L2.78|
;;;113 {
;;;114 _pReadBuf[i] = i2c_ReadByte(); /* 读1个字节 */
00004e f7fffffe BL i2c_ReadByte
000052 5538 STRB r0,[r7,r4]
;;;115
;;;116 /* 每读完1个字节后需要发送Ack 最后一个字节不需要Ack发Nack */
;;;117 if (i != _usSize - 1)
000054 1e70 SUBS r0,r6,#1
000056 42a0 CMP r0,r4
000058 d002 BEQ |L2.96|
;;;118 {
;;;119 i2c_Ack(); /* 中间字节读完后CPU产生ACK信号(驱动SDA = 0) */
00005a f7fffffe BL i2c_Ack
00005e e001 B |L2.100|
|L2.96|
;;;120 }
;;;121 else
;;;122 {
;;;123 i2c_NAck(); /* 最后1个字节读完后CPU产生NACK信号(驱动SDA = 1) */
000060 f7fffffe BL i2c_NAck
|L2.100|
000064 1c60 ADDS r0,r4,#1 ;112
000066 b284 UXTH r4,r0 ;112
|L2.104|
000068 42b4 CMP r4,r6 ;112
00006a dbf0 BLT |L2.78|
;;;124 }
;;;125 }
;;;126 /* 发送I2C总线停止信号 */
;;;127 i2c_Stop();
00006c f7fffffe BL i2c_Stop
;;;128 return 1; /* 执行成功 */
000070 2001 MOVS r0,#1
|L2.114|
;;;129
;;;130 cmd_fail: /* 命令执行失败后切记发送停止信号避免影响I2C总线上其他设备 */
;;;131 /* 发送I2C总线停止信号 */
;;;132 i2c_Stop();
;;;133 return 0;
;;;134 }
000072 e8bd81f0 POP {r4-r8,pc}
|L2.118|
000076 f7fffffe BL i2c_Stop
00007a 2000 MOVS r0,#0 ;133
00007c e7f9 B |L2.114|
;;;135
ENDP
AREA ||i.ee_WriteBytes||, CODE, READONLY, ALIGN=1
ee_WriteBytes PROC
;;;145 */
;;;146 uint8_t ee_WriteBytes(uint8_t *_pWriteBuf, uint16_t _usAddress, uint16_t _usSize)
000000 e92d47f0 PUSH {r4-r10,lr}
;;;147 {
000004 4607 MOV r7,r0
000006 4688 MOV r8,r1
000008 4691 MOV r9,r2
;;;148 uint16_t i, m;
;;;149 uint16_t usAddr;
;;;150
;;;151 /*
;;;152 写串行EEPROM不像读操作可以连续读取很多字节每次写操作只能在同一个page。
;;;153 对于24xx02page size = 8
;;;154 简单的处理方法为按字节写操作模式每写1个字节都发送地址
;;;155 为了提高连续写的效率: 本函数采用page wirte操作。
;;;156 */
;;;157
;;;158 usAddr = _usAddress;
00000a 4645 MOV r5,r8
;;;159 for (i = 0; i < _usSize; i++)
00000c 2400 MOVS r4,#0
00000e e033 B |L3.120|
|L3.16|
;;;160 {
;;;161 /* 当发送第1个字节或是页面首地址时需要重新发起启动信号和地址 */
;;;162 if ((i == 0) || (usAddr & (EE_PAGE_SIZE - 1)) == 0)
000010 b114 CBZ r4,|L3.24|
000012 f005003f AND r0,r5,#0x3f
000016 bb20 CBNZ r0,|L3.98|
|L3.24|
;;;163 {
;;;164 /* 第0步:发停止信号,启动内部写操作 */
;;;165 i2c_Stop();
000018 f7fffffe BL i2c_Stop
;;;166
;;;167 /* 通过检查器件应答的方式,判断内部写操作是否完成, 一般小于 10ms
;;;168 CLK频率为200KHz时查询次数为30次左右
;;;169 */
;;;170 for (m = 0; m < 1000; m++)
00001c 2600 MOVS r6,#0
00001e e00a B |L3.54|
|L3.32|
;;;171 {
;;;172 /* 第1步发起I2C总线启动信号 */
;;;173 i2c_Start();
000020 f7fffffe BL i2c_Start
;;;174
;;;175 /* 第2步发起控制字节高7bit是地址bit0是读写控制位0表示写1表示读 */
;;;176 i2c_SendByte(EE_DEV_ADDR | I2C_WR); /* 此处是写指令 */
000024 20a0 MOVS r0,#0xa0
000026 f7fffffe BL i2c_SendByte
;;;177
;;;178 /* 第3步发送一个时钟判断器件是否正确应答 */
;;;179 if (i2c_WaitAck() == 0)
00002a f7fffffe BL i2c_WaitAck
00002e b900 CBNZ r0,|L3.50|
;;;180 {
;;;181 break;
000030 e004 B |L3.60|
|L3.50|
000032 1c70 ADDS r0,r6,#1 ;170
000034 b286 UXTH r6,r0 ;170
|L3.54|
000036 f5b67f7a CMP r6,#0x3e8 ;170
00003a dbf1 BLT |L3.32|
|L3.60|
00003c bf00 NOP
;;;182 }
;;;183 }
;;;184 if (m == 1000)
00003e f5b67f7a CMP r6,#0x3e8
000042 d100 BNE |L3.70|
;;;185 {
;;;186 goto cmd_fail; /* EEPROM器件写超时 */
000044 e01f B |L3.134|
|L3.70|
;;;187 }
;;;188
;;;189 /* 第4步发送字节地址24C02只有256字节因此1个字节就够了如果是24C04以上那么此处需要连发多个地址 */
;;;190 if (EE_ADDR_BYTES == 1)
;;;191 {
;;;192 i2c_SendByte((uint8_t)usAddr);
;;;193 if (i2c_WaitAck() != 0)
;;;194 {
;;;195 goto cmd_fail; /* EEPROM器件无应答 */
;;;196 }
;;;197 }
;;;198 else
;;;199 {
;;;200 i2c_SendByte(usAddr >> 8);
000046 1228 ASRS r0,r5,#8
000048 f7fffffe BL i2c_SendByte
;;;201 if (i2c_WaitAck() != 0)
00004c f7fffffe BL i2c_WaitAck
000050 b100 CBZ r0,|L3.84|
;;;202 {
;;;203 goto cmd_fail; /* EEPROM器件无应答 */
000052 e018 B |L3.134|
|L3.84|
;;;204 }
;;;205
;;;206 i2c_SendByte(usAddr);
000054 b2e8 UXTB r0,r5
000056 f7fffffe BL i2c_SendByte
;;;207 if (i2c_WaitAck() != 0)
00005a f7fffffe BL i2c_WaitAck
00005e b100 CBZ r0,|L3.98|
;;;208 {
;;;209 goto cmd_fail; /* EEPROM器件无应答 */
000060 e011 B |L3.134|
|L3.98|
;;;210 }
;;;211 }
;;;212 }
;;;213
;;;214 /* 第6步开始写入数据 */
;;;215 i2c_SendByte(_pWriteBuf[i]);
000062 5d38 LDRB r0,[r7,r4]
000064 f7fffffe BL i2c_SendByte
;;;216
;;;217 /* 第7步发送ACK */
;;;218 if (i2c_WaitAck() != 0)
000068 f7fffffe BL i2c_WaitAck
00006c b100 CBZ r0,|L3.112|
;;;219 {
;;;220 goto cmd_fail; /* EEPROM器件无应答 */
00006e e00a B |L3.134|
|L3.112|
;;;221 }
;;;222
;;;223 usAddr++; /* 地址增1 */
000070 1c68 ADDS r0,r5,#1
000072 b285 UXTH r5,r0
000074 1c60 ADDS r0,r4,#1 ;159
000076 b284 UXTH r4,r0 ;159
|L3.120|
000078 454c CMP r4,r9 ;159
00007a dbc9 BLT |L3.16|
;;;224 }
;;;225
;;;226 /* 命令执行成功发送I2C总线停止信号 */
;;;227 i2c_Stop();
00007c f7fffffe BL i2c_Stop
;;;228 return 1;
000080 2001 MOVS r0,#1
|L3.130|
;;;229
;;;230 cmd_fail: /* 命令执行失败后切记发送停止信号避免影响I2C总线上其他设备 */
;;;231 /* 发送I2C总线停止信号 */
;;;232 i2c_Stop();
;;;233 return 0;
;;;234 }
000082 e8bd87f0 POP {r4-r10,pc}
|L3.134|
000086 f7fffffe BL i2c_Stop
00008a 2000 MOVS r0,#0 ;233
00008c e7f9 B |L3.130|
;;;235
ENDP
;*** Start embedded assembler ***
#line 1 "..\\..\\User\\bsp\\src\\bsp_eeprom_24xx.c"
AREA ||.rev16_text||, CODE
THUMB
EXPORT |__asm___17_bsp_eeprom_24xx_c_4eb00f1b____REV16|
#line 114 "..\\..\\Libraries\\CMSIS\\Include\\core_cmInstr.h"
|__asm___17_bsp_eeprom_24xx_c_4eb00f1b____REV16| PROC
#line 115
rev16 r0, r0
bx lr
ENDP
AREA ||.revsh_text||, CODE
THUMB
EXPORT |__asm___17_bsp_eeprom_24xx_c_4eb00f1b____REVSH|
#line 128
|__asm___17_bsp_eeprom_24xx_c_4eb00f1b____REVSH| PROC
#line 129
revsh r0, r0
bx lr
ENDP
;*** End embedded assembler ***

View File

@@ -0,0 +1,158 @@
; generated by Component: ARM Compiler 5.05 update 1 (build 106) Tool: ArmCC [4d0efa]
; commandline ArmCC [--list --split_sections --debug -c --asm --interleave -o.\flash\obj\bsp_fpga_power.o --asm_dir=.\Flash\List\ --list_dir=.\Flash\List\ --depend=.\flash\obj\bsp_fpga_power.d --cpu=Cortex-M3 --apcs=interwork -O0 --diag_suppress=9931,870 -I..\..\Libraries\CMSIS\Device\ST\STM32F10x\Include -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Libraries\STM32_USB-FS-Device_Driver\inc -I..\..\Libraries\CMSIS\Include -I..\..\User\bsp -I..\..\User\bsp\inc -I..\..\User\app\inc -IC:\Keil_v5\ARM\RV31\INC -IC:\Keil_v5\ARM\CMSIS\Include -IC:\Keil_v5\ARM\Inc\ST\STM32F10x -D__MICROLIB -D__UVISION_VERSION=514 -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD --omf_browse=.\flash\obj\bsp_fpga_power.crf ..\..\User\bsp\src\bsp_fpga_power.c]
THUMB
AREA ||i.bsp_FpgaPowerCmd||, CODE, READONLY, ALIGN=2
bsp_FpgaPowerCmd PROC
;;;53 //------------------------------------------------------------------------------
;;;54 void bsp_FpgaPowerCmd(FunctionalState _NewState)
000000 2801 CMP r0,#1
;;;55 {
;;;56 if(_NewState==ENABLE)
000002 d103 BNE |L1.12|
;;;57 {
;;;58 GPIO_PORT_PWR->BSRR = GPIO_PIN_PWR;
000004 0381 LSLS r1,r0,#14
000006 4a05 LDR r2,|L1.28|
000008 6011 STR r1,[r2,#0]
00000a e005 B |L1.24|
|L1.12|
;;;59 }
;;;60 else if(_NewState==DISABLE)
00000c b920 CBNZ r0,|L1.24|
;;;61 {
;;;62 GPIO_PORT_PWR->BRR = GPIO_PIN_PWR;
00000e f44f4180 MOV r1,#0x4000
000012 4a02 LDR r2,|L1.28|
000014 1d12 ADDS r2,r2,#4
000016 6011 STR r1,[r2,#0]
|L1.24|
;;;63 }
;;;64 }
000018 4770 BX lr
;;;65
ENDP
00001a 0000 DCW 0x0000
|L1.28|
DCD 0x40011810
AREA ||i.bsp_FpgaPowerMainLoop||, CODE, READONLY, ALIGN=2
bsp_FpgaPowerMainLoop PROC
;;;71 //------------------------------------------------------------------------------
;;;72 void bsp_FpgaPowerMainLoop(uint16_t _delay_n_10ms)
000000 b500 PUSH {lr}
;;;73 {
000002 4603 MOV r3,r0
;;;74 static uint16_t cnt=0;
;;;75 if(!s_gucStartOk)
000004 4809 LDR r0,|L2.44|
000006 7800 LDRB r0,[r0,#0] ; s_gucStartOk
000008 b970 CBNZ r0,|L2.40|
;;;76 {
;;;77 if(++cnt>=_delay_n_10ms)
00000a 4809 LDR r0,|L2.48|
00000c 8800 LDRH r0,[r0,#0] ; cnt
00000e 1c40 ADDS r0,r0,#1
000010 b280 UXTH r0,r0
000012 4907 LDR r1,|L2.48|
000014 8008 STRH r0,[r1,#0]
000016 4298 CMP r0,r3
000018 db06 BLT |L2.40|
;;;78 {
;;;79 cnt = 0;
00001a 2000 MOVS r0,#0
00001c 8008 STRH r0,[r1,#0]
;;;80 s_gucStartOk = 1;
00001e 2001 MOVS r0,#1
000020 4902 LDR r1,|L2.44|
000022 7008 STRB r0,[r1,#0]
;;;81 bsp_FpgaPowerCmd(ENABLE);
000024 f7fffffe BL bsp_FpgaPowerCmd
|L2.40|
;;;82 }
;;;83 }
;;;84 }
000028 bd00 POP {pc}
;;;85
ENDP
00002a 0000 DCW 0x0000
|L2.44|
DCD s_gucStartOk
|L2.48|
DCD ||cnt||
AREA ||i.bsp_InitFpgaPower||, CODE, READONLY, ALIGN=2
bsp_InitFpgaPower PROC
;;;32 //------------------------------------------------------------------------------
;;;33 void bsp_InitFpgaPower(void)
000000 b508 PUSH {r3,lr}
;;;34 {
;;;35
;;;36 GPIO_InitTypeDef GPIO_InitStructure;
;;;37
;;;38 // ´ò¿ªGPIOʱÖÓ
;;;39 RCC_APB2PeriphClockCmd(RCC_ALL_FPGA_POWER, ENABLE);
000002 2101 MOVS r1,#1
000004 2040 MOVS r0,#0x40
000006 f7fffffe BL RCC_APB2PeriphClockCmd
;;;40
;;;41 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
00000a 2003 MOVS r0,#3
00000c f88d0002 STRB r0,[sp,#2]
;;;42 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // ÍÆÍìÊä³öģʽ
000010 2010 MOVS r0,#0x10
000012 f88d0003 STRB r0,[sp,#3]
;;;43
;;;44 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_PWR;
000016 0280 LSLS r0,r0,#10
000018 f8ad0000 STRH r0,[sp,#0]
;;;45 GPIO_Init(GPIO_PORT_PWR, &GPIO_InitStructure);
00001c 4669 MOV r1,sp
00001e 4802 LDR r0,|L3.40|
000020 f7fffffe BL GPIO_Init
;;;46 }
000024 bd08 POP {r3,pc}
;;;47
ENDP
000026 0000 DCW 0x0000
|L3.40|
DCD 0x40011800
AREA ||.data||, DATA, ALIGN=1
s_gucStartOk
000000 0000 DCB 0x00,0x00
||cnt||
000002 0000 DCW 0x0000
;*** Start embedded assembler ***
#line 1 "..\\..\\User\\bsp\\src\\bsp_fpga_power.c"
AREA ||.rev16_text||, CODE
THUMB
EXPORT |__asm___16_bsp_fpga_power_c_e013a162____REV16|
#line 114 "..\\..\\Libraries\\CMSIS\\Include\\core_cmInstr.h"
|__asm___16_bsp_fpga_power_c_e013a162____REV16| PROC
#line 115
rev16 r0, r0
bx lr
ENDP
AREA ||.revsh_text||, CODE
THUMB
EXPORT |__asm___16_bsp_fpga_power_c_e013a162____REVSH|
#line 128
|__asm___16_bsp_fpga_power_c_e013a162____REVSH| PROC
#line 129
revsh r0, r0
bx lr
ENDP
;*** End embedded assembler ***

View File

@@ -0,0 +1,505 @@
; generated by Component: ARM Compiler 5.06 update 7 (build 960) Tool: ArmCC [4d365d]
; commandline ArmCC [--list --split_sections --debug -c --asm --interleave -o.\flash\obj\bsp_i2c_gpio.o --asm_dir=.\Flash\List\ --list_dir=.\Flash\List\ --depend=.\flash\obj\bsp_i2c_gpio.d --cpu=Cortex-M3 --apcs=interwork -O0 --diag_suppress=9931,870 -I..\..\Libraries\CMSIS\Device\ST\STM32F10x\Include -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Libraries\STM32_USB-FS-Device_Driver\inc -I..\..\Libraries\CMSIS\Include -I..\..\User\bsp -I..\..\User\bsp\inc -I..\..\User\app\inc -I..\..\User -IC:\Users\w1619\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__MICROLIB -D__UVISION_VERSION=538 -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD --omf_browse=.\flash\obj\bsp_i2c_gpio.crf ..\..\User\bsp\src\bsp_i2c_gpio.c]
THUMB
AREA ||i.bsp_InitI2C||, CODE, READONLY, ALIGN=2
bsp_InitI2C PROC
;;;61 */
;;;62 void bsp_InitI2C(void)
000000 b508 PUSH {r3,lr}
;;;63 {
;;;64 GPIO_InitTypeDef GPIO_InitStructure;
;;;65
;;;66 RCC_APB2PeriphClockCmd(RCC_I2C_PORT, ENABLE); /* 打开GPIO时钟 */
000002 2101 MOVS r1,#1
000004 2008 MOVS r0,#8
000006 f7fffffe BL RCC_APB2PeriphClockCmd
;;;67
;;;68 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
00000a 2003 MOVS r0,#3
00000c f88d0002 STRB r0,[sp,#2]
;;;69 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; /* 开漏输出模式 */
000010 2014 MOVS r0,#0x14
000012 f88d0003 STRB r0,[sp,#3]
;;;70
;;;71 GPIO_InitStructure.GPIO_Pin = PIN_I2C_SCL;
000016 2040 MOVS r0,#0x40
000018 f8ad0000 STRH r0,[sp,#0]
;;;72 GPIO_Init(PORT_I2C_SCL, &GPIO_InitStructure);
00001c 4669 MOV r1,sp
00001e 4806 LDR r0,|L1.56|
000020 f7fffffe BL GPIO_Init
;;;73
;;;74 GPIO_InitStructure.GPIO_Pin = PIN_I2C_SDA;
000024 2080 MOVS r0,#0x80
000026 f8ad0000 STRH r0,[sp,#0]
;;;75 GPIO_Init(PORT_I2C_SDA, &GPIO_InitStructure);
00002a 4669 MOV r1,sp
00002c 4802 LDR r0,|L1.56|
00002e f7fffffe BL GPIO_Init
;;;76
;;;77 /* 给一个停止信号, 复位I2C总线上的所有设备到待机模式 */
;;;78 i2c_Stop();
000032 f7fffffe BL i2c_Stop
;;;79 }
000036 bd08 POP {r3,pc}
;;;80
ENDP
|L1.56|
DCD 0x40010c00
AREA ||i.i2c_Ack||, CODE, READONLY, ALIGN=2
i2c_Ack PROC
;;;248 */
;;;249 void i2c_Ack(void)
000000 b510 PUSH {r4,lr}
;;;250 {
;;;251 I2C_SDA_0(); /* CPU驱动SDA = 0 */
000002 2080 MOVS r0,#0x80
000004 4909 LDR r1,|L2.44|
000006 6008 STR r0,[r1,#0]
;;;252 i2c_Delay();
000008 f7fffffe BL i2c_Delay
;;;253 I2C_SCL_1(); /* CPU产生1个时钟 */
00000c 2040 MOVS r0,#0x40
00000e 4907 LDR r1,|L2.44|
000010 1f09 SUBS r1,r1,#4
000012 6008 STR r0,[r1,#0]
;;;254 i2c_Delay();
000014 f7fffffe BL i2c_Delay
;;;255 I2C_SCL_0();
000018 2040 MOVS r0,#0x40
00001a 4904 LDR r1,|L2.44|
00001c 6008 STR r0,[r1,#0]
;;;256 i2c_Delay();
00001e f7fffffe BL i2c_Delay
;;;257 I2C_SDA_1(); /* CPU释放SDA总线 */
000022 2080 MOVS r0,#0x80
000024 4901 LDR r1,|L2.44|
000026 1f09 SUBS r1,r1,#4
000028 6008 STR r0,[r1,#0]
;;;258 }
00002a bd10 POP {r4,pc}
;;;259
ENDP
|L2.44|
DCD 0x40010c14
AREA ||i.i2c_CheckDevice||, CODE, READONLY, ALIGN=2
i2c_CheckDevice PROC
;;;285 */
;;;286 uint8_t i2c_CheckDevice(uint8_t _Address)
000000 b570 PUSH {r4-r6,lr}
;;;287 {
000002 4604 MOV r4,r0
;;;288 uint8_t ucAck;
;;;289
;;;290 if (I2C_SDA_READ() && I2C_SCL_READ())
000004 480b LDR r0,|L3.52|
000006 6800 LDR r0,[r0,#0]
000008 f0000080 AND r0,r0,#0x80
00000c b180 CBZ r0,|L3.48|
00000e 4809 LDR r0,|L3.52|
000010 6800 LDR r0,[r0,#0]
000012 f0000040 AND r0,r0,#0x40
000016 b158 CBZ r0,|L3.48|
;;;291 {
;;;292 i2c_Start(); /* 发送启动信号 */
000018 f7fffffe BL i2c_Start
;;;293
;;;294 /* 发送设备地址+读写控制bit0 = w 1 = r) bit7 先传 */
;;;295 i2c_SendByte(_Address | I2C_WR);
00001c 4620 MOV r0,r4
00001e f7fffffe BL i2c_SendByte
;;;296 ucAck = i2c_WaitAck(); /* 检测设备的ACK应答 */
000022 f7fffffe BL i2c_WaitAck
000026 4605 MOV r5,r0
;;;297
;;;298 i2c_Stop(); /* 发送停止信号 */
000028 f7fffffe BL i2c_Stop
;;;299
;;;300 return ucAck;
00002c 4628 MOV r0,r5
|L3.46|
;;;301 }
;;;302 return 1; /* I2C总线异常 */
;;;303 }
00002e bd70 POP {r4-r6,pc}
|L3.48|
000030 2001 MOVS r0,#1 ;302
000032 e7fc B |L3.46|
;;;304
ENDP
|L3.52|
DCD 0x40010c08
AREA ||i.i2c_Delay||, CODE, READONLY, ALIGN=1
i2c_Delay PROC
;;;88 */
;;;89 static void i2c_Delay(void)
000000 2000 MOVS r0,#0
;;;90 {
;;;91 uint8_t i;
;;;92
;;;93 /* 
;;;94 CPU主频168MHz时在内部Flash运行, MDK工程不优化。用台式示波器观测波形。
;;;95 循环次数为5时SCL频率 = 1.78MHz (读耗时: 92ms, 读写正常,但是用示波器探头碰上就读写失败。时序接近临界)
;;;96 循环次数为10时SCL频率 = 1.1MHz (读耗时: 138ms, 读速度: 118724B/s)
;;;97 循环次数为30时SCL频率 = 440KHz SCL高电平时间1.0usSCL低电平时间1.2us
;;;98
;;;99 上拉电阻选择2.2K欧时SCL上升沿时间约0.5us如果选4.7K欧则上升沿约1us
;;;100
;;;101 实际应用选择400KHz左右的速率即可
;;;102 */
;;;103 for (i = 0; i < 30; i++)
000002 e001 B |L4.8|
|L4.4|
000004 1c41 ADDS r1,r0,#1
000006 b2c8 UXTB r0,r1
|L4.8|
000008 281e CMP r0,#0x1e
00000a dbfb BLT |L4.4|
;;;104 ;
;;;105 }
00000c 4770 BX lr
;;;106
ENDP
AREA ||i.i2c_NAck||, CODE, READONLY, ALIGN=2
i2c_NAck PROC
;;;267 */
;;;268 void i2c_NAck(void)
000000 b510 PUSH {r4,lr}
;;;269 {
;;;270 I2C_SDA_1(); /* CPU驱动SDA = 1 */
000002 2080 MOVS r0,#0x80
000004 4907 LDR r1,|L5.36|
000006 6008 STR r0,[r1,#0]
;;;271 i2c_Delay();
000008 f7fffffe BL i2c_Delay
;;;272 I2C_SCL_1(); /* CPU产生1个时钟 */
00000c 2040 MOVS r0,#0x40
00000e 4905 LDR r1,|L5.36|
000010 6008 STR r0,[r1,#0]
;;;273 i2c_Delay();
000012 f7fffffe BL i2c_Delay
;;;274 I2C_SCL_0();
000016 2040 MOVS r0,#0x40
000018 4902 LDR r1,|L5.36|
00001a 1d09 ADDS r1,r1,#4
00001c 6008 STR r0,[r1,#0]
;;;275 i2c_Delay();
00001e f7fffffe BL i2c_Delay
;;;276 }
000022 bd10 POP {r4,pc}
;;;277
ENDP
|L5.36|
DCD 0x40010c10
AREA ||i.i2c_ReadByte||, CODE, READONLY, ALIGN=2
i2c_ReadByte PROC
;;;189 */
;;;190 uint8_t i2c_ReadByte(void)
000000 b570 PUSH {r4-r6,lr}
;;;191 {
;;;192 uint8_t i;
;;;193 uint8_t value;
;;;194
;;;195 /* 读到第1个bit为数据的bit7 */
;;;196 value = 0;
000002 2400 MOVS r4,#0
;;;197 for (i = 0; i < 8; i++)
000004 2500 MOVS r5,#0
000006 e016 B |L6.54|
|L6.8|
;;;198 {
;;;199 value <<= 1;
000008 0660 LSLS r0,r4,#25
00000a 0e04 LSRS r4,r0,#24
;;;200 I2C_SCL_1();
00000c 2040 MOVS r0,#0x40
00000e 490c LDR r1,|L6.64|
000010 6008 STR r0,[r1,#0]
;;;201 i2c_Delay();
000012 f7fffffe BL i2c_Delay
;;;202 if (I2C_SDA_READ())
000016 480a LDR r0,|L6.64|
000018 3808 SUBS r0,r0,#8
00001a 6800 LDR r0,[r0,#0]
00001c f0000080 AND r0,r0,#0x80
000020 b108 CBZ r0,|L6.38|
;;;203 {
;;;204 value++;
000022 1c60 ADDS r0,r4,#1
000024 b2c4 UXTB r4,r0
|L6.38|
;;;205 }
;;;206 I2C_SCL_0();
000026 2040 MOVS r0,#0x40
000028 4905 LDR r1,|L6.64|
00002a 1d09 ADDS r1,r1,#4
00002c 6008 STR r0,[r1,#0]
;;;207 i2c_Delay();
00002e f7fffffe BL i2c_Delay
000032 1c68 ADDS r0,r5,#1 ;197
000034 b2c5 UXTB r5,r0 ;197
|L6.54|
000036 2d08 CMP r5,#8 ;197
000038 dbe6 BLT |L6.8|
;;;208 }
;;;209 return value;
00003a 4620 MOV r0,r4
;;;210 }
00003c bd70 POP {r4-r6,pc}
;;;211
ENDP
00003e 0000 DCW 0x0000
|L6.64|
DCD 0x40010c10
AREA ||i.i2c_SendByte||, CODE, READONLY, ALIGN=2
i2c_SendByte PROC
;;;153 */
;;;154 void i2c_SendByte(uint8_t _ucByte)
000000 b570 PUSH {r4-r6,lr}
;;;155 {
000002 4604 MOV r4,r0
;;;156 uint8_t i;
;;;157
;;;158 /* 先发送字节的高位bit7 */
;;;159 for (i = 0; i < 8; i++)
000004 2500 MOVS r5,#0
000006 e020 B |L7.74|
|L7.8|
;;;160 {
;;;161 if (_ucByte & 0x80)
000008 f0040080 AND r0,r4,#0x80
00000c b118 CBZ r0,|L7.22|
;;;162 {
;;;163 I2C_SDA_1();
00000e 2080 MOVS r0,#0x80
000010 490f LDR r1,|L7.80|
000012 6008 STR r0,[r1,#0]
000014 e003 B |L7.30|
|L7.22|
;;;164 }
;;;165 else
;;;166 {
;;;167 I2C_SDA_0();
000016 2080 MOVS r0,#0x80
000018 490d LDR r1,|L7.80|
00001a 1d09 ADDS r1,r1,#4
00001c 6008 STR r0,[r1,#0]
|L7.30|
;;;168 }
;;;169 i2c_Delay();
00001e f7fffffe BL i2c_Delay
;;;170 I2C_SCL_1();
000022 2040 MOVS r0,#0x40
000024 490a LDR r1,|L7.80|
000026 6008 STR r0,[r1,#0]
;;;171 i2c_Delay();
000028 f7fffffe BL i2c_Delay
;;;172 I2C_SCL_0();
00002c 2040 MOVS r0,#0x40
00002e 4908 LDR r1,|L7.80|
000030 1d09 ADDS r1,r1,#4
000032 6008 STR r0,[r1,#0]
;;;173 if (i == 7)
000034 2d07 CMP r5,#7
000036 d102 BNE |L7.62|
;;;174 {
;;;175 I2C_SDA_1(); // 释放总线
000038 2080 MOVS r0,#0x80
00003a 1f09 SUBS r1,r1,#4
00003c 6008 STR r0,[r1,#0]
|L7.62|
;;;176 }
;;;177 _ucByte <<= 1; /* 左移一个bit */
00003e 0660 LSLS r0,r4,#25
000040 0e04 LSRS r4,r0,#24
;;;178 i2c_Delay();
000042 f7fffffe BL i2c_Delay
000046 1c68 ADDS r0,r5,#1 ;159
000048 b2c5 UXTB r5,r0 ;159
|L7.74|
00004a 2d08 CMP r5,#8 ;159
00004c dbdc BLT |L7.8|
;;;179 }
;;;180 }
00004e bd70 POP {r4-r6,pc}
;;;181
ENDP
|L7.80|
DCD 0x40010c10
AREA ||i.i2c_Start||, CODE, READONLY, ALIGN=2
i2c_Start PROC
;;;114 */
;;;115 void i2c_Start(void)
000000 b510 PUSH {r4,lr}
;;;116 {
;;;117 /* 当SCL高电平时SDA出现一个下跳沿表示I2C总线启动信号 */
;;;118 I2C_SDA_1();
000002 2080 MOVS r0,#0x80
000004 4909 LDR r1,|L8.44|
000006 6008 STR r0,[r1,#0]
;;;119 I2C_SCL_1();
000008 2040 MOVS r0,#0x40
00000a 6008 STR r0,[r1,#0]
;;;120 i2c_Delay();
00000c f7fffffe BL i2c_Delay
;;;121 I2C_SDA_0();
000010 2080 MOVS r0,#0x80
000012 4906 LDR r1,|L8.44|
000014 1d09 ADDS r1,r1,#4
000016 6008 STR r0,[r1,#0]
;;;122 i2c_Delay();
000018 f7fffffe BL i2c_Delay
;;;123
;;;124 I2C_SCL_0();
00001c 2040 MOVS r0,#0x40
00001e 4903 LDR r1,|L8.44|
000020 1d09 ADDS r1,r1,#4
000022 6008 STR r0,[r1,#0]
;;;125 i2c_Delay();
000024 f7fffffe BL i2c_Delay
;;;126 }
000028 bd10 POP {r4,pc}
;;;127
ENDP
00002a 0000 DCW 0x0000
|L8.44|
DCD 0x40010c10
AREA ||i.i2c_Stop||, CODE, READONLY, ALIGN=2
i2c_Stop PROC
;;;135 */
;;;136 void i2c_Stop(void)
000000 b510 PUSH {r4,lr}
;;;137 {
;;;138 /* 当SCL高电平时SDA出现一个上跳沿表示I2C总线停止信号 */
;;;139 I2C_SDA_0();
000002 2080 MOVS r0,#0x80
000004 4906 LDR r1,|L9.32|
000006 6008 STR r0,[r1,#0]
;;;140 I2C_SCL_1();
000008 2040 MOVS r0,#0x40
00000a 1f09 SUBS r1,r1,#4
00000c 6008 STR r0,[r1,#0]
;;;141 i2c_Delay();
00000e f7fffffe BL i2c_Delay
;;;142 I2C_SDA_1();
000012 2080 MOVS r0,#0x80
000014 4902 LDR r1,|L9.32|
000016 1f09 SUBS r1,r1,#4
000018 6008 STR r0,[r1,#0]
;;;143 i2c_Delay();
00001a f7fffffe BL i2c_Delay
;;;144 }
00001e bd10 POP {r4,pc}
;;;145
ENDP
|L9.32|
DCD 0x40010c14
AREA ||i.i2c_WaitAck||, CODE, READONLY, ALIGN=2
i2c_WaitAck PROC
;;;219 */
;;;220 uint8_t i2c_WaitAck(void)
000000 b510 PUSH {r4,lr}
;;;221 {
;;;222 uint8_t re;
;;;223
;;;224 I2C_SDA_1(); /* CPU释放SDA总线 */
000002 2080 MOVS r0,#0x80
000004 490c LDR r1,|L10.56|
000006 6008 STR r0,[r1,#0]
;;;225 i2c_Delay();
000008 f7fffffe BL i2c_Delay
;;;226 I2C_SCL_1(); /* CPU驱动SCL = 1, 此时器件会返回ACK应答 */
00000c 2040 MOVS r0,#0x40
00000e 490a LDR r1,|L10.56|
000010 6008 STR r0,[r1,#0]
;;;227 i2c_Delay();
000012 f7fffffe BL i2c_Delay
;;;228 if (I2C_SDA_READ()) /* CPU读取SDA口线状态 */
000016 4808 LDR r0,|L10.56|
000018 3808 SUBS r0,r0,#8
00001a 6800 LDR r0,[r0,#0]
00001c f0000080 AND r0,r0,#0x80
000020 b108 CBZ r0,|L10.38|
;;;229 {
;;;230 re = 1;
000022 2401 MOVS r4,#1
000024 e000 B |L10.40|
|L10.38|
;;;231 }
;;;232 else
;;;233 {
;;;234 re = 0;
000026 2400 MOVS r4,#0
|L10.40|
;;;235 }
;;;236 I2C_SCL_0();
000028 2040 MOVS r0,#0x40
00002a 4903 LDR r1,|L10.56|
00002c 1d09 ADDS r1,r1,#4
00002e 6008 STR r0,[r1,#0]
;;;237 i2c_Delay();
000030 f7fffffe BL i2c_Delay
;;;238 return re;
000034 4620 MOV r0,r4
;;;239 }
000036 bd10 POP {r4,pc}
;;;240
ENDP
|L10.56|
DCD 0x40010c10
;*** Start embedded assembler ***
#line 1 "..\\..\\User\\bsp\\src\\bsp_i2c_gpio.c"
AREA ||.rev16_text||, CODE
THUMB
EXPORT |__asm___14_bsp_i2c_gpio_c_ec180c52____REV16|
#line 114 "..\\..\\Libraries\\CMSIS\\Include\\core_cmInstr.h"
|__asm___14_bsp_i2c_gpio_c_ec180c52____REV16| PROC
#line 115
rev16 r0, r0
bx lr
ENDP
AREA ||.revsh_text||, CODE
THUMB
EXPORT |__asm___14_bsp_i2c_gpio_c_ec180c52____REVSH|
#line 128
|__asm___14_bsp_i2c_gpio_c_ec180c52____REVSH| PROC
#line 129
revsh r0, r0
bx lr
ENDP
;*** End embedded assembler ***

View File

@@ -0,0 +1,748 @@
; generated by Component: ARM Compiler 5.06 update 7 (build 960) Tool: ArmCC [4d365d]
; commandline ArmCC [--list --split_sections --debug -c --asm --interleave -o.\flash\obj\bsp_key.o --asm_dir=.\Flash\List\ --list_dir=.\Flash\List\ --depend=.\flash\obj\bsp_key.d --cpu=Cortex-M3 --apcs=interwork -O0 --diag_suppress=9931,870 -I..\..\Libraries\CMSIS\Device\ST\STM32F10x\Include -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Libraries\STM32_USB-FS-Device_Driver\inc -I..\..\Libraries\CMSIS\Include -I..\..\User\bsp -I..\..\User\bsp\inc -I..\..\User\app\inc -I..\..\User -IC:\Users\w1619\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__MICROLIB -D__UVISION_VERSION=538 -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD --omf_browse=.\flash\obj\bsp_key.crf ..\..\User\bsp\src\bsp_key.c]
THUMB
AREA ||i.IsKeyDown1||, CODE, READONLY, ALIGN=2
IsKeyDown1 PROC
;;;118 #else
;;;119 uint8_t IsKeyDown1(void)
000000 4804 LDR r0,|L1.20|
;;;120 {
;;;121 if ((GPIO_PORT_K6->IDR & GPIO_PIN_K6) == 0)
000002 6800 LDR r0,[r0,#0]
000004 f0000008 AND r0,r0,#8
000008 b908 CBNZ r0,|L1.14|
;;;122 return 1;
00000a 2001 MOVS r0,#1
|L1.12|
;;;123 else
;;;124 return 0;
;;;125 } // 复位键
00000c 4770 BX lr
|L1.14|
00000e 2000 MOVS r0,#0 ;124
000010 e7fc B |L1.12|
;;;126 // 被main函数调用
ENDP
000012 0000 DCW 0x0000
|L1.20|
DCD 0x40010808
AREA ||i.IsKeyDown2||, CODE, READONLY, ALIGN=2
IsKeyDown2 PROC
;;;126 // 被main函数调用
;;;127 uint8_t IsKeyDown2(void)
000000 4804 LDR r0,|L2.20|
;;;128 {
;;;129 if ((GPIO_PORT_K1->IDR & GPIO_PIN_K1) == 0)
000002 6800 LDR r0,[r0,#0]
000004 f0000004 AND r0,r0,#4
000008 b908 CBNZ r0,|L2.14|
;;;130 return 1;
00000a 2001 MOVS r0,#1
|L2.12|
;;;131 else
;;;132 return 0;
;;;133 } // 模式切换键
00000c 4770 BX lr
|L2.14|
00000e 2000 MOVS r0,#0 ;132
000010 e7fc B |L2.12|
;;;134 uint8_t IsKeyDown3(void)
ENDP
000012 0000 DCW 0x0000
|L2.20|
DCD 0x40011808
AREA ||i.IsKeyDown3||, CODE, READONLY, ALIGN=2
IsKeyDown3 PROC
;;;133 } // 模式切换键
;;;134 uint8_t IsKeyDown3(void)
000000 4804 LDR r0,|L3.20|
;;;135 {
;;;136 if ((GPIO_PORT_K2->IDR & GPIO_PIN_K2) == 0)
000002 6800 LDR r0,[r0,#0]
000004 f0000008 AND r0,r0,#8
000008 b908 CBNZ r0,|L3.14|
;;;137 return 1;
00000a 2001 MOVS r0,#1
|L3.12|
;;;138 else
;;;139 return 0;
;;;140 } // 模式切换键
00000c 4770 BX lr
|L3.14|
00000e 2000 MOVS r0,#0 ;139
000010 e7fc B |L3.12|
;;;141 // static uint8_t IsKeyDown3(void) {if ((GPIO_PORT_K3->IDR & GPIO_PIN_K3) == 0) return 1;else return 0;}
ENDP
000012 0000 DCW 0x0000
|L3.20|
DCD 0x40011808
AREA ||i.bsp_ClearKey||, CODE, READONLY, ALIGN=2
bsp_ClearKey PROC
;;;279 */
;;;280 void bsp_ClearKey(void)
000000 4802 LDR r0,|L4.12|
;;;281 {
;;;282 s_tKey.Read = s_tKey.Write;
000002 7ac0 LDRB r0,[r0,#0xb] ; s_tKey
000004 4901 LDR r1,|L4.12|
000006 7288 STRB r0,[r1,#0xa]
;;;283 }
000008 4770 BX lr
;;;284
ENDP
00000a 0000 DCW 0x0000
|L4.12|
DCD s_tKey
AREA ||i.bsp_DetectKey||, CODE, READONLY, ALIGN=2
bsp_DetectKey PROC
;;;392 */
;;;393 static void bsp_DetectKey(uint8_t i)
000000 b570 PUSH {r4-r6,lr}
;;;394 {
000002 4605 MOV r5,r0
;;;395 KEY_T *pBtn;
;;;396
;;;397 /*
;;;398 如果没有初始化按键函数,则报错
;;;399 if (s_tBtn[i].IsKeyDownFunc == 0)
;;;400 {
;;;401 printf("Fault : DetectButton(), s_tBtn[i].IsKeyDownFunc undefine");
;;;402 }
;;;403 */
;;;404
;;;405 pBtn = &s_tBtn[i];
000004 4830 LDR r0,|L5.200|
000006 eb001405 ADD r4,r0,r5,LSL #4
;;;406 if (pBtn->IsKeyDownFunc())
00000a 6820 LDR r0,[r4,#0]
00000c 4780 BLX r0
00000e 2800 CMP r0,#0
000010 d03e BEQ |L5.144|
;;;407 {
;;;408 if (pBtn->Count < KEY_FILTER_TIME)
000012 7920 LDRB r0,[r4,#4]
000014 2801 CMP r0,#1
000016 da02 BGE |L5.30|
;;;409 {
;;;410 pBtn->Count = KEY_FILTER_TIME;
000018 2001 MOVS r0,#1
00001a 7120 STRB r0,[r4,#4]
00001c e052 B |L5.196|
|L5.30|
;;;411 }
;;;412 else if (pBtn->Count < 2 * KEY_FILTER_TIME)
00001e 7920 LDRB r0,[r4,#4]
000020 2802 CMP r0,#2
000022 da03 BGE |L5.44|
;;;413 {
;;;414 pBtn->Count++;
000024 7920 LDRB r0,[r4,#4]
000026 1c40 ADDS r0,r0,#1
000028 7120 STRB r0,[r4,#4]
00002a e04b B |L5.196|
|L5.44|
;;;415 }
;;;416 else
;;;417 {
;;;418 if (pBtn->State == 0)
00002c 7aa0 LDRB r0,[r4,#0xa]
00002e b938 CBNZ r0,|L5.64|
;;;419 {
;;;420 pBtn->State = 1;
000030 2001 MOVS r0,#1
000032 72a0 STRB r0,[r4,#0xa]
;;;421
;;;422 /* 发送按钮按下的消息 */
;;;423 bsp_PutKey((uint8_t)(3 * i + 1));
000034 eb050145 ADD r1,r5,r5,LSL #1
000038 1c49 ADDS r1,r1,#1
00003a b2c8 UXTB r0,r1
00003c f7fffffe BL bsp_PutKey
|L5.64|
;;;424 }
;;;425
;;;426 if (pBtn->LongTime > 0)
000040 8920 LDRH r0,[r4,#8]
000042 2800 CMP r0,#0
000044 dd3e BLE |L5.196|
;;;427 {
;;;428 if (pBtn->LongCount < pBtn->LongTime)
000046 88e0 LDRH r0,[r4,#6]
000048 8921 LDRH r1,[r4,#8]
00004a 4288 CMP r0,r1
00004c da0d BGE |L5.106|
;;;429 {
;;;430 /* 发送按钮持续按下的消息 */
;;;431 if (++pBtn->LongCount == pBtn->LongTime)
00004e 88e0 LDRH r0,[r4,#6]
000050 1c40 ADDS r0,r0,#1
000052 b280 UXTH r0,r0
000054 80e0 STRH r0,[r4,#6]
000056 8921 LDRH r1,[r4,#8]
000058 4288 CMP r0,r1
00005a d133 BNE |L5.196|
;;;432 {
;;;433 /* 键值放入按键FIFO */
;;;434 bsp_PutKey((uint8_t)(3 * i + 3));
00005c eb050145 ADD r1,r5,r5,LSL #1
000060 1cc9 ADDS r1,r1,#3
000062 b2c8 UXTB r0,r1
000064 f7fffffe BL bsp_PutKey
000068 e02c B |L5.196|
|L5.106|
;;;435 }
;;;436 }
;;;437 else
;;;438 {
;;;439 if (pBtn->RepeatSpeed > 0)
00006a 7ae0 LDRB r0,[r4,#0xb]
00006c 2800 CMP r0,#0
00006e dd29 BLE |L5.196|
;;;440 {
;;;441 if (++pBtn->RepeatCount >= pBtn->RepeatSpeed)
000070 7b20 LDRB r0,[r4,#0xc]
000072 1c40 ADDS r0,r0,#1
000074 b2c0 UXTB r0,r0
000076 7320 STRB r0,[r4,#0xc]
000078 7ae1 LDRB r1,[r4,#0xb]
00007a 4288 CMP r0,r1
00007c db22 BLT |L5.196|
;;;442 {
;;;443 pBtn->RepeatCount = 0;
00007e 2000 MOVS r0,#0
000080 7320 STRB r0,[r4,#0xc]
;;;444 /* 常按键后每隔10ms发送1个按键 */
;;;445 bsp_PutKey((uint8_t)(3 * i + 1));
000082 eb050145 ADD r1,r5,r5,LSL #1
000086 1c49 ADDS r1,r1,#1
000088 b2c8 UXTB r0,r1
00008a f7fffffe BL bsp_PutKey
00008e e019 B |L5.196|
|L5.144|
;;;446 }
;;;447 }
;;;448 }
;;;449 }
;;;450 }
;;;451 }
;;;452 else
;;;453 {
;;;454 if (pBtn->Count > KEY_FILTER_TIME)
000090 7920 LDRB r0,[r4,#4]
000092 2801 CMP r0,#1
000094 dd02 BLE |L5.156|
;;;455 {
;;;456 pBtn->Count = KEY_FILTER_TIME;
000096 2001 MOVS r0,#1
000098 7120 STRB r0,[r4,#4]
00009a e010 B |L5.190|
|L5.156|
;;;457 }
;;;458 else if (pBtn->Count != 0)
00009c 7920 LDRB r0,[r4,#4]
00009e b118 CBZ r0,|L5.168|
;;;459 {
;;;460 pBtn->Count--;
0000a0 7920 LDRB r0,[r4,#4]
0000a2 1e40 SUBS r0,r0,#1
0000a4 7120 STRB r0,[r4,#4]
0000a6 e00a B |L5.190|
|L5.168|
;;;461 }
;;;462 else
;;;463 {
;;;464 if (pBtn->State == 1)
0000a8 7aa0 LDRB r0,[r4,#0xa]
0000aa 2801 CMP r0,#1
0000ac d107 BNE |L5.190|
;;;465 {
;;;466 pBtn->State = 0;
0000ae 2000 MOVS r0,#0
0000b0 72a0 STRB r0,[r4,#0xa]
;;;467
;;;468 /* 发送按钮弹起的消息 */
;;;469 bsp_PutKey((uint8_t)(3 * i + 2));
0000b2 eb050145 ADD r1,r5,r5,LSL #1
0000b6 1c89 ADDS r1,r1,#2
0000b8 b2c8 UXTB r0,r1
0000ba f7fffffe BL bsp_PutKey
|L5.190|
;;;470 }
;;;471 }
;;;472
;;;473 pBtn->LongCount = 0;
0000be 2000 MOVS r0,#0
0000c0 80e0 STRH r0,[r4,#6]
;;;474 pBtn->RepeatCount = 0;
0000c2 7320 STRB r0,[r4,#0xc]
|L5.196|
;;;475 }
;;;476 }
0000c4 bd70 POP {r4-r6,pc}
;;;477
ENDP
0000c6 0000 DCW 0x0000
|L5.200|
DCD s_tBtn
AREA ||i.bsp_GetKey||, CODE, READONLY, ALIGN=2
bsp_GetKey PROC
;;;193 */
;;;194 uint8_t bsp_GetKey(void)
000000 480b LDR r0,|L6.48|
;;;195 {
;;;196 uint8_t ret;
;;;197
;;;198 if (s_tKey.Read == s_tKey.Write)
000002 7a80 LDRB r0,[r0,#0xa] ; s_tKey
000004 4a0a LDR r2,|L6.48|
000006 7ad2 LDRB r2,[r2,#0xb] ; s_tKey
000008 4290 CMP r0,r2
00000a d101 BNE |L6.16|
;;;199 {
;;;200 return KEY_NONE;
00000c 2000 MOVS r0,#0
|L6.14|
;;;201 }
;;;202 else
;;;203 {
;;;204 ret = s_tKey.Buf[s_tKey.Read];
;;;205
;;;206 if (++s_tKey.Read >= KEY_FIFO_SIZE)
;;;207 {
;;;208 s_tKey.Read = 0;
;;;209 }
;;;210 return ret;
;;;211 }
;;;212 }
00000e 4770 BX lr
|L6.16|
000010 4807 LDR r0,|L6.48|
000012 7a80 LDRB r0,[r0,#0xa] ;204 ; s_tKey
000014 4a06 LDR r2,|L6.48|
000016 5c11 LDRB r1,[r2,r0] ;204
000018 4610 MOV r0,r2 ;206
00001a 7a80 LDRB r0,[r0,#0xa] ;206 ; s_tKey
00001c 1c40 ADDS r0,r0,#1 ;206
00001e b2c0 UXTB r0,r0 ;206
000020 7290 STRB r0,[r2,#0xa] ;206
000022 280a CMP r0,#0xa ;206
000024 db01 BLT |L6.42|
000026 2000 MOVS r0,#0 ;208
000028 7290 STRB r0,[r2,#0xa] ;208
|L6.42|
00002a 4608 MOV r0,r1 ;210
00002c e7ef B |L6.14|
;;;213
ENDP
00002e 0000 DCW 0x0000
|L6.48|
DCD s_tKey
AREA ||i.bsp_GetKey2||, CODE, READONLY, ALIGN=2
bsp_GetKey2 PROC
;;;221 */
;;;222 uint8_t bsp_GetKey2(void)
000000 480b LDR r0,|L7.48|
;;;223 {
;;;224 uint8_t ret;
;;;225
;;;226 if (s_tKey.Read2 == s_tKey.Write)
000002 7b00 LDRB r0,[r0,#0xc] ; s_tKey
000004 4a0a LDR r2,|L7.48|
000006 7ad2 LDRB r2,[r2,#0xb] ; s_tKey
000008 4290 CMP r0,r2
00000a d101 BNE |L7.16|
;;;227 {
;;;228 return KEY_NONE;
00000c 2000 MOVS r0,#0
|L7.14|
;;;229 }
;;;230 else
;;;231 {
;;;232 ret = s_tKey.Buf[s_tKey.Read2];
;;;233
;;;234 if (++s_tKey.Read2 >= KEY_FIFO_SIZE)
;;;235 {
;;;236 s_tKey.Read2 = 0;
;;;237 }
;;;238 return ret;
;;;239 }
;;;240 }
00000e 4770 BX lr
|L7.16|
000010 4807 LDR r0,|L7.48|
000012 7b00 LDRB r0,[r0,#0xc] ;232 ; s_tKey
000014 4a06 LDR r2,|L7.48|
000016 5c11 LDRB r1,[r2,r0] ;232
000018 4610 MOV r0,r2 ;234
00001a 7b00 LDRB r0,[r0,#0xc] ;234 ; s_tKey
00001c 1c40 ADDS r0,r0,#1 ;234
00001e b2c0 UXTB r0,r0 ;234
000020 7310 STRB r0,[r2,#0xc] ;234
000022 280a CMP r0,#0xa ;234
000024 db01 BLT |L7.42|
000026 2000 MOVS r0,#0 ;236
000028 7310 STRB r0,[r2,#0xc] ;236
|L7.42|
00002a 4608 MOV r0,r1 ;238
00002c e7ef B |L7.14|
;;;241
ENDP
00002e 0000 DCW 0x0000
|L7.48|
DCD s_tKey
AREA ||i.bsp_GetKeyState||, CODE, READONLY, ALIGN=2
bsp_GetKeyState PROC
;;;249 */
;;;250 uint8_t bsp_GetKeyState(KEY_ID_E _ucKeyID)
000000 4601 MOV r1,r0
;;;251 {
;;;252 return s_tBtn[_ucKeyID].State;
000002 4802 LDR r0,|L8.12|
000004 eb001001 ADD r0,r0,r1,LSL #4
000008 7a80 LDRB r0,[r0,#0xa]
;;;253 }
00000a 4770 BX lr
;;;254
ENDP
|L8.12|
DCD s_tBtn
AREA ||i.bsp_InitKey||, CODE, READONLY, ALIGN=1
bsp_InitKey PROC
;;;161 */
;;;162 void bsp_InitKey(void)
000000 b510 PUSH {r4,lr}
;;;163 {
;;;164 bsp_InitKeyVar(); /* 初始化按键变量 */
000002 f7fffffe BL bsp_InitKeyVar
;;;165 bsp_InitKeyHard(); /* 初始化按键硬件 */
000006 f7fffffe BL bsp_InitKeyHard
;;;166 }
00000a bd10 POP {r4,pc}
;;;167
ENDP
AREA ||i.bsp_InitKeyHard||, CODE, READONLY, ALIGN=2
bsp_InitKeyHard PROC
;;;292 */
;;;293 static void bsp_InitKeyHard(void)
000000 b508 PUSH {r3,lr}
;;;294 {
;;;295 GPIO_InitTypeDef GPIO_InitStructure;
;;;296
;;;297 /* 第1步打开GPIO时钟 */
;;;298 RCC_APB2PeriphClockCmd(RCC_ALL_KEY | RCC_ALL_KEY1, ENABLE);
000002 2101 MOVS r1,#1
000004 2044 MOVS r0,#0x44
000006 f7fffffe BL RCC_APB2PeriphClockCmd
;;;299
;;;300 /* 第2步配置所有的按键GPIO为浮动输入模式(实际上CPU复位后就是输入状态) */
;;;301 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
00000a 2003 MOVS r0,#3
00000c f88d0002 STRB r0,[sp,#2]
;;;302 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; /* 输入浮空模式 */
000010 2004 MOVS r0,#4
000012 f88d0003 STRB r0,[sp,#3]
;;;303
;;;304 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_K1;
000016 f8ad0000 STRH r0,[sp,#0]
;;;305 GPIO_Init(GPIO_PORT_K1, &GPIO_InitStructure);
00001a 4669 MOV r1,sp
00001c 4808 LDR r0,|L10.64|
00001e f7fffffe BL GPIO_Init
;;;306
;;;307 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_K2;
000022 2008 MOVS r0,#8
000024 f8ad0000 STRH r0,[sp,#0]
;;;308 GPIO_Init(GPIO_PORT_K2, &GPIO_InitStructure);
000028 4669 MOV r1,sp
00002a 4805 LDR r0,|L10.64|
00002c f7fffffe BL GPIO_Init
;;;309
;;;310 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_K6;
000030 2008 MOVS r0,#8
000032 f8ad0000 STRH r0,[sp,#0]
;;;311 GPIO_Init(GPIO_PORT_K6, &GPIO_InitStructure);
000036 4669 MOV r1,sp
000038 4802 LDR r0,|L10.68|
00003a f7fffffe BL GPIO_Init
;;;312
;;;313 // GPIO_InitStructure.GPIO_Pin = GPIO_PIN_K3;
;;;314 // GPIO_Init(GPIO_PORT_K3, &GPIO_InitStructure);
;;;315 //
;;;316 // GPIO_InitStructure.GPIO_Pin = GPIO_PIN_K4;
;;;317 // GPIO_Init(GPIO_PORT_K4, &GPIO_InitStructure);
;;;318 //
;;;319 // GPIO_InitStructure.GPIO_Pin = GPIO_PIN_K5;
;;;320 // GPIO_Init(GPIO_PORT_K5, &GPIO_InitStructure);
;;;321 //
;;;322 // GPIO_InitStructure.GPIO_Pin = GPIO_PIN_K6;
;;;323 // GPIO_Init(GPIO_PORT_K6, &GPIO_InitStructure);
;;;324 //
;;;325 // GPIO_InitStructure.GPIO_Pin = GPIO_PIN_K7;
;;;326 // GPIO_Init(GPIO_PORT_K7, &GPIO_InitStructure);
;;;327 //
;;;328 // GPIO_InitStructure.GPIO_Pin = GPIO_PIN_K8;
;;;329 // GPIO_Init(GPIO_PORT_K8, &GPIO_InitStructure);
;;;330 }
00003e bd08 POP {r3,pc}
;;;331
ENDP
|L10.64|
DCD 0x40011800
|L10.68|
DCD 0x40010800
AREA ||i.bsp_InitKeyVar||, CODE, READONLY, ALIGN=2
bsp_InitKeyVar PROC
;;;339 */
;;;340 static void bsp_InitKeyVar(void)
000000 2100 MOVS r1,#0
;;;341 {
;;;342 uint8_t i;
;;;343
;;;344 /* 对按键FIFO读写指针清零 */
;;;345 s_tKey.Read = 0;
000002 4a14 LDR r2,|L11.84|
000004 7291 STRB r1,[r2,#0xa]
;;;346 s_tKey.Write = 0;
000006 72d1 STRB r1,[r2,#0xb]
;;;347 s_tKey.Read2 = 0;
000008 7311 STRB r1,[r2,#0xc]
;;;348
;;;349 /* 给每个按键结构体成员变量赋一组缺省值 */
;;;350 for (i = 0; i < KEY_COUNT; i++)
00000a 2000 MOVS r0,#0
00000c e017 B |L11.62|
|L11.14|
;;;351 {
;;;352 s_tBtn[i].LongTime = KEY_LONG_TIME; /* 长按时间 0 表示不检测长按键事件 */
00000e 2164 MOVS r1,#0x64
000010 4a11 LDR r2,|L11.88|
000012 eb021200 ADD r2,r2,r0,LSL #4
000016 8111 STRH r1,[r2,#8]
;;;353 s_tBtn[i].Count = KEY_FILTER_TIME / 2; /* 计数器设置为滤波时间的一半 */
000018 2100 MOVS r1,#0
00001a 4a0f LDR r2,|L11.88|
00001c eb021200 ADD r2,r2,r0,LSL #4
000020 7111 STRB r1,[r2,#4]
;;;354 s_tBtn[i].State = 0; /* 按键缺省状态0为未按下 */
000022 4a0d LDR r2,|L11.88|
000024 eb021200 ADD r2,r2,r0,LSL #4
000028 7291 STRB r1,[r2,#0xa]
;;;355 // s_tBtn[i].KeyCodeDown = 3 * i + 1; /* 按键按下的键值代码 */
;;;356 // s_tBtn[i].KeyCodeUp = 3 * i + 2; /* 按键弹起的键值代码 */
;;;357 // s_tBtn[i].KeyCodeLong = 3 * i + 3; /* 按键被持续按下的键值代码 */
;;;358 s_tBtn[i].RepeatSpeed = 0; /* 按键连发的速度0表示不支持连发 */
00002a 4a0b LDR r2,|L11.88|
00002c eb021200 ADD r2,r2,r0,LSL #4
000030 72d1 STRB r1,[r2,#0xb]
;;;359 s_tBtn[i].RepeatCount = 0; /* 连发计数器 */
000032 4a09 LDR r2,|L11.88|
000034 eb021200 ADD r2,r2,r0,LSL #4
000038 7311 STRB r1,[r2,#0xc]
00003a 1c41 ADDS r1,r0,#1 ;350
00003c b2c8 UXTB r0,r1 ;350
|L11.62|
00003e 2803 CMP r0,#3 ;350
000040 dbe5 BLT |L11.14|
;;;360 }
;;;361
;;;362 /* 如果需要单独更改某个按键的参数,可以在此单独重新赋值 */
;;;363 /* 比如我们希望按键1按下超过1秒后自动重发相同键值 */
;;;364 // s_tBtn[KID_K7].LongTime = 40;
;;;365 // s_tBtn[KID_K7].RepeatSpeed = 5; /* 每隔50ms自动发送键值 */
;;;366 //
;;;367 // s_tBtn[KID_K8].LongTime = 40;
;;;368 // s_tBtn[KID_K8].RepeatSpeed = 5; /* 每隔50ms自动发送键值 */
;;;369
;;;370 /* 判断按键按下的函数 */
;;;371 s_tBtn[0].IsKeyDownFunc = IsKeyDown1;
000042 4906 LDR r1,|L11.92|
000044 4a04 LDR r2,|L11.88|
000046 6011 STR r1,[r2,#0] ; s_tBtn
;;;372 s_tBtn[1].IsKeyDownFunc = IsKeyDown2;
000048 4905 LDR r1,|L11.96|
00004a 6111 STR r1,[r2,#0x10] ; s_tBtn
;;;373 s_tBtn[2].IsKeyDownFunc = IsKeyDown3;
00004c 4905 LDR r1,|L11.100|
00004e 6211 STR r1,[r2,#0x20] ; s_tBtn
;;;374 // s_tBtn[3].IsKeyDownFunc = IsKeyDown4;
;;;375 // s_tBtn[4].IsKeyDownFunc = IsKeyDown5;
;;;376 // s_tBtn[5].IsKeyDownFunc = IsKeyDown6;
;;;377 // s_tBtn[6].IsKeyDownFunc = IsKeyDown7;// shen 0809
;;;378 // s_tBtn[7].IsKeyDownFunc = IsKeyDown8;
;;;379
;;;380 /* 组合键 */
;;;381 // s_tBtn[8].IsKeyDownFunc = IsKeyDown9;
;;;382 // s_tBtn[9].IsKeyDownFunc = IsKeyDown10;
;;;383 }
000050 4770 BX lr
;;;384
ENDP
000052 0000 DCW 0x0000
|L11.84|
DCD s_tKey
|L11.88|
DCD s_tBtn
|L11.92|
DCD IsKeyDown1
|L11.96|
DCD IsKeyDown2
|L11.100|
DCD IsKeyDown3
AREA ||i.bsp_KeyScan||, CODE, READONLY, ALIGN=1
bsp_KeyScan PROC
;;;485 */
;;;486 void bsp_KeyScan(void)
000000 b510 PUSH {r4,lr}
;;;487 {
;;;488 uint8_t i;
;;;489
;;;490 for (i = 0; i < KEY_COUNT; i++)
000002 2400 MOVS r4,#0
000004 e004 B |L12.16|
|L12.6|
;;;491 {
;;;492 bsp_DetectKey(i);
000006 4620 MOV r0,r4
000008 f7fffffe BL bsp_DetectKey
00000c 1c60 ADDS r0,r4,#1 ;490
00000e b2c4 UXTB r4,r0 ;490
|L12.16|
000010 2c03 CMP r4,#3 ;490
000012 dbf8 BLT |L12.6|
;;;493 }
;;;494 }
000014 bd10 POP {r4,pc}
;;;495
ENDP
AREA ||i.bsp_PutKey||, CODE, READONLY, ALIGN=2
bsp_PutKey PROC
;;;175 */
;;;176 void bsp_PutKey(uint8_t _KeyCode)
000000 4906 LDR r1,|L13.28|
;;;177 {
;;;178 s_tKey.Buf[s_tKey.Write] = _KeyCode;
000002 7ac9 LDRB r1,[r1,#0xb] ; s_tKey
000004 4a05 LDR r2,|L13.28|
000006 5450 STRB r0,[r2,r1]
;;;179
;;;180 if (++s_tKey.Write >= KEY_FIFO_SIZE)
000008 4611 MOV r1,r2
00000a 7ac9 LDRB r1,[r1,#0xb] ; s_tKey
00000c 1c49 ADDS r1,r1,#1
00000e b2c9 UXTB r1,r1
000010 72d1 STRB r1,[r2,#0xb]
000012 290a CMP r1,#0xa
000014 db01 BLT |L13.26|
;;;181 {
;;;182 s_tKey.Write = 0;
000016 2100 MOVS r1,#0
000018 72d1 STRB r1,[r2,#0xb]
|L13.26|
;;;183 }
;;;184 }
00001a 4770 BX lr
;;;185
ENDP
|L13.28|
DCD s_tKey
AREA ||i.bsp_SetKeyParam||, CODE, READONLY, ALIGN=2
bsp_SetKeyParam PROC
;;;264 */
;;;265 void bsp_SetKeyParam(uint8_t _ucKeyID, uint16_t _LongTime, uint8_t _RepeatSpeed)
000000 b510 PUSH {r4,lr}
;;;266 {
;;;267 s_tBtn[_ucKeyID].LongTime = _LongTime; /* 长按时间 0 表示不检测长按键事件 */
000002 4b07 LDR r3,|L14.32|
000004 eb031300 ADD r3,r3,r0,LSL #4
000008 8119 STRH r1,[r3,#8]
;;;268 s_tBtn[_ucKeyID].RepeatSpeed = _RepeatSpeed; /* 按键连发的速度0表示不支持连发 */
00000a 4b05 LDR r3,|L14.32|
00000c eb031300 ADD r3,r3,r0,LSL #4
000010 72da STRB r2,[r3,#0xb]
;;;269 s_tBtn[_ucKeyID].RepeatCount = 0; /* 连发计数器 */
000012 2300 MOVS r3,#0
000014 4c02 LDR r4,|L14.32|
000016 eb041400 ADD r4,r4,r0,LSL #4
00001a 7323 STRB r3,[r4,#0xc]
;;;270 }
00001c bd10 POP {r4,pc}
;;;271
ENDP
00001e 0000 DCW 0x0000
|L14.32|
DCD s_tBtn
AREA ||.bss||, DATA, NOINIT, ALIGN=2
s_tBtn
% 48
s_tKey
% 13
;*** Start embedded assembler ***
#line 1 "..\\..\\User\\bsp\\src\\bsp_key.c"
AREA ||.rev16_text||, CODE
THUMB
EXPORT |__asm___9_bsp_key_c_fc777be6____REV16|
#line 114 "..\\..\\Libraries\\CMSIS\\Include\\core_cmInstr.h"
|__asm___9_bsp_key_c_fc777be6____REV16| PROC
#line 115
rev16 r0, r0
bx lr
ENDP
AREA ||.revsh_text||, CODE
THUMB
EXPORT |__asm___9_bsp_key_c_fc777be6____REVSH|
#line 128
|__asm___9_bsp_key_c_fc777be6____REVSH| PROC
#line 129
revsh r0, r0
bx lr
ENDP
;*** End embedded assembler ***

View File

@@ -0,0 +1,969 @@
; generated by Component: ARM Compiler 5.05 update 1 (build 106) Tool: ArmCC [4d0efa]
; commandline ArmCC [--list --split_sections --debug -c --asm --interleave -o.\flash\obj\bsp_led.o --asm_dir=.\Flash\List\ --list_dir=.\Flash\List\ --depend=.\flash\obj\bsp_led.d --cpu=Cortex-M3 --apcs=interwork -O0 --diag_suppress=9931,870 -I..\..\Libraries\CMSIS\Device\ST\STM32F10x\Include -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Libraries\STM32_USB-FS-Device_Driver\inc -I..\..\Libraries\CMSIS\Include -I..\..\User\bsp -I..\..\User\bsp\inc -I..\..\User\app\inc -IC:\Keil_v5\ARM\RV31\INC -IC:\Keil_v5\ARM\CMSIS\Include -IC:\Keil_v5\ARM\Inc\ST\STM32F10x -D__MICROLIB -D__UVISION_VERSION=514 -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD --omf_browse=.\flash\obj\bsp_led.crf ..\..\User\bsp\src\bsp_led.c]
THUMB
AREA ||i.ChannelLedAllOff||, CODE, READONLY, ALIGN=1
ChannelLedAllOff PROC
;;;391
;;;392 static void ChannelLedAllOff(void)
000000 b500 PUSH {lr}
;;;393 {
;;;394 bsp_LedOff(1);
000002 2001 MOVS r0,#1
000004 f7fffffe BL bsp_LedOff
;;;395 bsp_LedOff(2);
000008 2002 MOVS r0,#2
00000a f7fffffe BL bsp_LedOff
;;;396 bsp_LedOff(3);
00000e 2003 MOVS r0,#3
000010 f7fffffe BL bsp_LedOff
;;;397 bsp_LedOff(4);
000014 2004 MOVS r0,#4
000016 f7fffffe BL bsp_LedOff
;;;398 bsp_LedOff(5);
00001a 2005 MOVS r0,#5
00001c f7fffffe BL bsp_LedOff
;;;399 bsp_LedOff(6);
000020 2006 MOVS r0,#6
000022 f7fffffe BL bsp_LedOff
;;;400 }
000026 bd00 POP {pc}
;;;401
ENDP
AREA ||i.ResLedAllOff||, CODE, READONLY, ALIGN=1
ResLedAllOff PROC
;;;401
;;;402 static void ResLedAllOff(void)
000000 b500 PUSH {lr}
;;;403 {
;;;404 bsp_LedOff(7);
000002 2007 MOVS r0,#7
000004 f7fffffe BL bsp_LedOff
;;;405 bsp_LedOff(8);
000008 2008 MOVS r0,#8
00000a f7fffffe BL bsp_LedOff
;;;406 bsp_LedOff(9);
00000e 2009 MOVS r0,#9
000010 f7fffffe BL bsp_LedOff
;;;407 bsp_LedOff(10);
000014 200a MOVS r0,#0xa
000016 f7fffffe BL bsp_LedOff
;;;408 bsp_LedOff(11);
00001a 200b MOVS r0,#0xb
00001c f7fffffe BL bsp_LedOff
;;;409 bsp_LedOff(12);
000020 200c MOVS r0,#0xc
000022 f7fffffe BL bsp_LedOff
;;;410 bsp_LedOff(13);
000026 200d MOVS r0,#0xd
000028 f7fffffe BL bsp_LedOff
;;;411 bsp_LedOff(14);
00002c 200e MOVS r0,#0xe
00002e f7fffffe BL bsp_LedOff
;;;412 }
000032 bd00 POP {pc}
;;;413
ENDP
AREA ||i.bsp_ChannelSelect||, CODE, READONLY, ALIGN=2
bsp_ChannelSelect PROC
;;;416 //---------------------------------------
;;;417 void bsp_ChannelSelect(uint8_t _ch)
000000 b510 PUSH {r4,lr}
;;;418 {
000002 4604 MOV r4,r0
;;;419 static uint8_t s_ucOldCh=255;
;;;420
;;;421 if(_ch==s_ucOldCh)
000004 480b LDR r0,|L3.52|
000006 7800 LDRB r0,[r0,#0] ; s_ucOldCh
000008 4284 CMP r4,r0
00000a d107 BNE |L3.28|
;;;422 {
;;;423 ChannelLedAllOff();
00000c f7fffffe BL ChannelLedAllOff
;;;424 bsp_RealyAllOff();
000010 f7fffffe BL bsp_RealyAllOff
;;;425 s_ucOldCh=255;
000014 20ff MOVS r0,#0xff
000016 4907 LDR r1,|L3.52|
000018 7008 STRB r0,[r1,#0]
00001a e009 B |L3.48|
|L3.28|
;;;426 }
;;;427 else
;;;428 {
;;;429 s_ucOldCh = _ch;
00001c 4805 LDR r0,|L3.52|
00001e 7004 STRB r4,[r0,#0]
;;;430 ChannelLedAllOff();
000020 f7fffffe BL ChannelLedAllOff
;;;431 bsp_LedOn(_ch);
000024 4620 MOV r0,r4
000026 f7fffffe BL bsp_LedOn
;;;432 bsp_RelayOn(_ch);
00002a 4620 MOV r0,r4
00002c f7fffffe BL bsp_RelayOn
|L3.48|
;;;433 }
;;;434
;;;435 }
000030 bd10 POP {r4,pc}
;;;436
ENDP
000032 0000 DCW 0x0000
|L3.52|
DCD s_ucOldCh
AREA ||i.bsp_InitLed||, CODE, READONLY, ALIGN=2
bsp_InitLed PROC
;;;81 */
;;;82 void bsp_InitLed(void)
000000 b508 PUSH {r3,lr}
;;;83 {
;;;84 GPIO_InitTypeDef GPIO_InitStructure;
;;;85
;;;86 /* 打开GPIO时钟 */
;;;87 RCC_APB2PeriphClockCmd(RCC_ALL_LED, ENABLE);
000002 2101 MOVS r1,#1
000004 20f4 MOVS r0,#0xf4
000006 f7fffffe BL RCC_APB2PeriphClockCmd
;;;88
;;;89 /*
;;;90 配置所有的LED指示灯GPIO为推挽输出模式
;;;91 由于将GPIO设置为输出时GPIO输出寄存器的值缺省是0因此会驱动LED点亮.
;;;92 这是我不希望的因此在改变GPIO为输出前先关闭LED指示灯
;;;93 */
;;;94 bsp_LedOff(1);
00000a 2001 MOVS r0,#1
00000c f7fffffe BL bsp_LedOff
;;;95 bsp_LedOff(2);
000010 2002 MOVS r0,#2
000012 f7fffffe BL bsp_LedOff
;;;96 bsp_LedOff(3);
000016 2003 MOVS r0,#3
000018 f7fffffe BL bsp_LedOff
;;;97 bsp_LedOff(4);
00001c 2004 MOVS r0,#4
00001e f7fffffe BL bsp_LedOff
;;;98 bsp_LedOff(5);
000022 2005 MOVS r0,#5
000024 f7fffffe BL bsp_LedOff
;;;99 bsp_LedOff(6);
000028 2006 MOVS r0,#6
00002a f7fffffe BL bsp_LedOff
;;;100 bsp_LedOn(7);
00002e 2007 MOVS r0,#7
000030 f7fffffe BL bsp_LedOn
;;;101 bsp_LedOff(8);
000034 2008 MOVS r0,#8
000036 f7fffffe BL bsp_LedOff
;;;102 bsp_LedOff(9);
00003a 2009 MOVS r0,#9
00003c f7fffffe BL bsp_LedOff
;;;103 bsp_LedOff(10);
000040 200a MOVS r0,#0xa
000042 f7fffffe BL bsp_LedOff
;;;104 bsp_LedOff(11);
000046 200b MOVS r0,#0xb
000048 f7fffffe BL bsp_LedOff
;;;105 bsp_LedOff(12);
00004c 200c MOVS r0,#0xc
00004e f7fffffe BL bsp_LedOff
;;;106 bsp_LedOff(13);
000052 200d MOVS r0,#0xd
000054 f7fffffe BL bsp_LedOff
;;;107 bsp_LedOff(14);
000058 200e MOVS r0,#0xe
00005a f7fffffe BL bsp_LedOff
;;;108
;;;109 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
00005e 2003 MOVS r0,#3
000060 f88d0002 STRB r0,[sp,#2]
;;;110 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /* 推挽输出模式 */
000064 2010 MOVS r0,#0x10
000066 f88d0003 STRB r0,[sp,#3]
;;;111
;;;112 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);
00006a 2101 MOVS r1,#1
00006c 2005 MOVS r0,#5
00006e f7fffffe BL RCC_APB2PeriphClockCmd
;;;113 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
000072 2101 MOVS r1,#1
000074 4834 LDR r0,|L4.328|
000076 f7fffffe BL GPIO_PinRemapConfig
;;;114
;;;115 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_LED1;
00007a f44f4000 MOV r0,#0x8000
00007e f8ad0000 STRH r0,[sp,#0]
;;;116 GPIO_Init(GPIO_PORT_LED1, &GPIO_InitStructure);
000082 4669 MOV r1,sp
000084 4831 LDR r0,|L4.332|
000086 f7fffffe BL GPIO_Init
;;;117
;;;118 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_LED2;
00008a f44f6080 MOV r0,#0x400
00008e f8ad0000 STRH r0,[sp,#0]
;;;119 GPIO_Init(GPIO_PORT_LED2, &GPIO_InitStructure);
000092 4669 MOV r1,sp
000094 482e LDR r0,|L4.336|
000096 f7fffffe BL GPIO_Init
;;;120
;;;121 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_LED3;
00009a f44f6000 MOV r0,#0x800
00009e f8ad0000 STRH r0,[sp,#0]
;;;122 GPIO_Init(GPIO_PORT_LED3, &GPIO_InitStructure);
0000a2 4669 MOV r1,sp
0000a4 482a LDR r0,|L4.336|
0000a6 f7fffffe BL GPIO_Init
;;;123
;;;124 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_LED4;
0000aa f44f5080 MOV r0,#0x1000
0000ae f8ad0000 STRH r0,[sp,#0]
;;;125 GPIO_Init(GPIO_PORT_LED4, &GPIO_InitStructure);
0000b2 4669 MOV r1,sp
0000b4 4826 LDR r0,|L4.336|
0000b6 f7fffffe BL GPIO_Init
;;;126
;;;127 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_LED5;
0000ba 2001 MOVS r0,#1
0000bc f8ad0000 STRH r0,[sp,#0]
;;;128 GPIO_Init(GPIO_PORT_LED5, &GPIO_InitStructure);
0000c0 4669 MOV r1,sp
0000c2 4824 LDR r0,|L4.340|
0000c4 f7fffffe BL GPIO_Init
;;;129
;;;130 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_LED6;
0000c8 2002 MOVS r0,#2
0000ca f8ad0000 STRH r0,[sp,#0]
;;;131 GPIO_Init(GPIO_PORT_LED6, &GPIO_InitStructure);
0000ce 4669 MOV r1,sp
0000d0 4820 LDR r0,|L4.340|
0000d2 f7fffffe BL GPIO_Init
;;;132
;;;133 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_LED7;
0000d6 2020 MOVS r0,#0x20
0000d8 f8ad0000 STRH r0,[sp,#0]
;;;134 GPIO_Init(GPIO_PORT_LED7, &GPIO_InitStructure);
0000dc 4669 MOV r1,sp
0000de 481e LDR r0,|L4.344|
0000e0 f7fffffe BL GPIO_Init
;;;135
;;;136 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_LED8;
0000e4 2010 MOVS r0,#0x10
0000e6 f8ad0000 STRH r0,[sp,#0]
;;;137 GPIO_Init(GPIO_PORT_LED8, &GPIO_InitStructure);
0000ea 4669 MOV r1,sp
0000ec 481a LDR r0,|L4.344|
0000ee f7fffffe BL GPIO_Init
;;;138
;;;139 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_LED9;
0000f2 2008 MOVS r0,#8
0000f4 f8ad0000 STRH r0,[sp,#0]
;;;140 GPIO_Init(GPIO_PORT_LED9, &GPIO_InitStructure);
0000f8 4669 MOV r1,sp
0000fa 4817 LDR r0,|L4.344|
0000fc f7fffffe BL GPIO_Init
;;;141
;;;142 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_LED10;
000100 2004 MOVS r0,#4
000102 f8ad0000 STRH r0,[sp,#0]
;;;143 GPIO_Init(GPIO_PORT_LED10, &GPIO_InitStructure);
000106 4669 MOV r1,sp
000108 4813 LDR r0,|L4.344|
00010a f7fffffe BL GPIO_Init
;;;144
;;;145 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_LED11;
00010e 2002 MOVS r0,#2
000110 f8ad0000 STRH r0,[sp,#0]
;;;146 GPIO_Init(GPIO_PORT_LED11, &GPIO_InitStructure);
000114 4669 MOV r1,sp
000116 4810 LDR r0,|L4.344|
000118 f7fffffe BL GPIO_Init
;;;147
;;;148 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_LED12;
00011c 2001 MOVS r0,#1
00011e f8ad0000 STRH r0,[sp,#0]
;;;149 GPIO_Init(GPIO_PORT_LED12, &GPIO_InitStructure);
000122 4669 MOV r1,sp
000124 480c LDR r0,|L4.344|
000126 f7fffffe BL GPIO_Init
;;;150
;;;151 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_LED13;
00012a 2020 MOVS r0,#0x20
00012c f8ad0000 STRH r0,[sp,#0]
;;;152 GPIO_Init(GPIO_PORT_LED13, &GPIO_InitStructure);
000130 4669 MOV r1,sp
000132 480a LDR r0,|L4.348|
000134 f7fffffe BL GPIO_Init
;;;153
;;;154 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_LED14;
000138 2010 MOVS r0,#0x10
00013a f8ad0000 STRH r0,[sp,#0]
;;;155 GPIO_Init(GPIO_PORT_LED14, &GPIO_InitStructure);
00013e 4669 MOV r1,sp
000140 4806 LDR r0,|L4.348|
000142 f7fffffe BL GPIO_Init
;;;156
;;;157 }
000146 bd08 POP {r3,pc}
;;;158
ENDP
|L4.328|
DCD 0x00300200
|L4.332|
DCD 0x40010800
|L4.336|
DCD 0x40011000
|L4.340|
DCD 0x40011400
|L4.344|
DCD 0x40011c00
|L4.348|
DCD 0x40011800
AREA ||i.bsp_IsLedOn||, CODE, READONLY, ALIGN=2
bsp_IsLedOn PROC
;;;335 */
;;;336 uint8_t bsp_IsLedOn(uint8_t _no)
000000 4601 MOV r1,r0
;;;337 {
;;;338 if (_no == 1)
000002 2901 CMP r1,#1
000004 d108 BNE |L5.24|
;;;339 {
;;;340 if ((GPIO_PORT_LED1->ODR & GPIO_PIN_LED1) == 0)
000006 4816 LDR r0,|L5.96|
000008 6800 LDR r0,[r0,#0]
00000a f4004000 AND r0,r0,#0x8000
00000e b908 CBNZ r0,|L5.20|
;;;341 {
;;;342 return 1;
000010 2001 MOVS r0,#1
|L5.18|
;;;343 }
;;;344 return 0;
;;;345 }
;;;346 else if (_no == 2)
;;;347 {
;;;348 if ((GPIO_PORT_LED2->ODR & GPIO_PIN_LED2) == 0)
;;;349 {
;;;350 return 1;
;;;351 }
;;;352 return 0;
;;;353 }
;;;354 else if (_no == 3)
;;;355 {
;;;356 if ((GPIO_PORT_LED3->ODR & GPIO_PIN_LED3) == 0)
;;;357 {
;;;358 return 1;
;;;359 }
;;;360 return 0;
;;;361 }
;;;362 else if (_no == 4)
;;;363 {
;;;364 if ((GPIO_PORT_LED4->ODR & GPIO_PIN_LED4) == 0)
;;;365 {
;;;366 return 1;
;;;367 }
;;;368 return 0;
;;;369 }
;;;370
;;;371 return 0;
;;;372 }
000012 4770 BX lr
|L5.20|
000014 2000 MOVS r0,#0 ;344
000016 e7fc B |L5.18|
|L5.24|
000018 2902 CMP r1,#2 ;346
00001a d108 BNE |L5.46|
00001c 4811 LDR r0,|L5.100|
00001e 68c0 LDR r0,[r0,#0xc] ;348
000020 f4006080 AND r0,r0,#0x400 ;348
000024 b908 CBNZ r0,|L5.42|
000026 2001 MOVS r0,#1 ;350
000028 e7f3 B |L5.18|
|L5.42|
00002a 2000 MOVS r0,#0 ;352
00002c e7f1 B |L5.18|
|L5.46|
00002e 2903 CMP r1,#3 ;354
000030 d108 BNE |L5.68|
000032 480c LDR r0,|L5.100|
000034 68c0 LDR r0,[r0,#0xc] ;356
000036 f4006000 AND r0,r0,#0x800 ;356
00003a b908 CBNZ r0,|L5.64|
00003c 2001 MOVS r0,#1 ;358
00003e e7e8 B |L5.18|
|L5.64|
000040 2000 MOVS r0,#0 ;360
000042 e7e6 B |L5.18|
|L5.68|
000044 2904 CMP r1,#4 ;362
000046 d108 BNE |L5.90|
000048 4806 LDR r0,|L5.100|
00004a 68c0 LDR r0,[r0,#0xc] ;364
00004c f4005080 AND r0,r0,#0x1000 ;364
000050 b908 CBNZ r0,|L5.86|
000052 2001 MOVS r0,#1 ;366
000054 e7dd B |L5.18|
|L5.86|
000056 2000 MOVS r0,#0 ;368
000058 e7db B |L5.18|
|L5.90|
00005a 2000 MOVS r0,#0 ;371
00005c e7d9 B |L5.18|
;;;373
ENDP
00005e 0000 DCW 0x0000
|L5.96|
DCD 0x4001080c
|L5.100|
DCD 0x40011000
AREA ||i.bsp_LedAllOff||, CODE, READONLY, ALIGN=1
bsp_LedAllOff PROC
;;;373
;;;374 void bsp_LedAllOff(void)
000000 b500 PUSH {lr}
;;;375 {
;;;376 bsp_LedOff(1);
000002 2001 MOVS r0,#1
000004 f7fffffe BL bsp_LedOff
;;;377 bsp_LedOff(2);
000008 2002 MOVS r0,#2
00000a f7fffffe BL bsp_LedOff
;;;378 bsp_LedOff(3);
00000e 2003 MOVS r0,#3
000010 f7fffffe BL bsp_LedOff
;;;379 bsp_LedOff(4);
000014 2004 MOVS r0,#4
000016 f7fffffe BL bsp_LedOff
;;;380 bsp_LedOff(5);
00001a 2005 MOVS r0,#5
00001c f7fffffe BL bsp_LedOff
;;;381 bsp_LedOff(6);
000020 2006 MOVS r0,#6
000022 f7fffffe BL bsp_LedOff
;;;382 bsp_LedOff(7);
000026 2007 MOVS r0,#7
000028 f7fffffe BL bsp_LedOff
;;;383 bsp_LedOff(8);
00002c 2008 MOVS r0,#8
00002e f7fffffe BL bsp_LedOff
;;;384 bsp_LedOff(9);
000032 2009 MOVS r0,#9
000034 f7fffffe BL bsp_LedOff
;;;385 bsp_LedOff(10);
000038 200a MOVS r0,#0xa
00003a f7fffffe BL bsp_LedOff
;;;386 bsp_LedOff(11);
00003e 200b MOVS r0,#0xb
000040 f7fffffe BL bsp_LedOff
;;;387 bsp_LedOff(12);
000044 200c MOVS r0,#0xc
000046 f7fffffe BL bsp_LedOff
;;;388 bsp_LedOff(13);
00004a 200d MOVS r0,#0xd
00004c f7fffffe BL bsp_LedOff
;;;389 bsp_LedOff(14);
000050 200e MOVS r0,#0xe
000052 f7fffffe BL bsp_LedOff
;;;390 }
000056 bd00 POP {pc}
;;;391
ENDP
AREA ||i.bsp_LedOff||, CODE, READONLY, ALIGN=2
bsp_LedOff PROC
;;;166 */
;;;167 void bsp_LedOff(uint8_t _no)
000000 1e41 SUBS r1,r0,#1
;;;168 {
;;;169 _no--;
000002 b2c8 UXTB r0,r1
;;;170
;;;171 if (_no == 0)
000004 b920 CBNZ r0,|L7.16|
;;;172 {
;;;173 GPIO_PORT_LED1->BRR = GPIO_PIN_LED1;
000006 f44f4100 MOV r1,#0x8000
00000a 4a29 LDR r2,|L7.176|
00000c 6011 STR r1,[r2,#0]
00000e e04d B |L7.172|
|L7.16|
;;;174 }
;;;175 else if (_no == 1)
000010 2801 CMP r0,#1
000012 d103 BNE |L7.28|
;;;176 {
;;;177 GPIO_PORT_LED2->BRR = GPIO_PIN_LED2;
000014 0281 LSLS r1,r0,#10
000016 4a27 LDR r2,|L7.180|
000018 6151 STR r1,[r2,#0x14]
00001a e047 B |L7.172|
|L7.28|
;;;178 }
;;;179 else if (_no == 2)
00001c 2802 CMP r0,#2
00001e d103 BNE |L7.40|
;;;180 {
;;;181 GPIO_PORT_LED3->BRR = GPIO_PIN_LED3;
000020 0281 LSLS r1,r0,#10
000022 4a24 LDR r2,|L7.180|
000024 6151 STR r1,[r2,#0x14]
000026 e041 B |L7.172|
|L7.40|
;;;182 }
;;;183 else if (_no == 3)
000028 2803 CMP r0,#3
00002a d104 BNE |L7.54|
;;;184 {
;;;185 GPIO_PORT_LED4->BRR = GPIO_PIN_LED4;
00002c f44f5180 MOV r1,#0x1000
000030 4a20 LDR r2,|L7.180|
000032 6151 STR r1,[r2,#0x14]
000034 e03a B |L7.172|
|L7.54|
;;;186 }
;;;187 else if (_no == 4)
000036 2804 CMP r0,#4
000038 d103 BNE |L7.66|
;;;188 {
;;;189 GPIO_PORT_LED5->BRR = GPIO_PIN_LED5;
00003a 2101 MOVS r1,#1
00003c 4a1e LDR r2,|L7.184|
00003e 6011 STR r1,[r2,#0]
000040 e034 B |L7.172|
|L7.66|
;;;190 }
;;;191 else if (_no == 5)
000042 2805 CMP r0,#5
000044 d103 BNE |L7.78|
;;;192 {
;;;193 GPIO_PORT_LED6->BRR = GPIO_PIN_LED6;
000046 2102 MOVS r1,#2
000048 4a1b LDR r2,|L7.184|
00004a 6011 STR r1,[r2,#0]
00004c e02e B |L7.172|
|L7.78|
;;;194 }
;;;195 else if (_no == 6)
00004e 2806 CMP r0,#6
000050 d103 BNE |L7.90|
;;;196 {
;;;197 GPIO_PORT_LED7->BRR = GPIO_PIN_LED7;
000052 2120 MOVS r1,#0x20
000054 4a19 LDR r2,|L7.188|
000056 6011 STR r1,[r2,#0]
000058 e028 B |L7.172|
|L7.90|
;;;198 }
;;;199 else if (_no == 7)
00005a 2807 CMP r0,#7
00005c d103 BNE |L7.102|
;;;200 {
;;;201 GPIO_PORT_LED8->BRR = GPIO_PIN_LED8;
00005e 2110 MOVS r1,#0x10
000060 4a16 LDR r2,|L7.188|
000062 6011 STR r1,[r2,#0]
000064 e022 B |L7.172|
|L7.102|
;;;202 }
;;;203 else if (_no == 8)
000066 2808 CMP r0,#8
000068 d103 BNE |L7.114|
;;;204 {
;;;205 GPIO_PORT_LED9->BRR = GPIO_PIN_LED9;
00006a 2108 MOVS r1,#8
00006c 4a13 LDR r2,|L7.188|
00006e 6011 STR r1,[r2,#0]
000070 e01c B |L7.172|
|L7.114|
;;;206 }
;;;207 else if (_no == 9)
000072 2809 CMP r0,#9
000074 d103 BNE |L7.126|
;;;208 {
;;;209 GPIO_PORT_LED10->BRR = GPIO_PIN_LED10;
000076 2104 MOVS r1,#4
000078 4a10 LDR r2,|L7.188|
00007a 6011 STR r1,[r2,#0]
00007c e016 B |L7.172|
|L7.126|
;;;210 }
;;;211 else if (_no == 10)
00007e 280a CMP r0,#0xa
000080 d103 BNE |L7.138|
;;;212 {
;;;213 GPIO_PORT_LED11->BRR = GPIO_PIN_LED11;
000082 2102 MOVS r1,#2
000084 4a0d LDR r2,|L7.188|
000086 6011 STR r1,[r2,#0]
000088 e010 B |L7.172|
|L7.138|
;;;214 }
;;;215 else if (_no == 11)
00008a 280b CMP r0,#0xb
00008c d103 BNE |L7.150|
;;;216 {
;;;217 GPIO_PORT_LED12->BRR = GPIO_PIN_LED12;
00008e 2101 MOVS r1,#1
000090 4a0a LDR r2,|L7.188|
000092 6011 STR r1,[r2,#0]
000094 e00a B |L7.172|
|L7.150|
;;;218 }
;;;219 else if (_no == 12)
000096 280c CMP r0,#0xc
000098 d103 BNE |L7.162|
;;;220 {
;;;221 GPIO_PORT_LED13->BRR = GPIO_PIN_LED13;
00009a 2120 MOVS r1,#0x20
00009c 4a08 LDR r2,|L7.192|
00009e 6011 STR r1,[r2,#0]
0000a0 e004 B |L7.172|
|L7.162|
;;;222 }
;;;223 else if (_no == 13)
0000a2 280d CMP r0,#0xd
0000a4 d102 BNE |L7.172|
;;;224 {
;;;225 GPIO_PORT_LED14->BRR = GPIO_PIN_LED14;
0000a6 2110 MOVS r1,#0x10
0000a8 4a05 LDR r2,|L7.192|
0000aa 6011 STR r1,[r2,#0]
|L7.172|
;;;226 }
;;;227 }
0000ac 4770 BX lr
;;;228
ENDP
0000ae 0000 DCW 0x0000
|L7.176|
DCD 0x40010814
|L7.180|
DCD 0x40011000
|L7.184|
DCD 0x40011414
|L7.188|
DCD 0x40011c14
|L7.192|
DCD 0x40011814
AREA ||i.bsp_LedOn||, CODE, READONLY, ALIGN=2
bsp_LedOn PROC
;;;236 */
;;;237 void bsp_LedOn(uint8_t _no)
000000 1e41 SUBS r1,r0,#1
;;;238 {
;;;239 _no--;
000002 b2c8 UXTB r0,r1
;;;240
;;;241 if (_no == 0)
000004 b920 CBNZ r0,|L8.16|
;;;242 {
;;;243 GPIO_PORT_LED1->BSRR = GPIO_PIN_LED1;
000006 f44f4100 MOV r1,#0x8000
00000a 4a29 LDR r2,|L8.176|
00000c 6011 STR r1,[r2,#0]
00000e e04d B |L8.172|
|L8.16|
;;;244 }
;;;245 else if (_no == 1)
000010 2801 CMP r0,#1
000012 d103 BNE |L8.28|
;;;246 {
;;;247 GPIO_PORT_LED2->BSRR = GPIO_PIN_LED2;
000014 0281 LSLS r1,r0,#10
000016 4a27 LDR r2,|L8.180|
000018 6111 STR r1,[r2,#0x10]
00001a e047 B |L8.172|
|L8.28|
;;;248 }
;;;249 else if (_no == 2)
00001c 2802 CMP r0,#2
00001e d103 BNE |L8.40|
;;;250 {
;;;251 GPIO_PORT_LED3->BSRR = GPIO_PIN_LED3;
000020 0281 LSLS r1,r0,#10
000022 4a24 LDR r2,|L8.180|
000024 6111 STR r1,[r2,#0x10]
000026 e041 B |L8.172|
|L8.40|
;;;252 }
;;;253 else if (_no == 3)
000028 2803 CMP r0,#3
00002a d104 BNE |L8.54|
;;;254 {
;;;255 GPIO_PORT_LED4->BSRR = GPIO_PIN_LED4;
00002c f44f5180 MOV r1,#0x1000
000030 4a20 LDR r2,|L8.180|
000032 6111 STR r1,[r2,#0x10]
000034 e03a B |L8.172|
|L8.54|
;;;256 }
;;;257 else if (_no == 4)
000036 2804 CMP r0,#4
000038 d103 BNE |L8.66|
;;;258 {
;;;259 GPIO_PORT_LED5->BSRR = GPIO_PIN_LED5;
00003a 2101 MOVS r1,#1
00003c 4a1e LDR r2,|L8.184|
00003e 6011 STR r1,[r2,#0]
000040 e034 B |L8.172|
|L8.66|
;;;260 }
;;;261 else if (_no == 5)
000042 2805 CMP r0,#5
000044 d103 BNE |L8.78|
;;;262 {
;;;263 GPIO_PORT_LED6->BSRR = GPIO_PIN_LED6;
000046 2102 MOVS r1,#2
000048 4a1b LDR r2,|L8.184|
00004a 6011 STR r1,[r2,#0]
00004c e02e B |L8.172|
|L8.78|
;;;264 }
;;;265 else if (_no == 6)
00004e 2806 CMP r0,#6
000050 d103 BNE |L8.90|
;;;266 {
;;;267 GPIO_PORT_LED7->BSRR = GPIO_PIN_LED7;
000052 2120 MOVS r1,#0x20
000054 4a19 LDR r2,|L8.188|
000056 6011 STR r1,[r2,#0]
000058 e028 B |L8.172|
|L8.90|
;;;268 }
;;;269 else if (_no == 7)
00005a 2807 CMP r0,#7
00005c d103 BNE |L8.102|
;;;270 {
;;;271 GPIO_PORT_LED8->BSRR = GPIO_PIN_LED8;
00005e 2110 MOVS r1,#0x10
000060 4a16 LDR r2,|L8.188|
000062 6011 STR r1,[r2,#0]
000064 e022 B |L8.172|
|L8.102|
;;;272 }
;;;273 else if (_no == 8)
000066 2808 CMP r0,#8
000068 d103 BNE |L8.114|
;;;274 {
;;;275 GPIO_PORT_LED9->BSRR = GPIO_PIN_LED9;
00006a 2108 MOVS r1,#8
00006c 4a13 LDR r2,|L8.188|
00006e 6011 STR r1,[r2,#0]
000070 e01c B |L8.172|
|L8.114|
;;;276 }
;;;277 else if (_no == 9)
000072 2809 CMP r0,#9
000074 d103 BNE |L8.126|
;;;278 {
;;;279 GPIO_PORT_LED10->BSRR = GPIO_PIN_LED10;
000076 2104 MOVS r1,#4
000078 4a10 LDR r2,|L8.188|
00007a 6011 STR r1,[r2,#0]
00007c e016 B |L8.172|
|L8.126|
;;;280 }
;;;281 else if (_no == 10)
00007e 280a CMP r0,#0xa
000080 d103 BNE |L8.138|
;;;282 {
;;;283 GPIO_PORT_LED11->BSRR = GPIO_PIN_LED11;
000082 2102 MOVS r1,#2
000084 4a0d LDR r2,|L8.188|
000086 6011 STR r1,[r2,#0]
000088 e010 B |L8.172|
|L8.138|
;;;284 }
;;;285 else if (_no == 11)
00008a 280b CMP r0,#0xb
00008c d103 BNE |L8.150|
;;;286 {
;;;287 GPIO_PORT_LED12->BSRR = GPIO_PIN_LED12;
00008e 2101 MOVS r1,#1
000090 4a0a LDR r2,|L8.188|
000092 6011 STR r1,[r2,#0]
000094 e00a B |L8.172|
|L8.150|
;;;288 }
;;;289 else if (_no == 12)
000096 280c CMP r0,#0xc
000098 d103 BNE |L8.162|
;;;290 {
;;;291 GPIO_PORT_LED13->BSRR = GPIO_PIN_LED13;
00009a 2120 MOVS r1,#0x20
00009c 4a08 LDR r2,|L8.192|
00009e 6011 STR r1,[r2,#0]
0000a0 e004 B |L8.172|
|L8.162|
;;;292 }
;;;293 else if (_no == 13)
0000a2 280d CMP r0,#0xd
0000a4 d102 BNE |L8.172|
;;;294 {
;;;295 GPIO_PORT_LED14->BSRR = GPIO_PIN_LED14;
0000a6 2110 MOVS r1,#0x10
0000a8 4a05 LDR r2,|L8.192|
0000aa 6011 STR r1,[r2,#0]
|L8.172|
;;;296 }
;;;297
;;;298 }
0000ac 4770 BX lr
;;;299
ENDP
0000ae 0000 DCW 0x0000
|L8.176|
DCD 0x40010810
|L8.180|
DCD 0x40011000
|L8.184|
DCD 0x40011410
|L8.188|
DCD 0x40011c10
|L8.192|
DCD 0x40011810
AREA ||i.bsp_LedToggle||, CODE, READONLY, ALIGN=2
bsp_LedToggle PROC
;;;307 */
;;;308 void bsp_LedToggle(uint8_t _no)
000000 2801 CMP r0,#1
;;;309 {
;;;310 if (_no == 1)
000002 d106 BNE |L9.18|
;;;311 {
;;;312 GPIO_PORT_LED1->ODR ^= GPIO_PIN_LED1;
000004 4910 LDR r1,|L9.72|
000006 6809 LDR r1,[r1,#0]
000008 f4814100 EOR r1,r1,#0x8000
00000c 4a0e LDR r2,|L9.72|
00000e 6011 STR r1,[r2,#0]
000010 e019 B |L9.70|
|L9.18|
;;;313 }
;;;314 else if (_no == 2)
000012 2802 CMP r0,#2
000014 d106 BNE |L9.36|
;;;315 {
;;;316 GPIO_PORT_LED2->ODR ^= GPIO_PIN_LED2;
000016 490d LDR r1,|L9.76|
000018 68c9 LDR r1,[r1,#0xc]
00001a f4816180 EOR r1,r1,#0x400
00001e 4a0b LDR r2,|L9.76|
000020 60d1 STR r1,[r2,#0xc]
000022 e010 B |L9.70|
|L9.36|
;;;317 }
;;;318 else if (_no == 3)
000024 2803 CMP r0,#3
000026 d106 BNE |L9.54|
;;;319 {
;;;320 GPIO_PORT_LED3->ODR ^= GPIO_PIN_LED3;
000028 4908 LDR r1,|L9.76|
00002a 68c9 LDR r1,[r1,#0xc]
00002c f4816100 EOR r1,r1,#0x800
000030 4a06 LDR r2,|L9.76|
000032 60d1 STR r1,[r2,#0xc]
000034 e007 B |L9.70|
|L9.54|
;;;321 }
;;;322 else if (_no == 4)
000036 2804 CMP r0,#4
000038 d105 BNE |L9.70|
;;;323 {
;;;324 GPIO_PORT_LED4->ODR ^= GPIO_PIN_LED4;
00003a 4904 LDR r1,|L9.76|
00003c 68c9 LDR r1,[r1,#0xc]
00003e f4815180 EOR r1,r1,#0x1000
000042 4a02 LDR r2,|L9.76|
000044 60d1 STR r1,[r2,#0xc]
|L9.70|
;;;325 }
;;;326 }
000046 4770 BX lr
;;;327
ENDP
|L9.72|
DCD 0x4001080c
|L9.76|
DCD 0x40011000
AREA ||i.bsp_ResSelect||, CODE, READONLY, ALIGN=1
bsp_ResSelect PROC
;;;436
;;;437 void bsp_ResSelect(uint8_t _res)
000000 b510 PUSH {r4,lr}
;;;438 {
000002 4604 MOV r4,r0
;;;439 ResLedAllOff();
000004 f7fffffe BL ResLedAllOff
;;;440 //printf("_res:%d\r\n",_res);
;;;441 bsp_LedOn(_res);
000008 4620 MOV r0,r4
00000a f7fffffe BL bsp_LedOn
;;;442 bsp_SelectRes(_res);
00000e 4620 MOV r0,r4
000010 f7fffffe BL bsp_SelectRes
;;;443 }
000014 bd10 POP {r4,pc}
;;;444
ENDP
AREA ||.data||, DATA, ALIGN=0
s_ucOldCh
000000 ff DCB 0xff
;*** Start embedded assembler ***
#line 1 "..\\..\\User\\bsp\\src\\bsp_led.c"
AREA ||.rev16_text||, CODE
THUMB
EXPORT |__asm___9_bsp_led_c_ba23b041____REV16|
#line 114 "..\\..\\Libraries\\CMSIS\\Include\\core_cmInstr.h"
|__asm___9_bsp_led_c_ba23b041____REV16| PROC
#line 115
rev16 r0, r0
bx lr
ENDP
AREA ||.revsh_text||, CODE
THUMB
EXPORT |__asm___9_bsp_led_c_ba23b041____REVSH|
#line 128
|__asm___9_bsp_led_c_ba23b041____REVSH| PROC
#line 129
revsh r0, r0
bx lr
ENDP
;*** End embedded assembler ***

View File

@@ -0,0 +1,349 @@
; generated by Component: ARM Compiler 5.05 update 1 (build 106) Tool: ArmCC [4d0efa]
; commandline ArmCC [--list --split_sections --debug -c --asm --interleave -o.\flash\obj\bsp_res.o --asm_dir=.\Flash\List\ --list_dir=.\Flash\List\ --depend=.\flash\obj\bsp_res.d --cpu=Cortex-M3 --apcs=interwork -O0 --diag_suppress=9931,870 -I..\..\Libraries\CMSIS\Device\ST\STM32F10x\Include -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Libraries\STM32_USB-FS-Device_Driver\inc -I..\..\Libraries\CMSIS\Include -I..\..\User\bsp -I..\..\User\bsp\inc -I..\..\User\app\inc -IC:\Keil_v5\ARM\RV31\INC -IC:\Keil_v5\ARM\CMSIS\Include -IC:\Keil_v5\ARM\Inc\ST\STM32F10x -D__MICROLIB -D__UVISION_VERSION=514 -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD --omf_browse=.\flash\obj\bsp_res.crf ..\..\User\bsp\src\bsp_res.c]
THUMB
AREA ||i.bsp_InitRes||, CODE, READONLY, ALIGN=2
bsp_InitRes PROC
;;;39 //------------------------------------------------------------------------------
;;;40 void bsp_InitRes(void)
000000 b508 PUSH {r3,lr}
;;;41 {
;;;42 GPIO_InitTypeDef GPIO_InitStructure;
;;;43
;;;44 // ´ò¿ªGPIOʱÖÓ
;;;45 RCC_APB2PeriphClockCmd(RCC_ALL_RES, ENABLE);
000002 2101 MOVS r1,#1
000004 2018 MOVS r0,#0x18
000006 f7fffffe BL RCC_APB2PeriphClockCmd
;;;46
;;;47 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
00000a 2003 MOVS r0,#3
00000c f88d0002 STRB r0,[sp,#2]
;;;48 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /* ÍÆÍìÊä³öģʽ */
000010 2010 MOVS r0,#0x10
000012 f88d0003 STRB r0,[sp,#3]
;;;49
;;;50 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_RES10;
000016 f8ad0000 STRH r0,[sp,#0]
;;;51 GPIO_Init(GPIO_PORT_RES10, &GPIO_InitStructure);
00001a 4669 MOV r1,sp
00001c 480c LDR r0,|L1.80|
00001e f7fffffe BL GPIO_Init
;;;52
;;;53 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_RES51_1;
000022 2020 MOVS r0,#0x20
000024 f8ad0000 STRH r0,[sp,#0]
;;;54 GPIO_Init(GPIO_PORT_RES51_1, &GPIO_InitStructure);
000028 4669 MOV r1,sp
00002a 4809 LDR r0,|L1.80|
00002c f7fffffe BL GPIO_Init
;;;55
;;;56 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_RES51_2;
000030 2001 MOVS r0,#1
000032 f8ad0000 STRH r0,[sp,#0]
;;;57 GPIO_Init(GPIO_PORT_RES51_2, &GPIO_InitStructure);
000036 4669 MOV r1,sp
000038 4806 LDR r0,|L1.84|
00003a f7fffffe BL GPIO_Init
;;;58
;;;59 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_RES100;
00003e 2002 MOVS r0,#2
000040 f8ad0000 STRH r0,[sp,#0]
;;;60 GPIO_Init(GPIO_PORT_RES100, &GPIO_InitStructure);
000044 4669 MOV r1,sp
000046 4803 LDR r0,|L1.84|
000048 f7fffffe BL GPIO_Init
;;;61 }
00004c bd08 POP {r3,pc}
;;;62
ENDP
00004e 0000 DCW 0x0000
|L1.80|
DCD 0x40011000
|L1.84|
DCD 0x40010c00
AREA ||i.bsp_Port100_Output||, CODE, READONLY, ALIGN=2
bsp_Port100_Output PROC
;;;119 //------------------------------------------------------------------------------
;;;120 void bsp_Port100_Output(uint8_t _status)
000000 b918 CBNZ r0,|L2.10|
;;;121 {
;;;122 if(_status==0)
;;;123 {
;;;124 GPIO_PORT_RES100->BRR = GPIO_PIN_RES100;
000002 2102 MOVS r1,#2
000004 4a04 LDR r2,|L2.24|
000006 6011 STR r1,[r2,#0]
000008 e005 B |L2.22|
|L2.10|
;;;125 }
;;;126 else if(_status==1)
00000a 2801 CMP r0,#1
00000c d103 BNE |L2.22|
;;;127 {
;;;128 GPIO_PORT_RES100->BSRR = GPIO_PIN_RES100;
00000e 2102 MOVS r1,#2
000010 4a01 LDR r2,|L2.24|
000012 1f12 SUBS r2,r2,#4
000014 6011 STR r1,[r2,#0]
|L2.22|
;;;129 }
;;;130 }
000016 4770 BX lr
;;;131
ENDP
|L2.24|
DCD 0x40010c14
AREA ||i.bsp_Port10_Output||, CODE, READONLY, ALIGN=2
bsp_Port10_Output PROC
;;;68 //------------------------------------------------------------------------------
;;;69 void bsp_Port10_Output(uint8_t _status)
000000 b918 CBNZ r0,|L3.10|
;;;70 {
;;;71 if(_status==0)
;;;72 {
;;;73 GPIO_PORT_RES10->BRR = GPIO_PIN_RES10;
000002 2110 MOVS r1,#0x10
000004 4a04 LDR r2,|L3.24|
000006 6151 STR r1,[r2,#0x14]
000008 e004 B |L3.20|
|L3.10|
;;;74 }
;;;75 else if(_status==1)
00000a 2801 CMP r0,#1
00000c d102 BNE |L3.20|
;;;76 {
;;;77 GPIO_PORT_RES10->BSRR = GPIO_PIN_RES10;
00000e 2110 MOVS r1,#0x10
000010 4a01 LDR r2,|L3.24|
000012 6111 STR r1,[r2,#0x10]
|L3.20|
;;;78 }
;;;79 }
000014 4770 BX lr
;;;80 //------------------------------------------------------------------------------
ENDP
000016 0000 DCW 0x0000
|L3.24|
DCD 0x40011000
AREA ||i.bsp_Port51_1_Output||, CODE, READONLY, ALIGN=2
bsp_Port51_1_Output PROC
;;;85 //------------------------------------------------------------------------------
;;;86 void bsp_Port51_1_Output(uint8_t _status)
000000 b918 CBNZ r0,|L4.10|
;;;87 {
;;;88 if(_status==0)
;;;89 {
;;;90 GPIO_PORT_RES51_1->BRR = GPIO_PIN_RES51_1;
000002 2120 MOVS r1,#0x20
000004 4a04 LDR r2,|L4.24|
000006 6151 STR r1,[r2,#0x14]
000008 e004 B |L4.20|
|L4.10|
;;;91 }
;;;92 else if(_status==1)
00000a 2801 CMP r0,#1
00000c d102 BNE |L4.20|
;;;93 {
;;;94 GPIO_PORT_RES51_1->BSRR = GPIO_PIN_RES51_1;
00000e 2120 MOVS r1,#0x20
000010 4a01 LDR r2,|L4.24|
000012 6111 STR r1,[r2,#0x10]
|L4.20|
;;;95 }
;;;96 }
000014 4770 BX lr
;;;97 //------------------------------------------------------------------------------
ENDP
000016 0000 DCW 0x0000
|L4.24|
DCD 0x40011000
AREA ||i.bsp_Port51_2_Output||, CODE, READONLY, ALIGN=2
bsp_Port51_2_Output PROC
;;;102 //------------------------------------------------------------------------------
;;;103 void bsp_Port51_2_Output(uint8_t _status)
000000 b918 CBNZ r0,|L5.10|
;;;104 {
;;;105 if(_status==0)
;;;106 {
;;;107 GPIO_PORT_RES51_2->BRR = GPIO_PIN_RES51_2;
000002 2101 MOVS r1,#1
000004 4a04 LDR r2,|L5.24|
000006 6011 STR r1,[r2,#0]
000008 e005 B |L5.22|
|L5.10|
;;;108 }
;;;109 else if(_status==1)
00000a 2801 CMP r0,#1
00000c d103 BNE |L5.22|
;;;110 {
;;;111 GPIO_PORT_RES51_2->BSRR = GPIO_PIN_RES51_2;
00000e 2101 MOVS r1,#1
000010 4a01 LDR r2,|L5.24|
000012 1f12 SUBS r2,r2,#4
000014 6011 STR r1,[r2,#0]
|L5.22|
;;;112 }
;;;113 }
000016 4770 BX lr
;;;114 //------------------------------------------------------------------------------
ENDP
|L5.24|
DCD 0x40010c14
AREA ||i.bsp_SelectRes||, CODE, READONLY, ALIGN=1
bsp_SelectRes PROC
;;;137 //------------------------------------------------------------------------------
;;;138 void bsp_SelectRes(uint8_t _res)
000000 b500 PUSH {lr}
;;;139 {
000002 4603 MOV r3,r0
;;;140 switch(_res)
000004 1fd8 SUBS r0,r3,#7
000006 2808 CMP r0,#8
000008 d26d BCS |L6.230|
00000a e8dff000 TBB [pc,r0]
00000e 0411 DCB 0x04,0x11
000010 1e2b3845 DCB 0x1e,0x2b,0x38,0x45
000014 525f DCB 0x52,0x5f
;;;141 {
;;;142 case RES_0:
;;;143 bsp_Port10_Output(0);bsp_Port51_1_Output(0);bsp_Port51_2_Output(0);bsp_Port100_Output(0); break;
000016 2000 MOVS r0,#0
000018 f7fffffe BL bsp_Port10_Output
00001c 2000 MOVS r0,#0
00001e f7fffffe BL bsp_Port51_1_Output
000022 2000 MOVS r0,#0
000024 f7fffffe BL bsp_Port51_2_Output
000028 2000 MOVS r0,#0
00002a f7fffffe BL bsp_Port100_Output
00002e e05b B |L6.232|
;;;144 case RES_10:
;;;145 bsp_Port10_Output(1);bsp_Port51_1_Output(0);bsp_Port51_2_Output(0);bsp_Port100_Output(0); break;
000030 2001 MOVS r0,#1
000032 f7fffffe BL bsp_Port10_Output
000036 2000 MOVS r0,#0
000038 f7fffffe BL bsp_Port51_1_Output
00003c 2000 MOVS r0,#0
00003e f7fffffe BL bsp_Port51_2_Output
000042 2000 MOVS r0,#0
000044 f7fffffe BL bsp_Port100_Output
000048 e04e B |L6.232|
;;;146 case RES_61:
;;;147 bsp_Port10_Output(1);bsp_Port51_1_Output(1);bsp_Port51_2_Output(0);bsp_Port100_Output(0); break;
00004a 2001 MOVS r0,#1
00004c f7fffffe BL bsp_Port10_Output
000050 2001 MOVS r0,#1
000052 f7fffffe BL bsp_Port51_1_Output
000056 2000 MOVS r0,#0
000058 f7fffffe BL bsp_Port51_2_Output
00005c 2000 MOVS r0,#0
00005e f7fffffe BL bsp_Port100_Output
000062 e041 B |L6.232|
;;;148 case RES_100:
;;;149 bsp_Port10_Output(0);bsp_Port51_1_Output(0);bsp_Port51_2_Output(0);bsp_Port100_Output(1); break;
000064 2000 MOVS r0,#0
000066 f7fffffe BL bsp_Port10_Output
00006a 2000 MOVS r0,#0
00006c f7fffffe BL bsp_Port51_1_Output
000070 2000 MOVS r0,#0
000072 f7fffffe BL bsp_Port51_2_Output
000076 2001 MOVS r0,#1
000078 f7fffffe BL bsp_Port100_Output
00007c e034 B |L6.232|
;;;150 case RES_110:
;;;151 bsp_Port10_Output(1);bsp_Port51_1_Output(0);bsp_Port51_2_Output(0);bsp_Port100_Output(1); break;
00007e 2001 MOVS r0,#1
000080 f7fffffe BL bsp_Port10_Output
000084 2000 MOVS r0,#0
000086 f7fffffe BL bsp_Port51_1_Output
00008a 2000 MOVS r0,#0
00008c f7fffffe BL bsp_Port51_2_Output
000090 2001 MOVS r0,#1
000092 f7fffffe BL bsp_Port100_Output
000096 e027 B |L6.232|
;;;152 case RES_151:
;;;153 bsp_Port10_Output(0);bsp_Port51_1_Output(1);bsp_Port51_2_Output(0);bsp_Port100_Output(1); break;
000098 2000 MOVS r0,#0
00009a f7fffffe BL bsp_Port10_Output
00009e 2001 MOVS r0,#1
0000a0 f7fffffe BL bsp_Port51_1_Output
0000a4 2000 MOVS r0,#0
0000a6 f7fffffe BL bsp_Port51_2_Output
0000aa 2001 MOVS r0,#1
0000ac f7fffffe BL bsp_Port100_Output
0000b0 e01a B |L6.232|
;;;154 case RES_202:
;;;155 bsp_Port10_Output(0);bsp_Port51_1_Output(1);bsp_Port51_2_Output(1);bsp_Port100_Output(1); break;
0000b2 2000 MOVS r0,#0
0000b4 f7fffffe BL bsp_Port10_Output
0000b8 2001 MOVS r0,#1
0000ba f7fffffe BL bsp_Port51_1_Output
0000be 2001 MOVS r0,#1
0000c0 f7fffffe BL bsp_Port51_2_Output
0000c4 2001 MOVS r0,#1
0000c6 f7fffffe BL bsp_Port100_Output
0000ca e00d B |L6.232|
;;;156 case RES_212:
;;;157 bsp_Port10_Output(1);bsp_Port51_1_Output(1);bsp_Port51_2_Output(1);bsp_Port100_Output(1); break;
0000cc 2001 MOVS r0,#1
0000ce f7fffffe BL bsp_Port10_Output
0000d2 2001 MOVS r0,#1
0000d4 f7fffffe BL bsp_Port51_1_Output
0000d8 2001 MOVS r0,#1
0000da f7fffffe BL bsp_Port51_2_Output
0000de 2001 MOVS r0,#1
0000e0 f7fffffe BL bsp_Port100_Output
0000e4 e000 B |L6.232|
|L6.230|
;;;158 default: break;
0000e6 bf00 NOP
|L6.232|
0000e8 bf00 NOP ;143
;;;159 }
;;;160 }
0000ea bd00 POP {pc}
;;;161
ENDP
;*** Start embedded assembler ***
#line 1 "..\\..\\User\\bsp\\src\\bsp_res.c"
AREA ||.rev16_text||, CODE
THUMB
EXPORT |__asm___9_bsp_res_c_2f48bbfc____REV16|
#line 114 "..\\..\\Libraries\\CMSIS\\Include\\core_cmInstr.h"
|__asm___9_bsp_res_c_2f48bbfc____REV16| PROC
#line 115
rev16 r0, r0
bx lr
ENDP
AREA ||.revsh_text||, CODE
THUMB
EXPORT |__asm___9_bsp_res_c_2f48bbfc____REVSH|
#line 128
|__asm___9_bsp_res_c_2f48bbfc____REVSH| PROC
#line 129
revsh r0, r0
bx lr
ENDP
;*** End embedded assembler ***

View File

@@ -0,0 +1,562 @@
; generated by Component: ARM Compiler 5.06 update 7 (build 960) Tool: ArmCC [4d365d]
; commandline ArmCC [--list --split_sections --debug -c --asm --interleave -o.\flash\obj\bsp_step_moto.o --asm_dir=.\Flash\List\ --list_dir=.\Flash\List\ --depend=.\flash\obj\bsp_step_moto.d --cpu=Cortex-M3 --apcs=interwork -O0 --diag_suppress=9931,870 -I..\..\Libraries\CMSIS\Device\ST\STM32F10x\Include -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Libraries\STM32_USB-FS-Device_Driver\inc -I..\..\Libraries\CMSIS\Include -I..\..\User\bsp -I..\..\User\bsp\inc -I..\..\User\app\inc -I..\..\User -IC:\Users\w1619\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__MICROLIB -D__UVISION_VERSION=538 -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD --omf_browse=.\flash\obj\bsp_step_moto.crf ..\..\User\bsp\src\bsp_step_moto.c]
THUMB
AREA ||i.MOTO_ISR||, CODE, READONLY, ALIGN=2
MOTO_ISR PROC
;;;182 //------------------------------------------------------------------------------
;;;183 void MOTO_ISR(void)
000000 e92d41f0 PUSH {r4-r8,lr}
;;;184 {
;;;185 if (g_tMoto.Running == 0)
000004 483c LDR r0,|L1.248|
000006 7e00 LDRB r0,[r0,#0x18] ; g_tMoto
000008 b908 CBNZ r0,|L1.14|
|L1.10|
;;;186 {
;;;187 return;
;;;188 }
;;;189 // BEEP_KeyTone();
;;;190
;;;191 // g_tMoto.Pos = 0;
;;;192 switch (g_tMoto.Pos)
;;;193 {
;;;194 case 0:
;;;195 {
;;;196 g_tMoto.Pos = 1;
;;;197 MOTO_STEP_1();
;;;198 g_tMoto.prev_pv_pulse = g_tMoto.pv_pulse;
;;;199 if (g_tMoto.pv_pulse < g_tMoto.sv_pulse)
;;;200 {
;;;201 g_tMoto.pv_pulse++;
;;;202 }
;;;203 else if (g_tMoto.pv_pulse > g_tMoto.sv_pulse)
;;;204 {
;;;205 g_tMoto.pv_pulse--;
;;;206 }
;;;207 // 检测过零点pv_pulse 每跨越一个 STEP_PER_LAP即每转一圈翻转PA6
;;;208 if ((g_tMoto.prev_pv_pulse / STEP_PER_LAP) != (g_tMoto.pv_pulse / STEP_PER_LAP))
;;;209 {
;;;210 ZERO_SIG_TOGGLE();
;;;211 }
;;;212 break;
;;;213 }
;;;214
;;;215 case 1:
;;;216 {
;;;217 g_tMoto.Pos = 0;
;;;218 MOTO_STEP_0();
;;;219 g_tMoto.CurrentStep++;
;;;220 if (g_tMoto.pv_pulse == g_tMoto.sv_pulse)
;;;221 {
;;;222 MOTO_Stop();
;;;223 TIM_ClearITPendingBit(TIM6, TIM_IT_Update); /* 清除中断标志位 */
;;;224 }
;;;225 break;
;;;226 }
;;;227 default:
;;;228 break;
;;;229 }
;;;230 }
00000a e8bd81f0 POP {r4-r8,pc}
|L1.14|
00000e 483a LDR r0,|L1.248|
000010 7e40 LDRB r0,[r0,#0x19] ;192 ; g_tMoto
000012 b110 CBZ r0,|L1.26|
000014 2801 CMP r0,#1 ;192
000016 d16b BNE |L1.240|
000018 e04e B |L1.184|
|L1.26|
00001a 2001 MOVS r0,#1 ;196
00001c 4936 LDR r1,|L1.248|
00001e 7648 STRB r0,[r1,#0x19] ;196
000020 2080 MOVS r0,#0x80 ;197
000022 4936 LDR r1,|L1.252|
000024 6108 STR r0,[r1,#0x10] ;197
000026 4834 LDR r0,|L1.248|
000028 e9d01008 LDRD r1,r0,[r0,#0x20] ;198
00002c 4a32 LDR r2,|L1.248|
00002e e9c2100c STRD r1,r0,[r2,#0x30] ;198
000032 4610 MOV r0,r2 ;199
000034 e9d03008 LDRD r3,r0,[r0,#0x20] ;199
000038 e9d2120a LDRD r1,r2,[r2,#0x28] ;199
00003c 1a59 SUBS r1,r3,r1 ;199
00003e 4190 SBCS r0,r0,r2 ;199
000040 da09 BGE |L1.86|
000042 482d LDR r0,|L1.248|
000044 e9d01008 LDRD r1,r0,[r0,#0x20] ;201
000048 1c49 ADDS r1,r1,#1 ;201
00004a f1400000 ADC r0,r0,#0 ;201
00004e 4a2a LDR r2,|L1.248|
000050 e9c21008 STRD r1,r0,[r2,#0x20] ;201
000054 e011 B |L1.122|
|L1.86|
000056 4828 LDR r0,|L1.248|
000058 e9d0200a LDRD r2,r0,[r0,#0x28] ;203
00005c 4926 LDR r1,|L1.248|
00005e e9d13108 LDRD r3,r1,[r1,#0x20] ;203
000062 1ad2 SUBS r2,r2,r3 ;203
000064 4188 SBCS r0,r0,r1 ;203
000066 da08 BGE |L1.122|
000068 4823 LDR r0,|L1.248|
00006a e9d01008 LDRD r1,r0,[r0,#0x20] ;205
00006e 1e49 SUBS r1,r1,#1 ;205
000070 f1600000 SBC r0,r0,#0 ;205
000074 4a20 LDR r2,|L1.248|
000076 e9c21008 STRD r1,r0,[r2,#0x20] ;205
|L1.122|
00007a 481f LDR r0,|L1.248|
00007c f242120d MOV r2,#0x210d ;208
000080 2300 MOVS r3,#0 ;208
000082 e9d0410c LDRD r4,r1,[r0,#0x30] ;208
000086 4620 MOV r0,r4 ;208
000088 f7fffffe BL __aeabi_ldivmod
00008c 4606 MOV r6,r0 ;208
00008e 460f MOV r7,r1 ;208
000090 4819 LDR r0,|L1.248|
000092 f242120d MOV r2,#0x210d ;208
000096 2300 MOVS r3,#0 ;208
000098 e9d04108 LDRD r4,r1,[r0,#0x20] ;208
00009c 4620 MOV r0,r4 ;208
00009e f7fffffe BL __aeabi_ldivmod
0000a2 4046 EORS r6,r6,r0 ;208
0000a4 404f EORS r7,r7,r1 ;208
0000a6 433e ORRS r6,r6,r7 ;208
0000a8 d005 BEQ |L1.182|
0000aa 4815 LDR r0,|L1.256|
0000ac 6800 LDR r0,[r0,#0] ;210
0000ae f0800040 EOR r0,r0,#0x40 ;210
0000b2 4913 LDR r1,|L1.256|
0000b4 6008 STR r0,[r1,#0] ;210
|L1.182|
0000b6 e01c B |L1.242|
|L1.184|
0000b8 2000 MOVS r0,#0 ;217
0000ba 490f LDR r1,|L1.248|
0000bc 7648 STRB r0,[r1,#0x19] ;217
0000be 2080 MOVS r0,#0x80 ;218
0000c0 490e LDR r1,|L1.252|
0000c2 6148 STR r0,[r1,#0x14] ;218
0000c4 480c LDR r0,|L1.248|
0000c6 6900 LDR r0,[r0,#0x10] ;219 ; g_tMoto
0000c8 1c40 ADDS r0,r0,#1 ;219
0000ca 490b LDR r1,|L1.248|
0000cc 6108 STR r0,[r1,#0x10] ;219 ; g_tMoto
0000ce 4608 MOV r0,r1 ;220
0000d0 e9d01008 LDRD r1,r0,[r0,#0x20] ;220
0000d4 4a08 LDR r2,|L1.248|
0000d6 e9d2320a LDRD r3,r2,[r2,#0x28] ;220
0000da 4059 EORS r1,r1,r3 ;220
0000dc 4050 EORS r0,r0,r2 ;220
0000de 4301 ORRS r1,r1,r0 ;220
0000e0 d105 BNE |L1.238|
0000e2 f7fffffe BL MOTO_Stop
0000e6 2101 MOVS r1,#1 ;223
0000e8 4806 LDR r0,|L1.260|
0000ea f7fffffe BL TIM_ClearITPendingBit
|L1.238|
0000ee e000 B |L1.242|
|L1.240|
0000f0 bf00 NOP ;228
|L1.242|
0000f2 bf00 NOP ;212
0000f4 bf00 NOP
0000f6 e788 B |L1.10|
;;;231
ENDP
|L1.248|
DCD g_tMoto
|L1.252|
DCD 0x40011000
|L1.256|
DCD 0x4001080c
|L1.260|
DCD 0x40001000
AREA ||i.MOTO_Pause||, CODE, READONLY, ALIGN=2
MOTO_Pause PROC
;;;148 //------------------------------------------------------------------------------
;;;149 void MOTO_Pause(void)
000000 b510 PUSH {r4,lr}
;;;150 {
;;;151 // void bsp_SetTIMforInt(TIM_TypeDef* TIMx, uint32_t _ulFreq, uint8_t _PreemptionPriority, uint8_t _SubPriority)
;;;152 bsp_SetTIMforInt(TIM6, 0, 0, 0);
000002 2300 MOVS r3,#0
000004 461a MOV r2,r3
000006 4619 MOV r1,r3
000008 4804 LDR r0,|L2.28|
00000a f7fffffe BL bsp_SetTIMforInt
;;;153 g_tMoto.Running = 0;
00000e 2000 MOVS r0,#0
000010 4903 LDR r1,|L2.32|
000012 7608 STRB r0,[r1,#0x18]
;;;154 MOTO_STEP_0();
000014 2080 MOVS r0,#0x80
000016 4903 LDR r1,|L2.36|
000018 6148 STR r0,[r1,#0x14]
;;;155 // bsp_drv8880_enable_config(DISABLE);
;;;156 }
00001a bd10 POP {r4,pc}
;;;157
ENDP
|L2.28|
DCD 0x40001000
|L2.32|
DCD g_tMoto
|L2.36|
DCD 0x40011000
AREA ||i.MOTO_RoudToStep||, CODE, READONLY, ALIGN=1
MOTO_RoudToStep PROC
;;;163 //------------------------------------------------------------------------------
;;;164 uint32_t MOTO_RoudToStep(void)
000000 f44f6080 MOV r0,#0x400
;;;165 {
;;;166 uint32_t steps;
;;;167
;;;168 /* 28BYJ48 电机步距角度 = 5.625/64度.
;;;169 一圈 360度
;;;170 step = 360 / (5.625 / 64)
;;;171 */
;;;172 steps = (360 * 64 * 1000 / 4) / 5625; // 4096步
;;;173
;;;174 return steps;
;;;175 }
000004 4770 BX lr
;;;176
ENDP
AREA ||i.MOTO_ShangeSpeed||, CODE, READONLY, ALIGN=2
MOTO_ShangeSpeed PROC
;;;101 //------------------------------------------------------------------------------
;;;102 void MOTO_ShangeSpeed(uint32_t _speed)
000000 b510 PUSH {r4,lr}
;;;103 {
000002 4604 MOV r4,r0
;;;104 g_tMoto.StepFreq = _speed;
000004 4805 LDR r0,|L4.28|
000006 6044 STR r4,[r0,#4] ; g_tMoto
;;;105
;;;106 if (g_tMoto.Running == 1)
000008 7e00 LDRB r0,[r0,#0x18] ; g_tMoto
00000a 2801 CMP r0,#1
00000c d105 BNE |L4.26|
;;;107 {
;;;108 // void bsp_SetTIMforInt(TIM_TypeDef* TIMx, uint32_t _ulFreq, uint8_t _PreemptionPriority, uint8_t _SubPriority)
;;;109 bsp_SetTIMforInt(TIM6, _speed, 2, 2);
00000e 2302 MOVS r3,#2
000010 461a MOV r2,r3
000012 4621 MOV r1,r4
000014 4802 LDR r0,|L4.32|
000016 f7fffffe BL bsp_SetTIMforInt
|L4.26|
;;;110 }
;;;111 }
00001a bd10 POP {r4,pc}
;;;112
ENDP
|L4.28|
DCD g_tMoto
|L4.32|
DCD 0x40001000
AREA ||i.MOTO_Start||, CODE, READONLY, ALIGN=2
MOTO_Start PROC
;;;67 //------------------------------------------------------------------------------
;;;68 void MOTO_Start(uint32_t _speed, uint8_t _dir, int32_t _stpes)
000000 b570 PUSH {r4-r6,lr}
;;;69 {
000002 4604 MOV r4,r0
000004 460d MOV r5,r1
000006 4616 MOV r6,r2
;;;70 bsp_drv8880_enable_config(ENABLE);
000008 2001 MOVS r0,#1
00000a f7fffffe BL bsp_drv8880_enable_config
;;;71 g_tMoto.Dir = _dir;
00000e 480f LDR r0,|L5.76|
000010 7005 STRB r5,[r0,#0]
;;;72 g_tMoto.StepFreq = _speed;
000012 6044 STR r4,[r0,#4] ; g_tMoto
;;;73 g_tMoto.StepCount = _stpes;
000014 6086 STR r6,[r0,#8] ; g_tMoto
;;;74 g_tMoto.AllStep = _stpes;
000016 60c6 STR r6,[r0,#0xc] ; g_tMoto
;;;75 g_tMoto.CurrentStep = 0;
000018 2000 MOVS r0,#0
00001a 490c LDR r1,|L5.76|
00001c 6108 STR r0,[r1,#0x10] ; g_tMoto
;;;76 g_tMoto.Running = 1;
00001e 2001 MOVS r0,#1
000020 7608 STRB r0,[r1,#0x18]
;;;77
;;;78 // void bsp_SetTIMforInt(TIM_TypeDef* TIMx, uint32_t _ulFreq, uint8_t _PreemptionPriority, uint8_t _SubPriority)
;;;79 // bsp_SetTIMforInt(TIM6, _speed*2, 2, 2);
;;;80 switch (_dir)
000022 b12d CBZ r5,|L5.48|
000024 2d01 CMP r5,#1
000026 d107 BNE |L5.56|
;;;81 {
;;;82 case 1:
;;;83 bsp_drv8880_config_dir(DIR_CW);
000028 2000 MOVS r0,#0
00002a f7fffffe BL bsp_drv8880_config_dir
;;;84 break;
00002e e004 B |L5.58|
|L5.48|
;;;85 case 0:
;;;86 bsp_drv8880_config_dir(DIR_CCW);
000030 2001 MOVS r0,#1
000032 f7fffffe BL bsp_drv8880_config_dir
;;;87 break;
000036 e000 B |L5.58|
|L5.56|
;;;88 default:
;;;89 break;
000038 bf00 NOP
|L5.58|
00003a bf00 NOP ;84
;;;90 }
;;;91 bsp_SetTIMforInt(TIM6, _speed * 2, 0, 0);
00003c 0061 LSLS r1,r4,#1
00003e 2300 MOVS r3,#0
000040 461a MOV r2,r3
000042 4803 LDR r0,|L5.80|
000044 f7fffffe BL bsp_SetTIMforInt
;;;92 }
000048 bd70 POP {r4-r6,pc}
;;;93
ENDP
00004a 0000 DCW 0x0000
|L5.76|
DCD g_tMoto
|L5.80|
DCD 0x40001000
AREA ||i.MOTO_Stop||, CODE, READONLY, ALIGN=2
MOTO_Stop PROC
;;;128 //------------------------------------------------------------------------------
;;;129 void MOTO_Stop(void)
000000 b510 PUSH {r4,lr}
;;;130 {
;;;131 // void bsp_SetTIMforInt(TIM_TypeDef* TIMx, uint32_t _ulFreq, uint8_t _PreemptionPriority, uint8_t _SubPriority)
;;;132 bsp_SetTIMforInt(TIM6, 0, 0, 0);
000002 2300 MOVS r3,#0
000004 461a MOV r2,r3
000006 4619 MOV r1,r3
000008 4808 LDR r0,|L6.44|
00000a f7fffffe BL bsp_SetTIMforInt
;;;133 g_tMoto.Running = 0;
00000e 2000 MOVS r0,#0
000010 4907 LDR r1,|L6.48|
000012 7608 STRB r0,[r1,#0x18]
;;;134
;;;135 MOTO_STEP_0();
000014 2080 MOVS r0,#0x80
000016 4907 LDR r1,|L6.52|
000018 6148 STR r0,[r1,#0x14]
;;;136 // bsp_drv8880_enable_config(DISABLE);
;;;137 if (g_tTube.state == SEARCH)
00001a 4807 LDR r0,|L6.56|
00001c 7ac0 LDRB r0,[r0,#0xb] ; g_tTube
00001e 2802 CMP r0,#2
000020 d102 BNE |L6.40|
;;;138 {
;;;139 g_tTube.state = IDLE;
000022 2000 MOVS r0,#0
000024 4904 LDR r1,|L6.56|
000026 72c8 STRB r0,[r1,#0xb]
|L6.40|
;;;140 }
;;;141 }
000028 bd10 POP {r4,pc}
;;;142
ENDP
00002a 0000 DCW 0x0000
|L6.44|
DCD 0x40001000
|L6.48|
DCD g_tMoto
|L6.52|
DCD 0x40011000
|L6.56|
DCD g_tTube
AREA ||i.MOTO_ZorePos||, CODE, READONLY, ALIGN=2
MOTO_ZorePos PROC
;;;112
;;;113 void MOTO_ZorePos(void)
000000 b510 PUSH {r4,lr}
;;;114 {
;;;115 MOTO_Stop();
000002 f7fffffe BL MOTO_Stop
;;;116 g_tMoto.sv_pulse = 0;
000006 2100 MOVS r1,#0
000008 4a08 LDR r2,|L7.44|
00000a 6291 STR r1,[r2,#0x28] ; g_tMoto
00000c 62d1 STR r1,[r2,#0x2c] ; g_tMoto
;;;117 g_tMoto.pv_pulse = 0;
00000e 6211 STR r1,[r2,#0x20] ; g_tMoto
000010 6251 STR r1,[r2,#0x24] ; g_tMoto
;;;118 g_tMoto.prev_pv_pulse = 0;
000012 6311 STR r1,[r2,#0x30] ; g_tMoto
000014 6351 STR r1,[r2,#0x34] ; g_tMoto
;;;119 GPIO_PORT_ZERO_SIG->BRR = GPIO_PIN_ZERO_SIG; // 归零时 PA6 输出低
000016 2040 MOVS r0,#0x40
000018 4905 LDR r1,|L7.48|
00001a 6008 STR r0,[r1,#0]
;;;120 BEEP_Start(1500, 5, 5, 3);
00001c 2303 MOVS r3,#3
00001e 2205 MOVS r2,#5
000020 4611 MOV r1,r2
000022 f24050dc MOV r0,#0x5dc
000026 f7fffffe BL BEEP_Start
;;;121 }
00002a bd10 POP {r4,pc}
;;;122
ENDP
|L7.44|
DCD g_tMoto
|L7.48|
DCD 0x40010814
AREA ||i.TIM6_IRQHandler||, CODE, READONLY, ALIGN=2
TIM6_IRQHandler PROC
;;;238 #ifndef TIM6_ISR_MOVE_OUT /* bsp.h 中定义此行,表示本函数移到 stam32fxxx_it.c。 避免重复定义 */
;;;239 void TIM6_IRQHandler(void)
000000 b510 PUSH {r4,lr}
;;;240 {
;;;241 if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET)
000002 2101 MOVS r1,#1
000004 4805 LDR r0,|L8.28|
000006 f7fffffe BL TIM_GetITStatus
00000a b128 CBZ r0,|L8.24|
;;;242 {
;;;243 MOTO_ISR(); /* 中断服务程序 */
00000c f7fffffe BL MOTO_ISR
;;;244
;;;245 TIM_ClearITPendingBit(TIM6, TIM_IT_Update); /* 清除中断标志位 */
000010 2101 MOVS r1,#1
000012 4802 LDR r0,|L8.28|
000014 f7fffffe BL TIM_ClearITPendingBit
|L8.24|
;;;246 }
;;;247 }
000018 bd10 POP {r4,pc}
;;;248 #endif
ENDP
00001a 0000 DCW 0x0000
|L8.28|
DCD 0x40001000
AREA ||i.bsp_InitStepMoto||, CODE, READONLY, ALIGN=2
bsp_InitStepMoto PROC
;;;37 //------------------------------------------------------------------------------
;;;38 void bsp_InitStepMoto(void)
000000 b508 PUSH {r3,lr}
;;;39 {
;;;40 GPIO_InitTypeDef GPIO_InitStructure;
;;;41
;;;42 // 初始化 PA6 为零位信号输出引脚
;;;43 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
000002 2101 MOVS r1,#1
000004 2004 MOVS r0,#4
000006 f7fffffe BL RCC_APB2PeriphClockCmd
;;;44 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_ZERO_SIG;
00000a 2040 MOVS r0,#0x40
00000c f8ad0000 STRH r0,[sp,#0]
;;;45 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
000010 2010 MOVS r0,#0x10
000012 f88d0003 STRB r0,[sp,#3]
;;;46 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
000016 2003 MOVS r0,#3
000018 f88d0002 STRB r0,[sp,#2]
;;;47 GPIO_Init(GPIO_PORT_ZERO_SIG, &GPIO_InitStructure);
00001c 4669 MOV r1,sp
00001e 480b LDR r0,|L9.76|
000020 f7fffffe BL GPIO_Init
;;;48 GPIO_PORT_ZERO_SIG->BRR = GPIO_PIN_ZERO_SIG; // 默认输出低电平
000024 2040 MOVS r0,#0x40
000026 4909 LDR r1,|L9.76|
000028 3114 ADDS r1,r1,#0x14
00002a 6008 STR r0,[r1,#0]
;;;49
;;;50 g_tMoto.Dir = 0;
00002c 2000 MOVS r0,#0
00002e 4908 LDR r1,|L9.80|
000030 7008 STRB r0,[r1,#0]
;;;51 g_tMoto.StepFreq = 0;
000032 6048 STR r0,[r1,#4] ; g_tMoto
;;;52 g_tMoto.StepCount = 0;
000034 6088 STR r0,[r1,#8] ; g_tMoto
;;;53 g_tMoto.Running = 0;
000036 7608 STRB r0,[r1,#0x18]
;;;54 g_tMoto.Pos = 0;
000038 7648 STRB r0,[r1,#0x19]
;;;55 g_tMoto.pv_pulse = 0;
00003a 2100 MOVS r1,#0
00003c 4a04 LDR r2,|L9.80|
00003e 6211 STR r1,[r2,#0x20] ; g_tMoto
000040 6251 STR r1,[r2,#0x24] ; g_tMoto
;;;56 g_tMoto.sv_pulse = 0;
000042 6291 STR r1,[r2,#0x28] ; g_tMoto
000044 62d1 STR r1,[r2,#0x2c] ; g_tMoto
;;;57 g_tMoto.prev_pv_pulse = 0;
000046 6311 STR r1,[r2,#0x30] ; g_tMoto
000048 6351 STR r1,[r2,#0x34] ; g_tMoto
;;;58 }
00004a bd08 POP {r3,pc}
;;;59
ENDP
|L9.76|
DCD 0x40010800
|L9.80|
DCD g_tMoto
AREA ||.bss||, DATA, NOINIT, ALIGN=3
g_tMoto
% 56
;*** Start embedded assembler ***
#line 1 "..\\..\\User\\bsp\\src\\bsp_step_moto.c"
AREA ||.rev16_text||, CODE
THUMB
EXPORT |__asm___15_bsp_step_moto_c_70f53da4____REV16|
#line 114 "..\\..\\Libraries\\CMSIS\\Include\\core_cmInstr.h"
|__asm___15_bsp_step_moto_c_70f53da4____REV16| PROC
#line 115
rev16 r0, r0
bx lr
ENDP
AREA ||.revsh_text||, CODE
THUMB
EXPORT |__asm___15_bsp_step_moto_c_70f53da4____REVSH|
#line 128
|__asm___15_bsp_step_moto_c_70f53da4____REVSH| PROC
#line 129
revsh r0, r0
bx lr
ENDP
;*** End embedded assembler ***

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,555 @@
; generated by Component: ARM Compiler 5.06 update 7 (build 960) Tool: ArmCC [4d365d]
; commandline ArmCC [--list --split_sections --debug -c --asm --interleave -o.\flash\obj\bsp_usart_dma.o --asm_dir=.\Flash\List\ --list_dir=.\Flash\List\ --depend=.\flash\obj\bsp_usart_dma.d --cpu=Cortex-M3 --apcs=interwork -O0 --diag_suppress=9931,870 -I..\..\Libraries\CMSIS\Device\ST\STM32F10x\Include -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Libraries\STM32_USB-FS-Device_Driver\inc -I..\..\Libraries\CMSIS\Include -I..\..\User\bsp -I..\..\User\bsp\inc -I..\..\User\app\inc -I..\..\User -IC:\Users\w1619\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__MICROLIB -D__UVISION_VERSION=538 -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD --omf_browse=.\flash\obj\bsp_usart_dma.crf ..\..\User\bsp\src\bsp_usart_dma.c]
THUMB
AREA ||i.USART1_IRQHandler||, CODE, READONLY, ALIGN=2
USART1_IRQHandler PROC
;;;194 */
;;;195 void DEBUG_USART_IRQHandler(void)
000000 b510 PUSH {r4,lr}
;;;196 {
;;;197 uint16_t t;
;;;198 if (USART_GetITStatus(DEBUG_USARTx, USART_IT_IDLE) == SET) // 检查中断是否发生
000002 f2404124 MOV r1,#0x424
000006 4817 LDR r0,|L1.100|
000008 f7fffffe BL USART_GetITStatus
00000c 2801 CMP r0,#1
00000e d127 BNE |L1.96|
;;;199 {
;;;200 DMA_Cmd(USART_RX_DMA_CHANNEL, DISABLE); // 关闭DMA传输
000010 2100 MOVS r1,#0
000012 4815 LDR r0,|L1.104|
000014 f7fffffe BL DMA_Cmd
;;;201
;;;202 t = DMA_GetCurrDataCounter(USART_RX_DMA_CHANNEL); // 获取剩余的数据数量
000018 4813 LDR r0,|L1.104|
00001a f7fffffe BL DMA_GetCurrDataCounter
00001e 4604 MOV r4,r0
;;;203 memset(g_RxBuf, 0, sizeof g_RxBuf);
000020 2140 MOVS r1,#0x40
000022 4812 LDR r0,|L1.108|
000024 f7fffffe BL __aeabi_memclr
;;;204 memcpy(g_RxBuf, ReceiveBuff, RECEIVEBUFF_SIZE - t);
000028 f1c40240 RSB r2,r4,#0x40
00002c 4910 LDR r1,|L1.112|
00002e 480f LDR r0,|L1.108|
000030 f7fffffe BL __aeabi_memcpy
;;;205 memset(ReceiveBuff, 0, sizeof ReceiveBuff);
000034 2140 MOVS r1,#0x40
000036 480e LDR r0,|L1.112|
000038 f7fffffe BL __aeabi_memclr
;;;206 g_ucRxRcvNewFlag = 1;
00003c 2001 MOVS r0,#1
00003e 490d LDR r1,|L1.116|
000040 7008 STRB r0,[r1,#0]
;;;207
;;;208 DMA_SetCurrDataCounter(USART_RX_DMA_CHANNEL, RECEIVEBUFF_SIZE); // 重新设置传输的数据数量
000042 2140 MOVS r1,#0x40
000044 4808 LDR r0,|L1.104|
000046 f7fffffe BL DMA_SetCurrDataCounter
;;;209 DMA_Cmd(USART_RX_DMA_CHANNEL, ENABLE); // 开启DMA传输
00004a 2101 MOVS r1,#1
00004c 4806 LDR r0,|L1.104|
00004e f7fffffe BL DMA_Cmd
;;;210
;;;211 USART_ReceiveData(DEBUG_USARTx); // 读取一次数据,不然会一直进中断
000052 4804 LDR r0,|L1.100|
000054 f7fffffe BL USART_ReceiveData
;;;212 USART_ClearFlag(DEBUG_USARTx, USART_FLAG_IDLE); // 清除串口空闲中断标志位
000058 2110 MOVS r1,#0x10
00005a 4802 LDR r0,|L1.100|
00005c f7fffffe BL USART_ClearFlag
|L1.96|
;;;213 }
;;;214 }
000060 bd10 POP {r4,pc}
ENDP
000062 0000 DCW 0x0000
|L1.100|
DCD 0x40013800
|L1.104|
DCD 0x40020058
|L1.108|
DCD g_RxBuf
|L1.112|
DCD ReceiveBuff
|L1.116|
DCD g_ucRxRcvNewFlag
AREA ||i.USART_Config||, CODE, READONLY, ALIGN=2
USART_Config PROC
;;;13 */
;;;14 void USART_Config(void)
000000 b500 PUSH {lr}
;;;15 {
000002 b087 SUB sp,sp,#0x1c
;;;16 GPIO_InitTypeDef GPIO_InitStructure;
;;;17 USART_InitTypeDef USART_InitStructure;
;;;18 NVIC_InitTypeDef NVIC_InitStruct;
;;;19 // 打开串口GPIO的时钟
;;;20 DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE);
000004 2101 MOVS r1,#1
000006 2004 MOVS r0,#4
000008 f7fffffe BL RCC_APB2PeriphClockCmd
;;;21
;;;22 // 打开串口外设的时钟
;;;23 DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);
00000c 2101 MOVS r1,#1
00000e 0388 LSLS r0,r1,#14
000010 f7fffffe BL RCC_APB2PeriphClockCmd
;;;24
;;;25 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
000014 f44f60a0 MOV r0,#0x500
000018 f7fffffe BL NVIC_PriorityGroupConfig
;;;26 NVIC_InitStruct.NVIC_IRQChannel = DEBUG_USART_IRQ;
00001c 2025 MOVS r0,#0x25
00001e f88d0004 STRB r0,[sp,#4]
;;;27 NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
000022 2001 MOVS r0,#1
000024 f88d0007 STRB r0,[sp,#7]
;;;28 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;
000028 f88d0005 STRB r0,[sp,#5]
;;;29 NVIC_InitStruct.NVIC_IRQChannelSubPriority = 3;
00002c 2003 MOVS r0,#3
00002e f88d0006 STRB r0,[sp,#6]
;;;30 NVIC_Init(&NVIC_InitStruct);
000032 a801 ADD r0,sp,#4
000034 f7fffffe BL NVIC_Init
;;;31
;;;32 // 将USART Tx的GPIO配置为推挽复用模式
;;;33 GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN;
000038 f44f7000 MOV r0,#0x200
00003c f8ad0018 STRH r0,[sp,#0x18]
;;;34 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
000040 2018 MOVS r0,#0x18
000042 f88d001b STRB r0,[sp,#0x1b]
;;;35 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
000046 2003 MOVS r0,#3
000048 f88d001a STRB r0,[sp,#0x1a]
;;;36 GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure);
00004c a906 ADD r1,sp,#0x18
00004e 4816 LDR r0,|L2.168|
000050 f7fffffe BL GPIO_Init
;;;37
;;;38 // 将USART Rx的GPIO配置为浮空输入模式
;;;39 GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_GPIO_PIN;
000054 f44f6080 MOV r0,#0x400
000058 f8ad0018 STRH r0,[sp,#0x18]
;;;40 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
00005c 2004 MOVS r0,#4
00005e f88d001b STRB r0,[sp,#0x1b]
;;;41 GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure);
000062 a906 ADD r1,sp,#0x18
000064 4810 LDR r0,|L2.168|
000066 f7fffffe BL GPIO_Init
;;;42
;;;43 // 配置串口的工作参数
;;;44 // 配置波特率
;;;45 USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE;
00006a f44f30e1 MOV r0,#0x1c200
00006e 9002 STR r0,[sp,#8]
;;;46 // 配置 针数据字长
;;;47 USART_InitStructure.USART_WordLength = USART_WordLength_8b;
000070 2000 MOVS r0,#0
000072 f8ad000c STRH r0,[sp,#0xc]
;;;48 // 配置停止位
;;;49 USART_InitStructure.USART_StopBits = USART_StopBits_1;
000076 f8ad000e STRH r0,[sp,#0xe]
;;;50 // 配置校验位
;;;51 USART_InitStructure.USART_Parity = USART_Parity_No;
00007a f8ad0010 STRH r0,[sp,#0x10]
;;;52 // 配置硬件流控制
;;;53 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
00007e f8ad0014 STRH r0,[sp,#0x14]
;;;54 // 配置工作模式,收发一起
;;;55 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
000082 200c MOVS r0,#0xc
000084 f8ad0012 STRH r0,[sp,#0x12]
;;;56 // 完成串口的初始化配置
;;;57 USART_Init(DEBUG_USARTx, &USART_InitStructure);
000088 a902 ADD r1,sp,#8
00008a 4808 LDR r0,|L2.172|
00008c f7fffffe BL USART_Init
;;;58 // 使能空闲中断
;;;59 USART_ITConfig(DEBUG_USARTx, USART_IT_IDLE, ENABLE);
000090 2201 MOVS r2,#1
000092 f2404124 MOV r1,#0x424
000096 4805 LDR r0,|L2.172|
000098 f7fffffe BL USART_ITConfig
;;;60 // 使能串口
;;;61 USART_Cmd(DEBUG_USARTx, ENABLE);
00009c 2101 MOVS r1,#1
00009e 4803 LDR r0,|L2.172|
0000a0 f7fffffe BL USART_Cmd
;;;62 }
0000a4 b007 ADD sp,sp,#0x1c
0000a6 bd00 POP {pc}
;;;63
ENDP
|L2.168|
DCD 0x40010800
|L2.172|
DCD 0x40013800
AREA ||i.USARTx_DMA_Config||, CODE, READONLY, ALIGN=2
USARTx_DMA_Config PROC
;;;154 */
;;;155 void USARTx_DMA_Config(void)
000000 b500 PUSH {lr}
;;;156 {
000002 b08b SUB sp,sp,#0x2c
;;;157 DMA_InitTypeDef DMA_InitStructure;
;;;158 // 开启DMA时钟
;;;159 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
000004 2101 MOVS r1,#1
000006 4608 MOV r0,r1
000008 f7fffffe BL RCC_AHBPeriphClockCmd
;;;160
;;;161 // 设置DMA源地址串口数据寄存器地址*/
;;;162 DMA_InitStructure.DMA_PeripheralBaseAddr = USART_DR_ADDRESS;
00000c 480f LDR r0,|L3.76|
00000e 9000 STR r0,[sp,#0]
;;;163 // 内存地址(要传输的变量的指针)
;;;164 DMA_InitStructure.DMA_MemoryBaseAddr = (u32)ReceiveBuff;
000010 480f LDR r0,|L3.80|
000012 9001 STR r0,[sp,#4]
;;;165 // 方向:从外设到内存
;;;166 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
000014 2000 MOVS r0,#0
000016 9002 STR r0,[sp,#8]
;;;167 // 传输大小
;;;168 DMA_InitStructure.DMA_BufferSize = RECEIVEBUFF_SIZE;
000018 2040 MOVS r0,#0x40
00001a 9003 STR r0,[sp,#0xc]
;;;169 // 外设地址不增
;;;170 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
00001c 2000 MOVS r0,#0
00001e 9004 STR r0,[sp,#0x10]
;;;171 // 内存地址自增
;;;172 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
000020 2080 MOVS r0,#0x80
000022 9005 STR r0,[sp,#0x14]
;;;173 // 外设数据单位
;;;174 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
000024 2000 MOVS r0,#0
000026 9006 STR r0,[sp,#0x18]
;;;175 // 内存数据单位
;;;176 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
000028 9007 STR r0,[sp,#0x1c]
;;;177 // DMA模式一次或者循环模式
;;;178 // DMA_InitStructure.DMA_Mode = DMA_Mode_Normal ;
;;;179 DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
00002a 2020 MOVS r0,#0x20
00002c 9008 STR r0,[sp,#0x20]
;;;180 // 优先级:中
;;;181 DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;
00002e 01c0 LSLS r0,r0,#7
000030 9009 STR r0,[sp,#0x24]
;;;182 // 禁止内存到内存的传输
;;;183 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
000032 2000 MOVS r0,#0
000034 900a STR r0,[sp,#0x28]
;;;184 // 配置DMA通道
;;;185 DMA_Init(USART_RX_DMA_CHANNEL, &DMA_InitStructure);
000036 4669 MOV r1,sp
000038 4806 LDR r0,|L3.84|
00003a f7fffffe BL DMA_Init
;;;186 // 使能DMA
;;;187 DMA_Cmd(USART_RX_DMA_CHANNEL, ENABLE);
00003e 2101 MOVS r1,#1
000040 4804 LDR r0,|L3.84|
000042 f7fffffe BL DMA_Cmd
;;;188 }
000046 b00b ADD sp,sp,#0x2c
000048 bd00 POP {pc}
;;;189
ENDP
00004a 0000 DCW 0x0000
|L3.76|
DCD 0x40013804
|L3.80|
DCD ReceiveBuff
|L3.84|
DCD 0x40020058
AREA ||i.Usart_SendArray||, CODE, READONLY, ALIGN=1
Usart_SendArray PROC
;;;75 /****************** 发送8位的数组 ************************/
;;;76 void Usart_SendArray(USART_TypeDef *pUSARTx, uint8_t *array, uint16_t num)
000000 e92d41f0 PUSH {r4-r8,lr}
;;;77 {
000004 4607 MOV r7,r0
000006 460d MOV r5,r1
000008 4616 MOV r6,r2
;;;78 uint8_t i;
;;;79
;;;80 for (i = 0; i < num; i++)
00000a 2400 MOVS r4,#0
00000c e005 B |L4.26|
|L4.14|
;;;81 {
;;;82 /* 发送一个字节数据到USART */
;;;83 Usart_SendByte(pUSARTx, array[i]);
00000e 5d29 LDRB r1,[r5,r4]
000010 4638 MOV r0,r7
000012 f7fffffe BL Usart_SendByte
000016 1c60 ADDS r0,r4,#1 ;80
000018 b2c4 UXTB r4,r0 ;80
|L4.26|
00001a 42b4 CMP r4,r6 ;80
00001c dbf7 BLT |L4.14|
;;;84 }
;;;85 /* 等待发送完成 */
;;;86 while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TC) == RESET)
00001e bf00 NOP
|L4.32|
000020 2140 MOVS r1,#0x40
000022 4638 MOV r0,r7
000024 f7fffffe BL USART_GetFlagStatus
000028 2800 CMP r0,#0
00002a d0f9 BEQ |L4.32|
;;;87 ;
;;;88 }
00002c e8bd81f0 POP {r4-r8,pc}
;;;89
ENDP
AREA ||i.Usart_SendByte||, CODE, READONLY, ALIGN=1
Usart_SendByte PROC
;;;64 /***************** 发送一个字节 **********************/
;;;65 void Usart_SendByte(USART_TypeDef *pUSARTx, uint8_t ch)
000000 b570 PUSH {r4-r6,lr}
;;;66 {
000002 4604 MOV r4,r0
000004 460d MOV r5,r1
;;;67 /* 发送一个字节数据到USART */
;;;68 USART_SendData(pUSARTx, ch);
000006 4629 MOV r1,r5
000008 4620 MOV r0,r4
00000a f7fffffe BL USART_SendData
;;;69
;;;70 /* 等待发送数据寄存器为空 */
;;;71 while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET)
00000e bf00 NOP
|L5.16|
000010 2180 MOVS r1,#0x80
000012 4620 MOV r0,r4
000014 f7fffffe BL USART_GetFlagStatus
000018 2800 CMP r0,#0
00001a d0f9 BEQ |L5.16|
;;;72 ;
;;;73 }
00001c bd70 POP {r4-r6,pc}
;;;74
ENDP
AREA ||i.Usart_SendHalfWord||, CODE, READONLY, ALIGN=1
Usart_SendHalfWord PROC
;;;106 /***************** 发送一个16位数 **********************/
;;;107 void Usart_SendHalfWord(USART_TypeDef *pUSARTx, uint16_t ch)
000000 e92d41f0 PUSH {r4-r8,lr}
;;;108 {
000004 4605 MOV r5,r0
000006 460c MOV r4,r1
;;;109 uint8_t temp_h, temp_l;
;;;110
;;;111 /* 取出高八位 */
;;;112 temp_h = (ch & 0XFF00) >> 8;
000008 0a26 LSRS r6,r4,#8
;;;113 /* 取出低八位 */
;;;114 temp_l = ch & 0XFF;
00000a b2e7 UXTB r7,r4
;;;115
;;;116 /* 发送高八位 */
;;;117 USART_SendData(pUSARTx, temp_h);
00000c 4631 MOV r1,r6
00000e 4628 MOV r0,r5
000010 f7fffffe BL USART_SendData
;;;118 while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET)
000014 bf00 NOP
|L6.22|
000016 2180 MOVS r1,#0x80
000018 4628 MOV r0,r5
00001a f7fffffe BL USART_GetFlagStatus
00001e 2800 CMP r0,#0
000020 d0f9 BEQ |L6.22|
;;;119 ;
;;;120
;;;121 /* 发送低八位 */
;;;122 USART_SendData(pUSARTx, temp_l);
000022 4639 MOV r1,r7
000024 4628 MOV r0,r5
000026 f7fffffe BL USART_SendData
;;;123 while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET)
00002a bf00 NOP
|L6.44|
00002c 2180 MOVS r1,#0x80
00002e 4628 MOV r0,r5
000030 f7fffffe BL USART_GetFlagStatus
000034 2800 CMP r0,#0
000036 d0f9 BEQ |L6.44|
;;;124 ;
;;;125 }
000038 e8bd81f0 POP {r4-r8,pc}
;;;126
ENDP
AREA ||i.Usart_SendString||, CODE, READONLY, ALIGN=1
Usart_SendString PROC
;;;90 /***************** 发送字符串 **********************/
;;;91 void Usart_SendString(USART_TypeDef *pUSARTx, char *str)
000000 b570 PUSH {r4-r6,lr}
;;;92 {
000002 4606 MOV r6,r0
000004 460c MOV r4,r1
;;;93 unsigned int k = 0;
000006 2500 MOVS r5,#0
;;;94 do
000008 bf00 NOP
|L7.10|
;;;95 {
;;;96 Usart_SendByte(pUSARTx, *(str + k));
00000a 5d61 LDRB r1,[r4,r5]
00000c 4630 MOV r0,r6
00000e f7fffffe BL Usart_SendByte
;;;97 k++;
000012 1c6d ADDS r5,r5,#1
;;;98 } while (*(str + k) != '\0');
000014 5d60 LDRB r0,[r4,r5]
000016 2800 CMP r0,#0
000018 d1f7 BNE |L7.10|
;;;99
;;;100 /* 等待发送完成 */
;;;101 while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TC) == RESET)
00001a bf00 NOP
|L7.28|
00001c 2140 MOVS r1,#0x40
00001e 4630 MOV r0,r6
000020 f7fffffe BL USART_GetFlagStatus
000024 2800 CMP r0,#0
000026 d0f9 BEQ |L7.28|
;;;102 {
;;;103 }
;;;104 }
000028 bd70 POP {r4-r6,pc}
;;;105
ENDP
AREA ||i.fgetc||, CODE, READONLY, ALIGN=2
fgetc PROC
;;;140 /// 重定向c库函数scanf到串口重写向后可使用scanf、getchar等函数
;;;141 int fgetc(FILE *f)
000000 b510 PUSH {r4,lr}
;;;142 {
000002 4604 MOV r4,r0
;;;143 /* 等待串口输入数据 */
;;;144 while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_RXNE) == RESET)
000004 bf00 NOP
|L8.6|
000006 2120 MOVS r1,#0x20
000008 4804 LDR r0,|L8.28|
00000a f7fffffe BL USART_GetFlagStatus
00000e 2800 CMP r0,#0
000010 d0f9 BEQ |L8.6|
;;;145 ;
;;;146
;;;147 return (int)USART_ReceiveData(DEBUG_USARTx);
000012 4802 LDR r0,|L8.28|
000014 f7fffffe BL USART_ReceiveData
;;;148 }
000018 bd10 POP {r4,pc}
;;;149
ENDP
00001a 0000 DCW 0x0000
|L8.28|
DCD 0x40013800
AREA ||i.fputc||, CODE, READONLY, ALIGN=2
fputc PROC
;;;127 /// 重定向c库函数printf到串口重定向后可使用printf函数
;;;128 int fputc(int ch, FILE *f)
000000 b570 PUSH {r4-r6,lr}
;;;129 {
000002 4604 MOV r4,r0
000004 460d MOV r5,r1
;;;130 /* 发送一个字节数据到串口 */
;;;131 USART_SendData(DEBUG_USARTx, (uint8_t)ch);
000006 b2e1 UXTB r1,r4
000008 4805 LDR r0,|L9.32|
00000a f7fffffe BL USART_SendData
;;;132
;;;133 /* 等待发送完毕 */
;;;134 while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) == RESET)
00000e bf00 NOP
|L9.16|
000010 2180 MOVS r1,#0x80
000012 4803 LDR r0,|L9.32|
000014 f7fffffe BL USART_GetFlagStatus
000018 2800 CMP r0,#0
00001a d0f9 BEQ |L9.16|
;;;135 ;
;;;136
;;;137 return (ch);
00001c 4620 MOV r0,r4
;;;138 }
00001e bd70 POP {r4-r6,pc}
;;;139
ENDP
|L9.32|
DCD 0x40013800
AREA ||.bss||, DATA, NOINIT, ALIGN=0
ReceiveBuff
% 64
g_RxBuf
% 64
AREA ||.data||, DATA, ALIGN=0
g_ucRxRcvNewFlag
000000 00 DCB 0x00
;*** Start embedded assembler ***
#line 1 "..\\..\\User\\bsp\\src\\bsp_usart_dma.c"
AREA ||.rev16_text||, CODE
THUMB
EXPORT |__asm___15_bsp_usart_dma_c_7598bab3____REV16|
#line 114 "..\\..\\Libraries\\CMSIS\\Include\\core_cmInstr.h"
|__asm___15_bsp_usart_dma_c_7598bab3____REV16| PROC
#line 115
rev16 r0, r0
bx lr
ENDP
AREA ||.revsh_text||, CODE
THUMB
EXPORT |__asm___15_bsp_usart_dma_c_7598bab3____REVSH|
#line 128
|__asm___15_bsp_usart_dma_c_7598bab3____REVSH| PROC
#line 129
revsh r0, r0
bx lr
ENDP
;*** End embedded assembler ***

View File

@@ -0,0 +1,640 @@
; generated by Component: ARM Compiler 5.05 update 1 (build 106) Tool: ArmCC [4d0efa]
; commandline ArmCC [--list --split_sections --debug -c --asm --interleave -o.\flash\obj\demo_i2c_eeprom.o --asm_dir=.\Flash\List\ --list_dir=.\Flash\List\ --depend=.\flash\obj\demo_i2c_eeprom.d --cpu=Cortex-M3 --apcs=interwork -O0 --diag_suppress=9931,870 -I..\..\Libraries\CMSIS\Device\ST\STM32F10x\Include -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Libraries\STM32_USB-FS-Device_Driver\inc -I..\..\Libraries\CMSIS\Include -I..\..\User\bsp -I..\..\User\bsp\inc -I..\..\User\app\inc -IC:\Keil_v5\ARM\RV31\INC -IC:\Keil_v5\ARM\CMSIS\Include -IC:\Keil_v5\ARM\Inc\ST\STM32F10x -D__MICROLIB -D__UVISION_VERSION=514 -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD --omf_browse=.\flash\obj\demo_i2c_eeprom.crf ..\..\User\app\src\demo_i2c_eeprom.c]
THUMB
AREA ||i.DemoEEPROM||, CODE, READONLY, ALIGN=2
REQUIRE _printf_percent
REQUIRE _printf_d
REQUIRE _printf_s
REQUIRE _printf_int_dec
REQUIRE _printf_str
DemoEEPROM PROC
;;;36 */
;;;37 void DemoEEPROM(void)
000000 b508 PUSH {r3,lr}
;;;38 {
;;;39 uint8_t cmd;
;;;40
;;;41 if (ee_CheckOk() == 0)
000002 f7fffffe BL ee_CheckOk
000006 b920 CBNZ r0,|L1.18|
;;;42 {
;;;43 /* 没有检测到EEPROM */
;;;44 printf("没有检测到串行EEPROM!\r\n");
000008 a01c ADR r0,|L1.124|
00000a f7fffffe BL __2printf
;;;45
;;;46 while (1); /* 停机 */
00000e bf00 NOP
|L1.16|
000010 e7fe B |L1.16|
|L1.18|
;;;47 }
;;;48
;;;49 printf("已经检测到串行EEPROM : \r\n");
000012 a020 ADR r0,|L1.148|
000014 f7fffffe BL __2printf
;;;50 printf("型号: %s, 容量 = %d 字节, 页面大小 = %d\r\n", EE_MODEL_NAME, EE_SIZE, EE_PAGE_SIZE);
000018 2340 MOVS r3,#0x40
00001a 021a LSLS r2,r3,#8
00001c a124 ADR r1,|L1.176|
00001e a027 ADR r0,|L1.188|
000020 f7fffffe BL __2printf
;;;51
;;;52 ee_DispMenu(); /* 打印命令提示 */
000024 f7fffffe BL ee_DispMenu
;;;53 while(1)
000028 e026 B |L1.120|
|L1.42|
;;;54 {
;;;55 bsp_Idle(); /* 这个函数在bsp.c文件。用户可以修改这个函数实现CPU休眠和喂狗 */
00002a f7fffffe BL bsp_Idle
;;;56
;;;57 //cmd = getchar(); /* 从串口读入一个字符 (阻塞方式) */
;;;58 if (comGetChar(COM1, &cmd)) /* 从串口读入一个字符(非阻塞方式) */
00002e 4669 MOV r1,sp
000030 2000 MOVS r0,#0
000032 f7fffffe BL comGetChar
000036 2800 CMP r0,#0
000038 d01e BEQ |L1.120|
;;;59 {
;;;60 switch (cmd)
00003a f89d0000 LDRB r0,[sp,#0]
00003e 2831 CMP r0,#0x31
000040 d004 BEQ |L1.76|
000042 2832 CMP r0,#0x32
000044 d008 BEQ |L1.88|
000046 2833 CMP r0,#0x33
000048 d112 BNE |L1.112|
00004a e00b B |L1.100|
|L1.76|
;;;61 {
;;;62 case '1':
;;;63 printf("\r\n【1 - 读 EEPROM 测试】\r\n");
00004c a026 ADR r0,|L1.232|
00004e f7fffffe BL __2printf
;;;64 ee_ReadTest(); /* 读EEPROM数据并打印出来数据内容 */
000052 f7fffffe BL ee_ReadTest
;;;65 break;
000056 e00e B |L1.118|
|L1.88|
;;;66
;;;67 case '2':
;;;68 printf("\r\n【2 - 写 EEPROM 测试】\r\n");
000058 a02a ADR r0,|L1.260|
00005a f7fffffe BL __2printf
;;;69 ee_WriteTest(); /* 写EEPROM数据并打印写入速度 */
00005e f7fffffe BL ee_WriteTest
;;;70 break;
000062 e008 B |L1.118|
|L1.100|
;;;71
;;;72 case '3':
;;;73 printf("\r\n【3 - 擦除 EEPROM】\r\n");
000064 a02e ADR r0,|L1.288|
000066 f7fffffe BL __2printf
;;;74 ee_Erase(); /* 擦差EEPROM数据实际上就是写入全0xFF */
00006a f7fffffe BL ee_Erase
;;;75 break;
00006e e002 B |L1.118|
|L1.112|
;;;76
;;;77 default:
;;;78 ee_DispMenu(); /* 无效命令,重新打印命令提示 */
000070 f7fffffe BL ee_DispMenu
;;;79 break;
000074 bf00 NOP
|L1.118|
000076 bf00 NOP ;65
|L1.120|
000078 e7d7 B |L1.42|
;;;80
;;;81 }
;;;82 }
;;;83 }
;;;84 }
;;;85
ENDP
00007a 0000 DCW 0x0000
|L1.124|
00007c c3bbd3d0 DCB 195,187,211,208,188,236,178,226,181,189,180,174,208,208,"E"
000080 bcecb2e2
000084 b5bdb4ae
000088 d0d045
00008b 4550524f DCB "EPROM!\r\n",0
00008f 4d210d0a
000093 00
|L1.148|
000094 d2d1bead DCB 210,209,190,173,188,236,178,226,181,189,180,174,208,208,"E"
000098 bcecb2e2
00009c b5bdb4ae
0000a0 d0d045
0000a3 4550524f DCB "EPROM : \r\n",0
0000a7 4d203a20
0000ab 0d0a00
0000ae 00 DCB 0
0000af 00 DCB 0
|L1.176|
0000b0 41543234 DCB "AT24C128",0
0000b4 43313238
0000b8 00
0000b9 00 DCB 0
0000ba 00 DCB 0
0000bb 00 DCB 0
|L1.188|
0000bc d0cdbac5 DCB 208,205,186,197,": %s, ",200,221,193,191," = %d ",215,214
0000c0 3a202573
0000c4 2c20c8dd
0000c8 c1bf203d
0000cc 20256420
0000d0 d7d6
0000d2 bdda2c20 DCB 189,218,", ",210,179,195,230,180,243,208,161," = %d\r\n",0
0000d6 d2b3c3e6
0000da b4f3d0a1
0000de 203d2025
0000e2 640d0a00
0000e6 00 DCB 0
0000e7 00 DCB 0
|L1.232|
0000e8 0d0aa1be DCB "\r\n",161,190,"1 - ",182,193," EEPROM ",178,226,202,212
0000ec 31202d20
0000f0 b6c12045
0000f4 4550524f
0000f8 4d20b2e2
0000fc cad4
0000fe a1bf0d0a DCB 161,191,"\r\n",0
000102 00
000103 00 DCB 0
|L1.260|
000104 0d0aa1be DCB "\r\n",161,190,"2 - ",208,180," EEPROM ",178,226,202,212
000108 32202d20
00010c d0b42045
000110 4550524f
000114 4d20b2e2
000118 cad4
00011a a1bf0d0a DCB 161,191,"\r\n",0
00011e 00
00011f 00 DCB 0
|L1.288|
000120 0d0aa1be DCB "\r\n",161,190,"3 - ",178,193,179,253," EEPROM",161,191,"\r"
000124 33202d20
000128 b2c1b3fd
00012c 20454550
000130 524f4da1
000134 bf0d
000136 0a00 DCB "\n",0
AREA ||i.ee_DispMenu||, CODE, READONLY, ALIGN=2
REQUIRE _printf_percent
REQUIRE _printf_d
REQUIRE _printf_int_dec
ee_DispMenu PROC
;;;204 */
;;;205 static void ee_DispMenu(void)
000000 b510 PUSH {r4,lr}
;;;206 {
;;;207 printf("\r\n------------------------------------------------\r\n");
000002 a00b ADR r0,|L2.48|
000004 f7fffffe BL __2printf
;;;208 printf("请选择操作命令:\r\n");
000008 a017 ADR r0,|L2.104|
00000a f7fffffe BL __2printf
;;;209 printf("1 - 读EEPROM (%d 字节)\r\n", EE_SIZE);
00000e f44f4180 MOV r1,#0x4000
000012 a01a ADR r0,|L2.124|
000014 f7fffffe BL __2printf
;;;210 printf("2 - 写EEPROM (%d 字节,0x00-0xFF)\r\n", EE_SIZE);
000018 f44f4180 MOV r1,#0x4000
00001c a01e ADR r0,|L2.152|
00001e f7fffffe BL __2printf
;;;211 printf("3 - 擦除EEPROM\r\n");
000022 a026 ADR r0,|L2.188|
000024 f7fffffe BL __2printf
;;;212 printf("4 - 显示命令提示\r\n");
000028 a029 ADR r0,|L2.208|
00002a f7fffffe BL __2printf
;;;213 }
00002e bd10 POP {r4,pc}
;;;214
ENDP
|L2.48|
000030 0d0a2d2d DCB "\r\n------------------------------------------------\r\n"
000034 2d2d2d2d
000038 2d2d2d2d
00003c 2d2d2d2d
000040 2d2d2d2d
000044 2d2d2d2d
000048 2d2d2d2d
00004c 2d2d2d2d
000050 2d2d2d2d
000054 2d2d2d2d
000058 2d2d2d2d
00005c 2d2d2d2d
000060 2d2d0d0a
000064 00 DCB 0
000065 00 DCB 0
000066 00 DCB 0
000067 00 DCB 0
|L2.104|
000068 c7ebd1a1 DCB 199,235,209,161,212,241,178,217,215,247,195,252,193,238,":"
00006c d4f1b2d9
000070 d7f7c3fc
000074 c1ee3a
000077 0d0a00 DCB "\r\n",0
00007a 00 DCB 0
00007b 00 DCB 0
|L2.124|
00007c 31202d20 DCB "1 - ",182,193,"EEPROM (%d ",215,214,189,218,")\r\n",0
000080 b6c14545
000084 50524f4d
000088 20282564
00008c 20d7d6bd
000090 da290d0a
000094 00
000095 00 DCB 0
000096 00 DCB 0
000097 00 DCB 0
|L2.152|
000098 32202d20 DCB "2 - ",208,180,"EEPROM (%d ",215,214,189,218,",0x00-0xFF"
00009c d0b44545
0000a0 50524f4d
0000a4 20282564
0000a8 20d7d6bd
0000ac da2c3078
0000b0 30302d30
0000b4 784646
0000b7 290d0a00 DCB ")\r\n",0
0000bb 00 DCB 0
|L2.188|
0000bc 33202d20 DCB "3 - ",178,193,179,253,"EEPROM\r\n",0
0000c0 b2c1b3fd
0000c4 45455052
0000c8 4f4d0d0a
0000cc 00
0000cd 00 DCB 0
0000ce 00 DCB 0
0000cf 00 DCB 0
|L2.208|
0000d0 34202d20 DCB "4 - ",207,212,202,190,195,252,193,238,204,225,202,190,"\r"
0000d4 cfd4cabe
0000d8 c3fcc1ee
0000dc cce1cabe
0000e0 0d
0000e1 0a00 DCB "\n",0
0000e3 00 DCB 0
AREA ||i.ee_Erase||, CODE, READONLY, ALIGN=2
ee_Erase PROC
;;;174 */
;;;175 static void ee_Erase(void)
000000 b510 PUSH {r4,lr}
;;;176 {
;;;177 uint16_t i;
;;;178
;;;179 /* 填充缓冲区 */
;;;180 for (i = 0; i < EE_SIZE; i++)
000002 2400 MOVS r4,#0
000004 e004 B |L3.16|
|L3.6|
;;;181 {
;;;182 buf[i] = 0xFF;
000006 20ff MOVS r0,#0xff
000008 490b LDR r1,|L3.56|
00000a 5508 STRB r0,[r1,r4]
00000c 1c60 ADDS r0,r4,#1 ;180
00000e b284 UXTH r4,r0 ;180
|L3.16|
000010 f5b44f80 CMP r4,#0x4000 ;180
000014 dbf7 BLT |L3.6|
;;;183 }
;;;184
;;;185 /* 写EEPROM, 起始地址 = 0数据长度为 256 */
;;;186 if (ee_WriteBytes(buf, 0, EE_SIZE) == 0)
000016 f44f4280 MOV r2,#0x4000
00001a 2100 MOVS r1,#0
00001c 4806 LDR r0,|L3.56|
00001e f7fffffe BL ee_WriteBytes
000022 b918 CBNZ r0,|L3.44|
;;;187 {
;;;188 printf("擦除eeprom出错\r\n");
000024 a005 ADR r0,|L3.60|
000026 f7fffffe BL __2printf
|L3.42|
;;;189 return;
;;;190 }
;;;191 else
;;;192 {
;;;193 printf("擦除eeprom成功\r\n");
;;;194 }
;;;195 }
00002a bd10 POP {r4,pc}
|L3.44|
00002c a008 ADR r0,|L3.80|
00002e f7fffffe BL __2printf
000032 bf00 NOP
000034 e7f9 B |L3.42|
;;;196
ENDP
000036 0000 DCW 0x0000
|L3.56|
DCD buf
|L3.60|
00003c b2c1b3fd DCB 178,193,179,253,"eeprom",179,246,180,237,163,161,"\r\n",0
000040 65657072
000044 6f6db3f6
000048 b4eda3a1
00004c 0d0a00
00004f 00 DCB 0
|L3.80|
000050 b2c1b3fd DCB 178,193,179,253,"eeprom",179,201,185,166,163,161,"\r\n",0
000054 65657072
000058 6f6db3c9
00005c b9a6a3a1
000060 0d0a00
000063 00 DCB 0
AREA ||i.ee_ReadTest||, CODE, READONLY, ALIGN=2
REQUIRE _printf_pre_padding
REQUIRE _printf_percent
REQUIRE _printf_flags
REQUIRE _printf_widthprec
REQUIRE _printf_x
REQUIRE _printf_longlong_hex
REQUIRE _printf_d
REQUIRE _printf_int_dec
ee_ReadTest PROC
;;;93 */
;;;94 static void ee_ReadTest(void)
000000 e92d41f0 PUSH {r4-r8,lr}
;;;95 {
;;;96 uint16_t i;
;;;97 int32_t iTime1, iTime2;
;;;98
;;;99 /* 读EEPROM, 起始地址 = 0 数据长度为 256 */
;;;100 iTime1 = bsp_GetRunTime(); /* 记下开始时间 */
000004 f7fffffe BL bsp_GetRunTime
000008 4606 MOV r6,r0
;;;101 if (ee_ReadBytes((uint8_t *)buf, 0, EE_SIZE) == 0)
00000a f44f4280 MOV r2,#0x4000
00000e 2100 MOVS r1,#0
000010 481a LDR r0,|L4.124|
000012 f7fffffe BL ee_ReadBytes
000016 b920 CBNZ r0,|L4.34|
;;;102 {
;;;103 printf("读eeprom出错\r\n");
000018 a019 ADR r0,|L4.128|
00001a f7fffffe BL __2printf
|L4.30|
;;;104 return;
;;;105 }
;;;106 else
;;;107 {
;;;108 iTime2 = bsp_GetRunTime(); /* 记下结束时间 */
;;;109 printf("读eeprom成功数据如下\r\n");
;;;110 }
;;;111
;;;112 /* 打印数据 */
;;;113 for (i = 0; i < EE_SIZE; i++)
;;;114 {
;;;115 printf(" %02X", buf[i]);
;;;116
;;;117 if ((i & 31) == 31)
;;;118 {
;;;119 printf("\r\n"); /* 每行显示16字节数据 */
;;;120 }
;;;121 else if ((i & 31) == 15)
;;;122 {
;;;123 printf(" - ");
;;;124 }
;;;125 }
;;;126
;;;127 /* 打印读速度 */
;;;128 printf("读耗时: %dms, 读速度: %dB/s\r\n", iTime2 - iTime1, (EE_SIZE * 1000) / (iTime2 - iTime1));
;;;129 }
00001e e8bd81f0 POP {r4-r8,pc}
|L4.34|
000022 f7fffffe BL bsp_GetRunTime
000026 4605 MOV r5,r0 ;108
000028 a01a ADR r0,|L4.148|
00002a f7fffffe BL __2printf
00002e 2400 MOVS r4,#0 ;113
000030 e015 B |L4.94|
|L4.50|
000032 4812 LDR r0,|L4.124|
000034 5d01 LDRB r1,[r0,r4] ;115
000036 a01e ADR r0,|L4.176|
000038 f7fffffe BL __2printf
00003c f004001f AND r0,r4,#0x1f ;117
000040 281f CMP r0,#0x1f ;117
000042 d103 BNE |L4.76|
000044 a019 ADR r0,|L4.172|
000046 f7fffffe BL __2printf
00004a e006 B |L4.90|
|L4.76|
00004c f004001f AND r0,r4,#0x1f ;121
000050 280f CMP r0,#0xf ;121
000052 d102 BNE |L4.90|
000054 a018 ADR r0,|L4.184|
000056 f7fffffe BL __2printf
|L4.90|
00005a 1c60 ADDS r0,r4,#1 ;113
00005c b284 UXTH r4,r0 ;113
|L4.94|
00005e f5b44f80 CMP r4,#0x4000 ;113
000062 dbe6 BLT |L4.50|
000064 1ba8 SUBS r0,r5,r6 ;128
000066 f44f017a MOV r1,#0xfa0000 ;128
00006a fb91f7f0 SDIV r7,r1,r0 ;128
00006e 1ba9 SUBS r1,r5,r6 ;128
000070 463a MOV r2,r7 ;128
000072 a012 ADR r0,|L4.188|
000074 f7fffffe BL __2printf
000078 bf00 NOP
00007a e7d0 B |L4.30|
;;;130 /*
ENDP
|L4.124|
DCD buf
|L4.128|
000080 b6c16565 DCB 182,193,"eeprom",179,246,180,237,163,161,"\r\n",0
000084 70726f6d
000088 b3f6b4ed
00008c a3a10d0a
000090 00
000091 00 DCB 0
000092 00 DCB 0
000093 00 DCB 0
|L4.148|
000094 b6c16565 DCB 182,193,"eeprom",179,201,185,166,163,172,202,253,190,221
000098 70726f6d
00009c b3c9b9a6
0000a0 a3accafd
0000a4 bedd
0000a6 c8e7cfc2 DCB 200,231,207,194,163,186
0000aa a3ba
|L4.172|
0000ac 0d0a00 DCB "\r\n",0
0000af 00 DCB 0
|L4.176|
0000b0 20253032 DCB " %02X",0
0000b4 5800
0000b6 00 DCB 0
0000b7 00 DCB 0
|L4.184|
0000b8 202d2000 DCB " - ",0
|L4.188|
0000bc b6c1bac4 DCB 182,193,186,196,202,177,": %dms, ",182,193,203,217,182,200
0000c0 cab13a20
0000c4 25646d73
0000c8 2c20b6c1
0000cc cbd9b6c8
0000d0 3a202564 DCB ": %dB/s\r\n",0
0000d4 422f730d
0000d8 0a00
0000da 00 DCB 0
0000db 00 DCB 0
AREA ||i.ee_WriteTest||, CODE, READONLY, ALIGN=2
REQUIRE _printf_percent
REQUIRE _printf_d
REQUIRE _printf_int_dec
ee_WriteTest PROC
;;;137 */
;;;138 static void ee_WriteTest(void)
000000 e92d41f0 PUSH {r4-r8,lr}
;;;139 {
;;;140 uint16_t i;
;;;141 int32_t iTime1, iTime2;
;;;142
;;;143 /* 填充测试缓冲区 */
;;;144 for (i = 0; i < EE_SIZE; i++)
000004 2400 MOVS r4,#0
000006 e003 B |L5.16|
|L5.8|
;;;145 {
;;;146 buf[i] = i;
000008 4913 LDR r1,|L5.88|
00000a 550c STRB r4,[r1,r4]
00000c 1c60 ADDS r0,r4,#1 ;144
00000e b284 UXTH r4,r0 ;144
|L5.16|
000010 f5b44f80 CMP r4,#0x4000 ;144
000014 dbf8 BLT |L5.8|
;;;147 }
;;;148
;;;149 /* 写EEPROM, 起始地址 = 0数据长度为 256 */
;;;150 iTime1 = bsp_GetRunTime(); /* 记下开始时间 */
000016 f7fffffe BL bsp_GetRunTime
00001a 4605 MOV r5,r0
;;;151 if (ee_WriteBytes(buf, 0, EE_SIZE) == 0)
00001c f44f4280 MOV r2,#0x4000
000020 2100 MOVS r1,#0
000022 480d LDR r0,|L5.88|
000024 f7fffffe BL ee_WriteBytes
000028 b920 CBNZ r0,|L5.52|
;;;152 {
;;;153 printf("写eeprom出错\r\n");
00002a a00c ADR r0,|L5.92|
00002c f7fffffe BL __2printf
|L5.48|
;;;154 return;
;;;155 }
;;;156 else
;;;157 {
;;;158 iTime2 = bsp_GetRunTime(); /* 记下结束时间 */
;;;159 printf("写eeprom成功\r\n");
;;;160 }
;;;161
;;;162
;;;163 /* 打印读速度 */
;;;164 printf("写耗时: %dms, 写速度: %dB/s\r\n", iTime2 - iTime1, (EE_SIZE * 1000) / (iTime2 - iTime1));
;;;165 }
000030 e8bd81f0 POP {r4-r8,pc}
|L5.52|
000034 f7fffffe BL bsp_GetRunTime
000038 4606 MOV r6,r0 ;158
00003a a00d ADR r0,|L5.112|
00003c f7fffffe BL __2printf
000040 1b70 SUBS r0,r6,r5 ;164
000042 f44f017a MOV r1,#0xfa0000 ;164
000046 fb91f7f0 SDIV r7,r1,r0 ;164
00004a 1b71 SUBS r1,r6,r5 ;164
00004c 463a MOV r2,r7 ;164
00004e a00d ADR r0,|L5.132|
000050 f7fffffe BL __2printf
000054 bf00 NOP
000056 e7eb B |L5.48|
;;;166
ENDP
|L5.88|
DCD buf
|L5.92|
00005c d0b46565 DCB 208,180,"eeprom",179,246,180,237,163,161,"\r\n",0
000060 70726f6d
000064 b3f6b4ed
000068 a3a10d0a
00006c 00
00006d 00 DCB 0
00006e 00 DCB 0
00006f 00 DCB 0
|L5.112|
000070 d0b46565 DCB 208,180,"eeprom",179,201,185,166,163,161,"\r\n",0
000074 70726f6d
000078 b3c9b9a6
00007c a3a10d0a
000080 00
000081 00 DCB 0
000082 00 DCB 0
000083 00 DCB 0
|L5.132|
000084 d0b4bac4 DCB 208,180,186,196,202,177,": %dms, ",208,180,203,217,182,200
000088 cab13a20
00008c 25646d73
000090 2c20d0b4
000094 cbd9b6c8
000098 3a202564 DCB ": %dB/s\r\n",0
00009c 422f730d
0000a0 0a00
0000a2 00 DCB 0
0000a3 00 DCB 0
AREA ||.bss||, DATA, NOINIT, ALIGN=0
buf
% 16384
;*** Start embedded assembler ***
#line 1 "..\\..\\User\\app\\src\\demo_i2c_eeprom.c"
AREA ||.rev16_text||, CODE
THUMB
EXPORT |__asm___17_demo_i2c_eeprom_c_4000555c____REV16|
#line 114 "..\\..\\Libraries\\CMSIS\\Include\\core_cmInstr.h"
|__asm___17_demo_i2c_eeprom_c_4000555c____REV16| PROC
#line 115
rev16 r0, r0
bx lr
ENDP
AREA ||.revsh_text||, CODE
THUMB
EXPORT |__asm___17_demo_i2c_eeprom_c_4000555c____REVSH|
#line 128
|__asm___17_demo_i2c_eeprom_c_4000555c____REVSH| PROC
#line 129
revsh r0, r0
bx lr
ENDP
;*** End embedded assembler ***

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,249 @@
; generated by Component: ARM Compiler 5.06 update 7 (build 960) Tool: ArmCC [4d365d]
; commandline ArmCC [--list --split_sections --debug -c --asm --interleave -o.\flash\obj\misc.o --asm_dir=.\Flash\List\ --list_dir=.\Flash\List\ --depend=.\flash\obj\misc.d --cpu=Cortex-M3 --apcs=interwork -O0 --diag_suppress=9931,870 -I..\..\Libraries\CMSIS\Device\ST\STM32F10x\Include -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Libraries\STM32_USB-FS-Device_Driver\inc -I..\..\Libraries\CMSIS\Include -I..\..\User\bsp -I..\..\User\bsp\inc -I..\..\User\app\inc -I..\..\User -IC:\Users\w1619\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__MICROLIB -D__UVISION_VERSION=538 -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD --omf_browse=.\flash\obj\misc.crf ..\..\Libraries\STM32F10x_StdPeriph_Driver\src\misc.c]
THUMB
AREA ||i.NVIC_Init||, CODE, READONLY, ALIGN=2
NVIC_Init PROC
;;;117 */
;;;118 void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)
000000 b570 PUSH {r4-r6,lr}
;;;119 {
;;;120 uint32_t tmppriority = 0x00, tmppre = 0x00, tmpsub = 0x0F;
000002 2100 MOVS r1,#0
000004 2300 MOVS r3,#0
000006 220f MOVS r2,#0xf
;;;121
;;;122 /* Check the parameters */
;;;123 assert_param(IS_FUNCTIONAL_STATE(NVIC_InitStruct->NVIC_IRQChannelCmd));
;;;124 assert_param(IS_NVIC_PREEMPTION_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority));
;;;125 assert_param(IS_NVIC_SUB_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelSubPriority));
;;;126
;;;127 if (NVIC_InitStruct->NVIC_IRQChannelCmd != DISABLE)
000008 78c4 LDRB r4,[r0,#3]
00000a b304 CBZ r4,|L1.78|
;;;128 {
;;;129 /* Compute the Corresponding IRQ Priority --------------------------------*/
;;;130 tmppriority = (0x700 - ((SCB->AIRCR) & (uint32_t)0x700))>> 0x08;
00000c 4c15 LDR r4,|L1.100|
00000e 6824 LDR r4,[r4,#0]
000010 f40464e0 AND r4,r4,#0x700
000014 f5c464e0 RSB r4,r4,#0x700
000018 0a21 LSRS r1,r4,#8
;;;131 tmppre = (0x4 - tmppriority);
00001a f1c10304 RSB r3,r1,#4
;;;132 tmpsub = tmpsub >> tmppriority;
00001e 40ca LSRS r2,r2,r1
;;;133
;;;134 tmppriority = (uint32_t)NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << tmppre;
000020 7844 LDRB r4,[r0,#1]
000022 fa04f103 LSL r1,r4,r3
;;;135 tmppriority |= NVIC_InitStruct->NVIC_IRQChannelSubPriority & tmpsub;
000026 7884 LDRB r4,[r0,#2]
000028 4014 ANDS r4,r4,r2
00002a 4321 ORRS r1,r1,r4
;;;136 tmppriority = tmppriority << 0x04;
00002c 0109 LSLS r1,r1,#4
;;;137
;;;138 NVIC->IP[NVIC_InitStruct->NVIC_IRQChannel] = tmppriority;
00002e 4c0e LDR r4,|L1.104|
000030 7806 LDRB r6,[r0,#0]
000032 55a1 STRB r1,[r4,r6]
;;;139
;;;140 /* Enable the Selected IRQ Channels --------------------------------------*/
;;;141 NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
000034 7804 LDRB r4,[r0,#0]
000036 f004051f AND r5,r4,#0x1f
00003a 2401 MOVS r4,#1
00003c 40ac LSLS r4,r4,r5
00003e 7805 LDRB r5,[r0,#0]
000040 116d ASRS r5,r5,#5
000042 00ad LSLS r5,r5,#2
000044 f10525e0 ADD r5,r5,#0xe000e000
000048 f8c54100 STR r4,[r5,#0x100]
00004c e009 B |L1.98|
|L1.78|
;;;142 (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
;;;143 }
;;;144 else
;;;145 {
;;;146 /* Disable the Selected IRQ Channels -------------------------------------*/
;;;147 NVIC->ICER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
00004e 7804 LDRB r4,[r0,#0]
000050 f004051f AND r5,r4,#0x1f
000054 2401 MOVS r4,#1
000056 40ac LSLS r4,r4,r5
000058 4d04 LDR r5,|L1.108|
00005a 7806 LDRB r6,[r0,#0]
00005c 1176 ASRS r6,r6,#5
00005e f8454026 STR r4,[r5,r6,LSL #2]
|L1.98|
;;;148 (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
;;;149 }
;;;150 }
000062 bd70 POP {r4-r6,pc}
;;;151
ENDP
|L1.100|
DCD 0xe000ed0c
|L1.104|
DCD 0xe000e400
|L1.108|
DCD 0xe000e180
AREA ||i.NVIC_PriorityGroupConfig||, CODE, READONLY, ALIGN=2
NVIC_PriorityGroupConfig PROC
;;;101 */
;;;102 void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)
000000 4902 LDR r1,|L2.12|
;;;103 {
;;;104 /* Check the parameters */
;;;105 assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));
;;;106
;;;107 /* Set the PRIGROUP[10:8] bits according to NVIC_PriorityGroup value */
;;;108 SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup;
000002 4301 ORRS r1,r1,r0
000004 4a02 LDR r2,|L2.16|
000006 6011 STR r1,[r2,#0]
;;;109 }
000008 4770 BX lr
;;;110
ENDP
00000a 0000 DCW 0x0000
|L2.12|
DCD 0x05fa0000
|L2.16|
DCD 0xe000ed0c
AREA ||i.NVIC_SetVectorTable||, CODE, READONLY, ALIGN=2
NVIC_SetVectorTable PROC
;;;161 */
;;;162 void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset)
000000 4a02 LDR r2,|L3.12|
;;;163 {
;;;164 /* Check the parameters */
;;;165 assert_param(IS_NVIC_VECTTAB(NVIC_VectTab));
;;;166 assert_param(IS_NVIC_OFFSET(Offset));
;;;167
;;;168 SCB->VTOR = NVIC_VectTab | (Offset & (uint32_t)0x1FFFFF80);
000002 400a ANDS r2,r2,r1
000004 4302 ORRS r2,r2,r0
000006 4b02 LDR r3,|L3.16|
000008 601a STR r2,[r3,#0]
;;;169 }
00000a 4770 BX lr
;;;170
ENDP
|L3.12|
DCD 0x1fffff80
|L3.16|
DCD 0xe000ed08
AREA ||i.NVIC_SystemLPConfig||, CODE, READONLY, ALIGN=2
NVIC_SystemLPConfig PROC
;;;180 */
;;;181 void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState)
000000 b129 CBZ r1,|L4.14|
;;;182 {
;;;183 /* Check the parameters */
;;;184 assert_param(IS_NVIC_LP(LowPowerMode));
;;;185 assert_param(IS_FUNCTIONAL_STATE(NewState));
;;;186
;;;187 if (NewState != DISABLE)
;;;188 {
;;;189 SCB->SCR |= LowPowerMode;
000002 4a06 LDR r2,|L4.28|
000004 6812 LDR r2,[r2,#0]
000006 4302 ORRS r2,r2,r0
000008 4b04 LDR r3,|L4.28|
00000a 601a STR r2,[r3,#0]
00000c e004 B |L4.24|
|L4.14|
;;;190 }
;;;191 else
;;;192 {
;;;193 SCB->SCR &= (uint32_t)(~(uint32_t)LowPowerMode);
00000e 4a03 LDR r2,|L4.28|
000010 6812 LDR r2,[r2,#0]
000012 4382 BICS r2,r2,r0
000014 4b01 LDR r3,|L4.28|
000016 601a STR r2,[r3,#0]
|L4.24|
;;;194 }
;;;195 }
000018 4770 BX lr
;;;196
ENDP
00001a 0000 DCW 0x0000
|L4.28|
DCD 0xe000ed10
AREA ||i.SysTick_CLKSourceConfig||, CODE, READONLY, ALIGN=1
SysTick_CLKSourceConfig PROC
;;;204 */
;;;205 void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)
000000 2804 CMP r0,#4
;;;206 {
;;;207 /* Check the parameters */
;;;208 assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource));
;;;209 if (SysTick_CLKSource == SysTick_CLKSource_HCLK)
000002 d108 BNE |L5.22|
;;;210 {
;;;211 SysTick->CTRL |= SysTick_CLKSource_HCLK;
000004 f04f21e0 MOV r1,#0xe000e000
000008 6909 LDR r1,[r1,#0x10]
00000a f0410104 ORR r1,r1,#4
00000e f04f22e0 MOV r2,#0xe000e000
000012 6111 STR r1,[r2,#0x10]
000014 e007 B |L5.38|
|L5.22|
;;;212 }
;;;213 else
;;;214 {
;;;215 SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8;
000016 f04f21e0 MOV r1,#0xe000e000
00001a 6909 LDR r1,[r1,#0x10]
00001c f0210104 BIC r1,r1,#4
000020 f04f22e0 MOV r2,#0xe000e000
000024 6111 STR r1,[r2,#0x10]
|L5.38|
;;;216 }
;;;217 }
000026 4770 BX lr
;;;218
ENDP
;*** Start embedded assembler ***
#line 1 "..\\..\\Libraries\\STM32F10x_StdPeriph_Driver\\src\\misc.c"
AREA ||.rev16_text||, CODE
THUMB
EXPORT |__asm___6_misc_c_d0fc1254____REV16|
#line 114 "..\\..\\Libraries\\CMSIS\\Include\\core_cmInstr.h"
|__asm___6_misc_c_d0fc1254____REV16| PROC
#line 115
rev16 r0, r0
bx lr
ENDP
AREA ||.revsh_text||, CODE
THUMB
EXPORT |__asm___6_misc_c_d0fc1254____REVSH|
#line 128
|__asm___6_misc_c_d0fc1254____REVSH| PROC
#line 129
revsh r0, r0
bx lr
ENDP
;*** End embedded assembler ***

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,29 @@
; generated by Component: ARM Compiler 5.06 update 7 (build 960) Tool: ArmCC [4d365d]
; commandline ArmCC [--list --split_sections --debug -c --asm --interleave -o.\flash\obj\stm32f10x_assert.o --asm_dir=.\Flash\List\ --list_dir=.\Flash\List\ --depend=.\flash\obj\stm32f10x_assert.d --cpu=Cortex-M3 --apcs=interwork -O0 --diag_suppress=9931,870 -I..\..\Libraries\CMSIS\Device\ST\STM32F10x\Include -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Libraries\STM32_USB-FS-Device_Driver\inc -I..\..\Libraries\CMSIS\Include -I..\..\User\bsp -I..\..\User\bsp\inc -I..\..\User\app\inc -I..\..\User -IC:\Users\w1619\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__MICROLIB -D__UVISION_VERSION=538 -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD --omf_browse=.\flash\obj\stm32f10x_assert.crf ..\..\User\bsp\stm32f10x_assert.c]
THUMB
;*** Start embedded assembler ***
#line 1 "..\\..\\User\\bsp\\stm32f10x_assert.c"
AREA ||.rev16_text||, CODE
THUMB
EXPORT |__asm___18_stm32f10x_assert_c____REV16|
#line 114 "..\\..\\Libraries\\CMSIS\\Include\\core_cmInstr.h"
|__asm___18_stm32f10x_assert_c____REV16| PROC
#line 115
rev16 r0, r0
bx lr
ENDP
AREA ||.revsh_text||, CODE
THUMB
EXPORT |__asm___18_stm32f10x_assert_c____REVSH|
#line 128
|__asm___18_stm32f10x_assert_c____REVSH| PROC
#line 129
revsh r0, r0
bx lr
ENDP
;*** End embedded assembler ***

View File

@@ -0,0 +1,522 @@
; generated by Component: ARM Compiler 5.06 update 7 (build 960) Tool: ArmCC [4d365d]
; commandline ArmCC [--list --split_sections --debug -c --asm --interleave -o.\flash\obj\stm32f10x_dac.o --asm_dir=.\Flash\List\ --list_dir=.\Flash\List\ --depend=.\flash\obj\stm32f10x_dac.d --cpu=Cortex-M3 --apcs=interwork -O0 --diag_suppress=9931,870 -I..\..\Libraries\CMSIS\Device\ST\STM32F10x\Include -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Libraries\STM32_USB-FS-Device_Driver\inc -I..\..\Libraries\CMSIS\Include -I..\..\User\bsp -I..\..\User\bsp\inc -I..\..\User\app\inc -I..\..\User -IC:\Users\w1619\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__MICROLIB -D__UVISION_VERSION=538 -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD --omf_browse=.\flash\obj\stm32f10x_dac.crf ..\..\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_dac.c]
THUMB
AREA ||i.DAC_Cmd||, CODE, READONLY, ALIGN=2
DAC_Cmd PROC
;;;178 */
;;;179 void DAC_Cmd(uint32_t DAC_Channel, FunctionalState NewState)
000000 b139 CBZ r1,|L1.18|
;;;180 {
;;;181 /* Check the parameters */
;;;182 assert_param(IS_DAC_CHANNEL(DAC_Channel));
;;;183 assert_param(IS_FUNCTIONAL_STATE(NewState));
;;;184 if (NewState != DISABLE)
;;;185 {
;;;186 /* Enable the selected DAC channel */
;;;187 DAC->CR |= (DAC_CR_EN1 << DAC_Channel);
000002 4a08 LDR r2,|L1.36|
000004 6812 LDR r2,[r2,#0]
000006 2301 MOVS r3,#1
000008 4083 LSLS r3,r3,r0
00000a 431a ORRS r2,r2,r3
00000c 4b05 LDR r3,|L1.36|
00000e 601a STR r2,[r3,#0]
000010 e006 B |L1.32|
|L1.18|
;;;188 }
;;;189 else
;;;190 {
;;;191 /* Disable the selected DAC channel */
;;;192 DAC->CR &= ~(DAC_CR_EN1 << DAC_Channel);
000012 4a04 LDR r2,|L1.36|
000014 6812 LDR r2,[r2,#0]
000016 2301 MOVS r3,#1
000018 4083 LSLS r3,r3,r0
00001a 439a BICS r2,r2,r3
00001c 4b01 LDR r3,|L1.36|
00001e 601a STR r2,[r3,#0]
|L1.32|
;;;193 }
;;;194 }
000020 4770 BX lr
;;;195 #if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
ENDP
000022 0000 DCW 0x0000
|L1.36|
DCD 0x40007400
AREA ||i.DAC_DMACmd||, CODE, READONLY, ALIGN=2
DAC_DMACmd PROC
;;;238 */
;;;239 void DAC_DMACmd(uint32_t DAC_Channel, FunctionalState NewState)
000000 b141 CBZ r1,|L2.20|
;;;240 {
;;;241 /* Check the parameters */
;;;242 assert_param(IS_DAC_CHANNEL(DAC_Channel));
;;;243 assert_param(IS_FUNCTIONAL_STATE(NewState));
;;;244 if (NewState != DISABLE)
;;;245 {
;;;246 /* Enable the selected DAC channel DMA request */
;;;247 DAC->CR |= (DAC_CR_DMAEN1 << DAC_Channel);
000002 4a09 LDR r2,|L2.40|
000004 6812 LDR r2,[r2,#0]
000006 f44f5380 MOV r3,#0x1000
00000a 4083 LSLS r3,r3,r0
00000c 431a ORRS r2,r2,r3
00000e 4b06 LDR r3,|L2.40|
000010 601a STR r2,[r3,#0]
000012 e007 B |L2.36|
|L2.20|
;;;248 }
;;;249 else
;;;250 {
;;;251 /* Disable the selected DAC channel DMA request */
;;;252 DAC->CR &= ~(DAC_CR_DMAEN1 << DAC_Channel);
000014 4a04 LDR r2,|L2.40|
000016 6812 LDR r2,[r2,#0]
000018 f44f5380 MOV r3,#0x1000
00001c 4083 LSLS r3,r3,r0
00001e 439a BICS r2,r2,r3
000020 4b01 LDR r3,|L2.40|
000022 601a STR r2,[r3,#0]
|L2.36|
;;;253 }
;;;254 }
000024 4770 BX lr
;;;255
ENDP
000026 0000 DCW 0x0000
|L2.40|
DCD 0x40007400
AREA ||i.DAC_DeInit||, CODE, READONLY, ALIGN=1
DAC_DeInit PROC
;;;103 */
;;;104 void DAC_DeInit(void)
000000 b510 PUSH {r4,lr}
;;;105 {
;;;106 /* Enable DAC reset state */
;;;107 RCC_APB1PeriphResetCmd(RCC_APB1Periph_DAC, ENABLE);
000002 2101 MOVS r1,#1
000004 0748 LSLS r0,r1,#29
000006 f7fffffe BL RCC_APB1PeriphResetCmd
;;;108 /* Release DAC from reset state */
;;;109 RCC_APB1PeriphResetCmd(RCC_APB1Periph_DAC, DISABLE);
00000a 2100 MOVS r1,#0
00000c f04f5000 MOV r0,#0x20000000
000010 f7fffffe BL RCC_APB1PeriphResetCmd
;;;110 }
000014 bd10 POP {r4,pc}
;;;111
ENDP
AREA ||i.DAC_DualSoftwareTriggerCmd||, CODE, READONLY, ALIGN=2
DAC_DualSoftwareTriggerCmd PROC
;;;289 */
;;;290 void DAC_DualSoftwareTriggerCmd(FunctionalState NewState)
000000 b130 CBZ r0,|L4.16|
;;;291 {
;;;292 /* Check the parameters */
;;;293 assert_param(IS_FUNCTIONAL_STATE(NewState));
;;;294 if (NewState != DISABLE)
;;;295 {
;;;296 /* Enable software trigger for both DAC channels */
;;;297 DAC->SWTRIGR |= DUAL_SWTRIG_SET ;
000002 4907 LDR r1,|L4.32|
000004 6809 LDR r1,[r1,#0]
000006 f0410103 ORR r1,r1,#3
00000a 4a05 LDR r2,|L4.32|
00000c 6011 STR r1,[r2,#0]
00000e e005 B |L4.28|
|L4.16|
;;;298 }
;;;299 else
;;;300 {
;;;301 /* Disable software trigger for both DAC channels */
;;;302 DAC->SWTRIGR &= DUAL_SWTRIG_RESET;
000010 4903 LDR r1,|L4.32|
000012 6809 LDR r1,[r1,#0]
000014 f0210103 BIC r1,r1,#3
000018 4a01 LDR r2,|L4.32|
00001a 6011 STR r1,[r2,#0]
|L4.28|
;;;303 }
;;;304 }
00001c 4770 BX lr
;;;305
ENDP
00001e 0000 DCW 0x0000
|L4.32|
DCD 0x40007404
AREA ||i.DAC_GetDataOutputValue||, CODE, READONLY, ALIGN=2
DAC_GetDataOutputValue PROC
;;;435 */
;;;436 uint16_t DAC_GetDataOutputValue(uint32_t DAC_Channel)
000000 b508 PUSH {r3,lr}
;;;437 {
000002 4601 MOV r1,r0
;;;438 __IO uint32_t tmp = 0;
000004 2000 MOVS r0,#0
000006 9000 STR r0,[sp,#0]
;;;439
;;;440 /* Check the parameters */
;;;441 assert_param(IS_DAC_CHANNEL(DAC_Channel));
;;;442
;;;443 tmp = (uint32_t) DAC_BASE ;
000008 4805 LDR r0,|L5.32|
00000a 9000 STR r0,[sp,#0]
;;;444 tmp += DOR_OFFSET + ((uint32_t)DAC_Channel >> 2);
00000c 202c MOVS r0,#0x2c
00000e eb000091 ADD r0,r0,r1,LSR #2
000012 9a00 LDR r2,[sp,#0]
000014 4410 ADD r0,r0,r2
000016 9000 STR r0,[sp,#0]
;;;445
;;;446 /* Returns the DAC channel data output register value */
;;;447 return (uint16_t) (*(__IO uint32_t*) tmp);
000018 9800 LDR r0,[sp,#0]
00001a 6800 LDR r0,[r0,#0]
00001c b280 UXTH r0,r0
;;;448 }
00001e bd08 POP {r3,pc}
;;;449
ENDP
|L5.32|
DCD 0x40007400
AREA ||i.DAC_Init||, CODE, READONLY, ALIGN=2
DAC_Init PROC
;;;122 */
;;;123 void DAC_Init(uint32_t DAC_Channel, DAC_InitTypeDef* DAC_InitStruct)
000000 b530 PUSH {r4,r5,lr}
;;;124 {
;;;125 uint32_t tmpreg1 = 0, tmpreg2 = 0;
000002 2200 MOVS r2,#0
000004 2300 MOVS r3,#0
;;;126 /* Check the DAC parameters */
;;;127 assert_param(IS_DAC_TRIGGER(DAC_InitStruct->DAC_Trigger));
;;;128 assert_param(IS_DAC_GENERATE_WAVE(DAC_InitStruct->DAC_WaveGeneration));
;;;129 assert_param(IS_DAC_LFSR_UNMASK_TRIANGLE_AMPLITUDE(DAC_InitStruct->DAC_LFSRUnmask_TriangleAmplitude));
;;;130 assert_param(IS_DAC_OUTPUT_BUFFER_STATE(DAC_InitStruct->DAC_OutputBuffer));
;;;131 /*---------------------------- DAC CR Configuration --------------------------*/
;;;132 /* Get the DAC CR value */
;;;133 tmpreg1 = DAC->CR;
000006 4c0a LDR r4,|L6.48|
000008 6822 LDR r2,[r4,#0]
;;;134 /* Clear BOFFx, TENx, TSELx, WAVEx and MAMPx bits */
;;;135 tmpreg1 &= ~(CR_CLEAR_MASK << DAC_Channel);
00000a f64074fe MOV r4,#0xffe
00000e 4084 LSLS r4,r4,r0
000010 43a2 BICS r2,r2,r4
;;;136 /* Configure for the selected DAC channel: buffer output, trigger, wave generation,
;;;137 mask/amplitude for wave generation */
;;;138 /* Set TSELx and TENx bits according to DAC_Trigger value */
;;;139 /* Set WAVEx bits according to DAC_WaveGeneration value */
;;;140 /* Set MAMPx bits according to DAC_LFSRUnmask_TriangleAmplitude value */
;;;141 /* Set BOFFx bit according to DAC_OutputBuffer value */
;;;142 tmpreg2 = (DAC_InitStruct->DAC_Trigger | DAC_InitStruct->DAC_WaveGeneration |
000012 e9d14500 LDRD r4,r5,[r1,#0]
000016 432c ORRS r4,r4,r5
000018 688d LDR r5,[r1,#8]
00001a 432c ORRS r4,r4,r5
00001c 68cd LDR r5,[r1,#0xc]
00001e ea440305 ORR r3,r4,r5
;;;143 DAC_InitStruct->DAC_LFSRUnmask_TriangleAmplitude | DAC_InitStruct->DAC_OutputBuffer);
;;;144 /* Calculate CR register value depending on DAC_Channel */
;;;145 tmpreg1 |= tmpreg2 << DAC_Channel;
000022 fa03f400 LSL r4,r3,r0
000026 4322 ORRS r2,r2,r4
;;;146 /* Write to DAC CR */
;;;147 DAC->CR = tmpreg1;
000028 4c01 LDR r4,|L6.48|
00002a 6022 STR r2,[r4,#0]
;;;148 }
00002c bd30 POP {r4,r5,pc}
;;;149
ENDP
00002e 0000 DCW 0x0000
|L6.48|
DCD 0x40007400
AREA ||i.DAC_SetChannel1Data||, CODE, READONLY, ALIGN=2
DAC_SetChannel1Data PROC
;;;347 */
;;;348 void DAC_SetChannel1Data(uint32_t DAC_Align, uint16_t Data)
000000 b508 PUSH {r3,lr}
;;;349 {
;;;350 __IO uint32_t tmp = 0;
000002 2200 MOVS r2,#0
000004 9200 STR r2,[sp,#0]
;;;351
;;;352 /* Check the parameters */
;;;353 assert_param(IS_DAC_ALIGN(DAC_Align));
;;;354 assert_param(IS_DAC_DATA(Data));
;;;355
;;;356 tmp = (uint32_t)DAC_BASE;
000006 4a05 LDR r2,|L7.28|
000008 9200 STR r2,[sp,#0]
;;;357 tmp += DHR12R1_OFFSET + DAC_Align;
00000a f1000208 ADD r2,r0,#8
00000e 9b00 LDR r3,[sp,#0]
000010 441a ADD r2,r2,r3
000012 9200 STR r2,[sp,#0]
;;;358
;;;359 /* Set the DAC channel1 selected data holding register */
;;;360 *(__IO uint32_t *) tmp = Data;
000014 9a00 LDR r2,[sp,#0]
000016 6011 STR r1,[r2,#0]
;;;361 }
000018 bd08 POP {r3,pc}
;;;362
ENDP
00001a 0000 DCW 0x0000
|L7.28|
DCD 0x40007400
AREA ||i.DAC_SetChannel2Data||, CODE, READONLY, ALIGN=2
DAC_SetChannel2Data PROC
;;;372 */
;;;373 void DAC_SetChannel2Data(uint32_t DAC_Align, uint16_t Data)
000000 b508 PUSH {r3,lr}
;;;374 {
;;;375 __IO uint32_t tmp = 0;
000002 2200 MOVS r2,#0
000004 9200 STR r2,[sp,#0]
;;;376
;;;377 /* Check the parameters */
;;;378 assert_param(IS_DAC_ALIGN(DAC_Align));
;;;379 assert_param(IS_DAC_DATA(Data));
;;;380
;;;381 tmp = (uint32_t)DAC_BASE;
000006 4a05 LDR r2,|L8.28|
000008 9200 STR r2,[sp,#0]
;;;382 tmp += DHR12R2_OFFSET + DAC_Align;
00000a f1000214 ADD r2,r0,#0x14
00000e 9b00 LDR r3,[sp,#0]
000010 441a ADD r2,r2,r3
000012 9200 STR r2,[sp,#0]
;;;383
;;;384 /* Set the DAC channel2 selected data holding register */
;;;385 *(__IO uint32_t *)tmp = Data;
000014 9a00 LDR r2,[sp,#0]
000016 6011 STR r1,[r2,#0]
;;;386 }
000018 bd08 POP {r3,pc}
;;;387
ENDP
00001a 0000 DCW 0x0000
|L8.28|
DCD 0x40007400
AREA ||i.DAC_SetDualChannelData||, CODE, READONLY, ALIGN=2
DAC_SetDualChannelData PROC
;;;401 */
;;;402 void DAC_SetDualChannelData(uint32_t DAC_Align, uint16_t Data2, uint16_t Data1)
000000 b530 PUSH {r4,r5,lr}
;;;403 {
;;;404 uint32_t data = 0, tmp = 0;
000002 2400 MOVS r4,#0
000004 2300 MOVS r3,#0
;;;405
;;;406 /* Check the parameters */
;;;407 assert_param(IS_DAC_ALIGN(DAC_Align));
;;;408 assert_param(IS_DAC_DATA(Data1));
;;;409 assert_param(IS_DAC_DATA(Data2));
;;;410
;;;411 /* Calculate and set dual DAC data holding register value */
;;;412 if (DAC_Align == DAC_Align_8b_R)
000006 2808 CMP r0,#8
000008 d102 BNE |L9.16|
;;;413 {
;;;414 data = ((uint32_t)Data2 << 8) | Data1;
00000a ea422401 ORR r4,r2,r1,LSL #8
00000e e001 B |L9.20|
|L9.16|
;;;415 }
;;;416 else
;;;417 {
;;;418 data = ((uint32_t)Data2 << 16) | Data1;
000010 ea424401 ORR r4,r2,r1,LSL #16
|L9.20|
;;;419 }
;;;420
;;;421 tmp = (uint32_t)DAC_BASE;
000014 4b02 LDR r3,|L9.32|
;;;422 tmp += DHR12RD_OFFSET + DAC_Align;
000016 f1000520 ADD r5,r0,#0x20
00001a 442b ADD r3,r3,r5
;;;423
;;;424 /* Set the dual DAC selected data holding register */
;;;425 *(__IO uint32_t *)tmp = data;
00001c 601c STR r4,[r3,#0]
;;;426 }
00001e bd30 POP {r4,r5,pc}
;;;427
ENDP
|L9.32|
DCD 0x40007400
AREA ||i.DAC_SoftwareTriggerCmd||, CODE, READONLY, ALIGN=2
DAC_SoftwareTriggerCmd PROC
;;;265 */
;;;266 void DAC_SoftwareTriggerCmd(uint32_t DAC_Channel, FunctionalState NewState)
000000 b510 PUSH {r4,lr}
;;;267 {
;;;268 /* Check the parameters */
;;;269 assert_param(IS_DAC_CHANNEL(DAC_Channel));
;;;270 assert_param(IS_FUNCTIONAL_STATE(NewState));
;;;271 if (NewState != DISABLE)
000002 b141 CBZ r1,|L10.22|
;;;272 {
;;;273 /* Enable software trigger for the selected DAC channel */
;;;274 DAC->SWTRIGR |= (uint32_t)DAC_SWTRIGR_SWTRIG1 << (DAC_Channel >> 4);
000004 4a08 LDR r2,|L10.40|
000006 6812 LDR r2,[r2,#0]
000008 0904 LSRS r4,r0,#4
00000a 2301 MOVS r3,#1
00000c 40a3 LSLS r3,r3,r4
00000e 431a ORRS r2,r2,r3
000010 4b05 LDR r3,|L10.40|
000012 601a STR r2,[r3,#0]
000014 e007 B |L10.38|
|L10.22|
;;;275 }
;;;276 else
;;;277 {
;;;278 /* Disable software trigger for the selected DAC channel */
;;;279 DAC->SWTRIGR &= ~((uint32_t)DAC_SWTRIGR_SWTRIG1 << (DAC_Channel >> 4));
000016 4a04 LDR r2,|L10.40|
000018 6812 LDR r2,[r2,#0]
00001a 0904 LSRS r4,r0,#4
00001c 2301 MOVS r3,#1
00001e 40a3 LSLS r3,r3,r4
000020 439a BICS r2,r2,r3
000022 4b01 LDR r3,|L10.40|
000024 601a STR r2,[r3,#0]
|L10.38|
;;;280 }
;;;281 }
000026 bd10 POP {r4,pc}
;;;282
ENDP
|L10.40|
DCD 0x40007404
AREA ||i.DAC_StructInit||, CODE, READONLY, ALIGN=1
DAC_StructInit PROC
;;;155 */
;;;156 void DAC_StructInit(DAC_InitTypeDef* DAC_InitStruct)
000000 2100 MOVS r1,#0
;;;157 {
;;;158 /*--------------- Reset DAC init structure parameters values -----------------*/
;;;159 /* Initialize the DAC_Trigger member */
;;;160 DAC_InitStruct->DAC_Trigger = DAC_Trigger_None;
000002 6001 STR r1,[r0,#0]
;;;161 /* Initialize the DAC_WaveGeneration member */
;;;162 DAC_InitStruct->DAC_WaveGeneration = DAC_WaveGeneration_None;
000004 6041 STR r1,[r0,#4]
;;;163 /* Initialize the DAC_LFSRUnmask_TriangleAmplitude member */
;;;164 DAC_InitStruct->DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0;
000006 6081 STR r1,[r0,#8]
;;;165 /* Initialize the DAC_OutputBuffer member */
;;;166 DAC_InitStruct->DAC_OutputBuffer = DAC_OutputBuffer_Enable;
000008 60c1 STR r1,[r0,#0xc]
;;;167 }
00000a 4770 BX lr
;;;168
ENDP
AREA ||i.DAC_WaveGenerationCmd||, CODE, READONLY, ALIGN=2
DAC_WaveGenerationCmd PROC
;;;319 */
;;;320 void DAC_WaveGenerationCmd(uint32_t DAC_Channel, uint32_t DAC_Wave, FunctionalState NewState)
000000 b510 PUSH {r4,lr}
;;;321 {
;;;322 /* Check the parameters */
;;;323 assert_param(IS_DAC_CHANNEL(DAC_Channel));
;;;324 assert_param(IS_DAC_WAVE(DAC_Wave));
;;;325 assert_param(IS_FUNCTIONAL_STATE(NewState));
;;;326 if (NewState != DISABLE)
000002 b13a CBZ r2,|L12.20|
;;;327 {
;;;328 /* Enable the selected wave generation for the selected DAC channel */
;;;329 DAC->CR |= DAC_Wave << DAC_Channel;
000004 4b07 LDR r3,|L12.36|
000006 681b LDR r3,[r3,#0]
000008 fa01f400 LSL r4,r1,r0
00000c 4323 ORRS r3,r3,r4
00000e 4c05 LDR r4,|L12.36|
000010 6023 STR r3,[r4,#0]
000012 e006 B |L12.34|
|L12.20|
;;;330 }
;;;331 else
;;;332 {
;;;333 /* Disable the selected wave generation for the selected DAC channel */
;;;334 DAC->CR &= ~(DAC_Wave << DAC_Channel);
000014 4b03 LDR r3,|L12.36|
000016 681b LDR r3,[r3,#0]
000018 fa01f400 LSL r4,r1,r0
00001c 43a3 BICS r3,r3,r4
00001e 4c01 LDR r4,|L12.36|
000020 6023 STR r3,[r4,#0]
|L12.34|
;;;335 }
;;;336 }
000022 bd10 POP {r4,pc}
;;;337
ENDP
|L12.36|
DCD 0x40007400
;*** Start embedded assembler ***
#line 1 "..\\..\\Libraries\\STM32F10x_StdPeriph_Driver\\src\\stm32f10x_dac.c"
AREA ||.rev16_text||, CODE
THUMB
EXPORT |__asm___15_stm32f10x_dac_c_4da4a0a9____REV16|
#line 114 "..\\..\\Libraries\\CMSIS\\Include\\core_cmInstr.h"
|__asm___15_stm32f10x_dac_c_4da4a0a9____REV16| PROC
#line 115
rev16 r0, r0
bx lr
ENDP
AREA ||.revsh_text||, CODE
THUMB
EXPORT |__asm___15_stm32f10x_dac_c_4da4a0a9____REVSH|
#line 128
|__asm___15_stm32f10x_dac_c_4da4a0a9____REVSH| PROC
#line 129
revsh r0, r0
bx lr
ENDP
;*** End embedded assembler ***

View File

@@ -0,0 +1,744 @@
; generated by Component: ARM Compiler 5.06 update 7 (build 960) Tool: ArmCC [4d365d]
; commandline ArmCC [--list --split_sections --debug -c --asm --interleave -o.\flash\obj\stm32f10x_dma.o --asm_dir=.\Flash\List\ --list_dir=.\Flash\List\ --depend=.\flash\obj\stm32f10x_dma.d --cpu=Cortex-M3 --apcs=interwork -O0 --diag_suppress=9931,870 -I..\..\Libraries\CMSIS\Device\ST\STM32F10x\Include -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Libraries\STM32_USB-FS-Device_Driver\inc -I..\..\Libraries\CMSIS\Include -I..\..\User\bsp -I..\..\User\bsp\inc -I..\..\User\app\inc -I..\..\User -IC:\Users\w1619\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__MICROLIB -D__UVISION_VERSION=538 -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD --omf_browse=.\flash\obj\stm32f10x_dma.crf ..\..\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_dma.c]
THUMB
AREA ||i.DMA_ClearFlag||, CODE, READONLY, ALIGN=2
DMA_ClearFlag PROC
;;;528 */
;;;529 void DMA_ClearFlag(uint32_t DMAy_FLAG)
000000 f0005180 AND r1,r0,#0x10000000
;;;530 {
;;;531 /* Check the parameters */
;;;532 assert_param(IS_DMA_CLEAR_FLAG(DMAy_FLAG));
;;;533
;;;534 /* Calculate the used DMAy */
;;;535 if ((DMAy_FLAG & FLAG_Mask) != (uint32_t)RESET)
000004 b111 CBZ r1,|L1.12|
;;;536 {
;;;537 /* Clear the selected DMAy flags */
;;;538 DMA2->IFCR = DMAy_FLAG;
000006 4903 LDR r1,|L1.20|
000008 6008 STR r0,[r1,#0]
00000a e001 B |L1.16|
|L1.12|
;;;539 }
;;;540 else
;;;541 {
;;;542 /* Clear the selected DMAy flags */
;;;543 DMA1->IFCR = DMAy_FLAG;
00000c 4902 LDR r1,|L1.24|
00000e 6048 STR r0,[r1,#4]
|L1.16|
;;;544 }
;;;545 }
000010 4770 BX lr
;;;546
ENDP
000012 0000 DCW 0x0000
|L1.20|
DCD 0x40020404
|L1.24|
DCD 0x40020000
AREA ||i.DMA_ClearITPendingBit||, CODE, READONLY, ALIGN=2
DMA_ClearITPendingBit PROC
;;;689 */
;;;690 void DMA_ClearITPendingBit(uint32_t DMAy_IT)
000000 f0005180 AND r1,r0,#0x10000000
;;;691 {
;;;692 /* Check the parameters */
;;;693 assert_param(IS_DMA_CLEAR_IT(DMAy_IT));
;;;694
;;;695 /* Calculate the used DMAy */
;;;696 if ((DMAy_IT & FLAG_Mask) != (uint32_t)RESET)
000004 b111 CBZ r1,|L2.12|
;;;697 {
;;;698 /* Clear the selected DMAy interrupt pending bits */
;;;699 DMA2->IFCR = DMAy_IT;
000006 4903 LDR r1,|L2.20|
000008 6008 STR r0,[r1,#0]
00000a e001 B |L2.16|
|L2.12|
;;;700 }
;;;701 else
;;;702 {
;;;703 /* Clear the selected DMAy interrupt pending bits */
;;;704 DMA1->IFCR = DMAy_IT;
00000c 4902 LDR r1,|L2.24|
00000e 6048 STR r0,[r1,#4]
|L2.16|
;;;705 }
;;;706 }
000010 4770 BX lr
;;;707
ENDP
000012 0000 DCW 0x0000
|L2.20|
DCD 0x40020404
|L2.24|
DCD 0x40020000
AREA ||i.DMA_Cmd||, CODE, READONLY, ALIGN=1
DMA_Cmd PROC
;;;299 */
;;;300 void DMA_Cmd(DMA_Channel_TypeDef* DMAy_Channelx, FunctionalState NewState)
000000 b121 CBZ r1,|L3.12|
;;;301 {
;;;302 /* Check the parameters */
;;;303 assert_param(IS_DMA_ALL_PERIPH(DMAy_Channelx));
;;;304 assert_param(IS_FUNCTIONAL_STATE(NewState));
;;;305
;;;306 if (NewState != DISABLE)
;;;307 {
;;;308 /* Enable the selected DMAy Channelx */
;;;309 DMAy_Channelx->CCR |= DMA_CCR1_EN;
000002 6802 LDR r2,[r0,#0]
000004 f0420201 ORR r2,r2,#1
000008 6002 STR r2,[r0,#0]
00000a e004 B |L3.22|
|L3.12|
;;;310 }
;;;311 else
;;;312 {
;;;313 /* Disable the selected DMAy Channelx */
;;;314 DMAy_Channelx->CCR &= (uint16_t)(~DMA_CCR1_EN);
00000c 6802 LDR r2,[r0,#0]
00000e f64f73fe MOV r3,#0xfffe
000012 401a ANDS r2,r2,r3
000014 6002 STR r2,[r0,#0]
|L3.22|
;;;315 }
;;;316 }
000016 4770 BX lr
;;;317
ENDP
AREA ||i.DMA_DeInit||, CODE, READONLY, ALIGN=2
DMA_DeInit PROC
;;;113 */
;;;114 void DMA_DeInit(DMA_Channel_TypeDef* DMAy_Channelx)
000000 6801 LDR r1,[r0,#0]
;;;115 {
;;;116 /* Check the parameters */
;;;117 assert_param(IS_DMA_ALL_PERIPH(DMAy_Channelx));
;;;118
;;;119 /* Disable the selected DMAy Channelx */
;;;120 DMAy_Channelx->CCR &= (uint16_t)(~DMA_CCR1_EN);
000002 f64f72fe MOV r2,#0xfffe
000006 4011 ANDS r1,r1,r2
000008 6001 STR r1,[r0,#0]
;;;121
;;;122 /* Reset DMAy Channelx control register */
;;;123 DMAy_Channelx->CCR = 0;
00000a 2100 MOVS r1,#0
00000c 6001 STR r1,[r0,#0]
;;;124
;;;125 /* Reset DMAy Channelx remaining bytes register */
;;;126 DMAy_Channelx->CNDTR = 0;
00000e 6041 STR r1,[r0,#4]
;;;127
;;;128 /* Reset DMAy Channelx peripheral address register */
;;;129 DMAy_Channelx->CPAR = 0;
000010 6081 STR r1,[r0,#8]
;;;130
;;;131 /* Reset DMAy Channelx memory address register */
;;;132 DMAy_Channelx->CMAR = 0;
000012 60c1 STR r1,[r0,#0xc]
;;;133
;;;134 if (DMAy_Channelx == DMA1_Channel1)
000014 494b LDR r1,|L4.324|
000016 4288 CMP r0,r1
000018 d108 BNE |L4.44|
;;;135 {
;;;136 /* Reset interrupt pending bits for DMA1 Channel1 */
;;;137 DMA1->IFCR |= DMA1_Channel1_IT_Mask;
00001a 494a LDR r1,|L4.324|
00001c 3908 SUBS r1,r1,#8
00001e 6849 LDR r1,[r1,#4]
000020 f041010f ORR r1,r1,#0xf
000024 4a47 LDR r2,|L4.324|
000026 3a08 SUBS r2,r2,#8
000028 6051 STR r1,[r2,#4]
00002a e08a B |L4.322|
|L4.44|
;;;138 }
;;;139 else if (DMAy_Channelx == DMA1_Channel2)
00002c 4945 LDR r1,|L4.324|
00002e 3114 ADDS r1,r1,#0x14
000030 4288 CMP r0,r1
000032 d108 BNE |L4.70|
;;;140 {
;;;141 /* Reset interrupt pending bits for DMA1 Channel2 */
;;;142 DMA1->IFCR |= DMA1_Channel2_IT_Mask;
000034 4943 LDR r1,|L4.324|
000036 3908 SUBS r1,r1,#8
000038 6849 LDR r1,[r1,#4]
00003a f04101f0 ORR r1,r1,#0xf0
00003e 4a41 LDR r2,|L4.324|
000040 3a08 SUBS r2,r2,#8
000042 6051 STR r1,[r2,#4]
000044 e07d B |L4.322|
|L4.70|
;;;143 }
;;;144 else if (DMAy_Channelx == DMA1_Channel3)
000046 493f LDR r1,|L4.324|
000048 3128 ADDS r1,r1,#0x28
00004a 4288 CMP r0,r1
00004c d108 BNE |L4.96|
;;;145 {
;;;146 /* Reset interrupt pending bits for DMA1 Channel3 */
;;;147 DMA1->IFCR |= DMA1_Channel3_IT_Mask;
00004e 493d LDR r1,|L4.324|
000050 3908 SUBS r1,r1,#8
000052 6849 LDR r1,[r1,#4]
000054 f4416170 ORR r1,r1,#0xf00
000058 4a3a LDR r2,|L4.324|
00005a 3a08 SUBS r2,r2,#8
00005c 6051 STR r1,[r2,#4]
00005e e070 B |L4.322|
|L4.96|
;;;148 }
;;;149 else if (DMAy_Channelx == DMA1_Channel4)
000060 4938 LDR r1,|L4.324|
000062 313c ADDS r1,r1,#0x3c
000064 4288 CMP r0,r1
000066 d108 BNE |L4.122|
;;;150 {
;;;151 /* Reset interrupt pending bits for DMA1 Channel4 */
;;;152 DMA1->IFCR |= DMA1_Channel4_IT_Mask;
000068 4936 LDR r1,|L4.324|
00006a 3908 SUBS r1,r1,#8
00006c 6849 LDR r1,[r1,#4]
00006e f4414170 ORR r1,r1,#0xf000
000072 4a34 LDR r2,|L4.324|
000074 3a08 SUBS r2,r2,#8
000076 6051 STR r1,[r2,#4]
000078 e063 B |L4.322|
|L4.122|
;;;153 }
;;;154 else if (DMAy_Channelx == DMA1_Channel5)
00007a 4932 LDR r1,|L4.324|
00007c 3150 ADDS r1,r1,#0x50
00007e 4288 CMP r0,r1
000080 d108 BNE |L4.148|
;;;155 {
;;;156 /* Reset interrupt pending bits for DMA1 Channel5 */
;;;157 DMA1->IFCR |= DMA1_Channel5_IT_Mask;
000082 4930 LDR r1,|L4.324|
000084 3908 SUBS r1,r1,#8
000086 6849 LDR r1,[r1,#4]
000088 f4412170 ORR r1,r1,#0xf0000
00008c 4a2d LDR r2,|L4.324|
00008e 3a08 SUBS r2,r2,#8
000090 6051 STR r1,[r2,#4]
000092 e056 B |L4.322|
|L4.148|
;;;158 }
;;;159 else if (DMAy_Channelx == DMA1_Channel6)
000094 492b LDR r1,|L4.324|
000096 3164 ADDS r1,r1,#0x64
000098 4288 CMP r0,r1
00009a d108 BNE |L4.174|
;;;160 {
;;;161 /* Reset interrupt pending bits for DMA1 Channel6 */
;;;162 DMA1->IFCR |= DMA1_Channel6_IT_Mask;
00009c 4929 LDR r1,|L4.324|
00009e 3908 SUBS r1,r1,#8
0000a0 6849 LDR r1,[r1,#4]
0000a2 f4410170 ORR r1,r1,#0xf00000
0000a6 4a27 LDR r2,|L4.324|
0000a8 3a08 SUBS r2,r2,#8
0000aa 6051 STR r1,[r2,#4]
0000ac e049 B |L4.322|
|L4.174|
;;;163 }
;;;164 else if (DMAy_Channelx == DMA1_Channel7)
0000ae 4925 LDR r1,|L4.324|
0000b0 3178 ADDS r1,r1,#0x78
0000b2 4288 CMP r0,r1
0000b4 d108 BNE |L4.200|
;;;165 {
;;;166 /* Reset interrupt pending bits for DMA1 Channel7 */
;;;167 DMA1->IFCR |= DMA1_Channel7_IT_Mask;
0000b6 4923 LDR r1,|L4.324|
0000b8 3908 SUBS r1,r1,#8
0000ba 6849 LDR r1,[r1,#4]
0000bc f0416170 ORR r1,r1,#0xf000000
0000c0 4a20 LDR r2,|L4.324|
0000c2 3a08 SUBS r2,r2,#8
0000c4 6051 STR r1,[r2,#4]
0000c6 e03c B |L4.322|
|L4.200|
;;;168 }
;;;169 else if (DMAy_Channelx == DMA2_Channel1)
0000c8 491f LDR r1,|L4.328|
0000ca 4288 CMP r0,r1
0000cc d106 BNE |L4.220|
;;;170 {
;;;171 /* Reset interrupt pending bits for DMA2 Channel1 */
;;;172 DMA2->IFCR |= DMA2_Channel1_IT_Mask;
0000ce 1f01 SUBS r1,r0,#4
0000d0 6809 LDR r1,[r1,#0]
0000d2 f041010f ORR r1,r1,#0xf
0000d6 1f02 SUBS r2,r0,#4
0000d8 6011 STR r1,[r2,#0]
0000da e032 B |L4.322|
|L4.220|
;;;173 }
;;;174 else if (DMAy_Channelx == DMA2_Channel2)
0000dc 491a LDR r1,|L4.328|
0000de 3114 ADDS r1,r1,#0x14
0000e0 4288 CMP r0,r1
0000e2 d108 BNE |L4.246|
;;;175 {
;;;176 /* Reset interrupt pending bits for DMA2 Channel2 */
;;;177 DMA2->IFCR |= DMA2_Channel2_IT_Mask;
0000e4 4918 LDR r1,|L4.328|
0000e6 1f09 SUBS r1,r1,#4
0000e8 6809 LDR r1,[r1,#0]
0000ea f04101f0 ORR r1,r1,#0xf0
0000ee 4a16 LDR r2,|L4.328|
0000f0 1f12 SUBS r2,r2,#4
0000f2 6011 STR r1,[r2,#0]
0000f4 e025 B |L4.322|
|L4.246|
;;;178 }
;;;179 else if (DMAy_Channelx == DMA2_Channel3)
0000f6 4914 LDR r1,|L4.328|
0000f8 3128 ADDS r1,r1,#0x28
0000fa 4288 CMP r0,r1
0000fc d108 BNE |L4.272|
;;;180 {
;;;181 /* Reset interrupt pending bits for DMA2 Channel3 */
;;;182 DMA2->IFCR |= DMA2_Channel3_IT_Mask;
0000fe 4912 LDR r1,|L4.328|
000100 1f09 SUBS r1,r1,#4
000102 6809 LDR r1,[r1,#0]
000104 f4416170 ORR r1,r1,#0xf00
000108 4a0f LDR r2,|L4.328|
00010a 1f12 SUBS r2,r2,#4
00010c 6011 STR r1,[r2,#0]
00010e e018 B |L4.322|
|L4.272|
;;;183 }
;;;184 else if (DMAy_Channelx == DMA2_Channel4)
000110 490d LDR r1,|L4.328|
000112 313c ADDS r1,r1,#0x3c
000114 4288 CMP r0,r1
000116 d108 BNE |L4.298|
;;;185 {
;;;186 /* Reset interrupt pending bits for DMA2 Channel4 */
;;;187 DMA2->IFCR |= DMA2_Channel4_IT_Mask;
000118 490b LDR r1,|L4.328|
00011a 1f09 SUBS r1,r1,#4
00011c 6809 LDR r1,[r1,#0]
00011e f4414170 ORR r1,r1,#0xf000
000122 4a09 LDR r2,|L4.328|
000124 1f12 SUBS r2,r2,#4
000126 6011 STR r1,[r2,#0]
000128 e00b B |L4.322|
|L4.298|
;;;188 }
;;;189 else
;;;190 {
;;;191 if (DMAy_Channelx == DMA2_Channel5)
00012a 4907 LDR r1,|L4.328|
00012c 3150 ADDS r1,r1,#0x50
00012e 4288 CMP r0,r1
000130 d107 BNE |L4.322|
;;;192 {
;;;193 /* Reset interrupt pending bits for DMA2 Channel5 */
;;;194 DMA2->IFCR |= DMA2_Channel5_IT_Mask;
000132 4905 LDR r1,|L4.328|
000134 1f09 SUBS r1,r1,#4
000136 6809 LDR r1,[r1,#0]
000138 f4412170 ORR r1,r1,#0xf0000
00013c 4a02 LDR r2,|L4.328|
00013e 1f12 SUBS r2,r2,#4
000140 6011 STR r1,[r2,#0]
|L4.322|
;;;195 }
;;;196 }
;;;197 }
000142 4770 BX lr
;;;198
ENDP
|L4.324|
DCD 0x40020008
|L4.328|
DCD 0x40020408
AREA ||i.DMA_GetCurrDataCounter||, CODE, READONLY, ALIGN=1
DMA_GetCurrDataCounter PROC
;;;376 */
;;;377 uint16_t DMA_GetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx)
000000 4601 MOV r1,r0
;;;378 {
;;;379 /* Check the parameters */
;;;380 assert_param(IS_DMA_ALL_PERIPH(DMAy_Channelx));
;;;381 /* Return the number of remaining data units for DMAy Channelx */
;;;382 return ((uint16_t)(DMAy_Channelx->CNDTR));
000002 6848 LDR r0,[r1,#4]
000004 b280 UXTH r0,r0
;;;383 }
000006 4770 BX lr
;;;384
ENDP
AREA ||i.DMA_GetFlagStatus||, CODE, READONLY, ALIGN=2
DMA_GetFlagStatus PROC
;;;438 */
;;;439 FlagStatus DMA_GetFlagStatus(uint32_t DMAy_FLAG)
000000 4601 MOV r1,r0
;;;440 {
;;;441 FlagStatus bitstatus = RESET;
000002 2000 MOVS r0,#0
;;;442 uint32_t tmpreg = 0;
000004 2200 MOVS r2,#0
;;;443
;;;444 /* Check the parameters */
;;;445 assert_param(IS_DMA_GET_FLAG(DMAy_FLAG));
;;;446
;;;447 /* Calculate the used DMAy */
;;;448 if ((DMAy_FLAG & FLAG_Mask) != (uint32_t)RESET)
000006 f0015380 AND r3,r1,#0x10000000
00000a b113 CBZ r3,|L6.18|
;;;449 {
;;;450 /* Get DMA2 ISR register value */
;;;451 tmpreg = DMA2->ISR ;
00000c 4b05 LDR r3,|L6.36|
00000e 681a LDR r2,[r3,#0]
000010 e001 B |L6.22|
|L6.18|
;;;452 }
;;;453 else
;;;454 {
;;;455 /* Get DMA1 ISR register value */
;;;456 tmpreg = DMA1->ISR ;
000012 4b05 LDR r3,|L6.40|
000014 681a LDR r2,[r3,#0]
|L6.22|
;;;457 }
;;;458
;;;459 /* Check the status of the specified DMAy flag */
;;;460 if ((tmpreg & DMAy_FLAG) != (uint32_t)RESET)
000016 ea020301 AND r3,r2,r1
00001a b10b CBZ r3,|L6.32|
;;;461 {
;;;462 /* DMAy_FLAG is set */
;;;463 bitstatus = SET;
00001c 2001 MOVS r0,#1
00001e e000 B |L6.34|
|L6.32|
;;;464 }
;;;465 else
;;;466 {
;;;467 /* DMAy_FLAG is reset */
;;;468 bitstatus = RESET;
000020 2000 MOVS r0,#0
|L6.34|
;;;469 }
;;;470
;;;471 /* Return the DMAy_FLAG status */
;;;472 return bitstatus;
;;;473 }
000022 4770 BX lr
;;;474
ENDP
|L6.36|
DCD 0x40020400
|L6.40|
DCD 0x40020000
AREA ||i.DMA_GetITStatus||, CODE, READONLY, ALIGN=2
DMA_GetITStatus PROC
;;;600 */
;;;601 ITStatus DMA_GetITStatus(uint32_t DMAy_IT)
000000 4601 MOV r1,r0
;;;602 {
;;;603 ITStatus bitstatus = RESET;
000002 2000 MOVS r0,#0
;;;604 uint32_t tmpreg = 0;
000004 2200 MOVS r2,#0
;;;605
;;;606 /* Check the parameters */
;;;607 assert_param(IS_DMA_GET_IT(DMAy_IT));
;;;608
;;;609 /* Calculate the used DMA */
;;;610 if ((DMAy_IT & FLAG_Mask) != (uint32_t)RESET)
000006 f0015380 AND r3,r1,#0x10000000
00000a b113 CBZ r3,|L7.18|
;;;611 {
;;;612 /* Get DMA2 ISR register value */
;;;613 tmpreg = DMA2->ISR;
00000c 4b05 LDR r3,|L7.36|
00000e 681a LDR r2,[r3,#0]
000010 e001 B |L7.22|
|L7.18|
;;;614 }
;;;615 else
;;;616 {
;;;617 /* Get DMA1 ISR register value */
;;;618 tmpreg = DMA1->ISR;
000012 4b05 LDR r3,|L7.40|
000014 681a LDR r2,[r3,#0]
|L7.22|
;;;619 }
;;;620
;;;621 /* Check the status of the specified DMAy interrupt */
;;;622 if ((tmpreg & DMAy_IT) != (uint32_t)RESET)
000016 ea020301 AND r3,r2,r1
00001a b10b CBZ r3,|L7.32|
;;;623 {
;;;624 /* DMAy_IT is set */
;;;625 bitstatus = SET;
00001c 2001 MOVS r0,#1
00001e e000 B |L7.34|
|L7.32|
;;;626 }
;;;627 else
;;;628 {
;;;629 /* DMAy_IT is reset */
;;;630 bitstatus = RESET;
000020 2000 MOVS r0,#0
|L7.34|
;;;631 }
;;;632 /* Return the DMA_IT status */
;;;633 return bitstatus;
;;;634 }
000022 4770 BX lr
;;;635
ENDP
|L7.36|
DCD 0x40020400
|L7.40|
DCD 0x40020000
AREA ||i.DMA_ITConfig||, CODE, READONLY, ALIGN=1
DMA_ITConfig PROC
;;;331 */
;;;332 void DMA_ITConfig(DMA_Channel_TypeDef* DMAy_Channelx, uint32_t DMA_IT, FunctionalState NewState)
000000 b11a CBZ r2,|L8.10|
;;;333 {
;;;334 /* Check the parameters */
;;;335 assert_param(IS_DMA_ALL_PERIPH(DMAy_Channelx));
;;;336 assert_param(IS_DMA_CONFIG_IT(DMA_IT));
;;;337 assert_param(IS_FUNCTIONAL_STATE(NewState));
;;;338 if (NewState != DISABLE)
;;;339 {
;;;340 /* Enable the selected DMA interrupts */
;;;341 DMAy_Channelx->CCR |= DMA_IT;
000002 6803 LDR r3,[r0,#0]
000004 430b ORRS r3,r3,r1
000006 6003 STR r3,[r0,#0]
000008 e002 B |L8.16|
|L8.10|
;;;342 }
;;;343 else
;;;344 {
;;;345 /* Disable the selected DMA interrupts */
;;;346 DMAy_Channelx->CCR &= ~DMA_IT;
00000a 6803 LDR r3,[r0,#0]
00000c 438b BICS r3,r3,r1
00000e 6003 STR r3,[r0,#0]
|L8.16|
;;;347 }
;;;348 }
000010 4770 BX lr
;;;349
ENDP
AREA ||i.DMA_Init||, CODE, READONLY, ALIGN=1
DMA_Init PROC
;;;207 */
;;;208 void DMA_Init(DMA_Channel_TypeDef* DMAy_Channelx, DMA_InitTypeDef* DMA_InitStruct)
000000 b510 PUSH {r4,lr}
;;;209 {
;;;210 uint32_t tmpreg = 0;
000002 2200 MOVS r2,#0
;;;211
;;;212 /* Check the parameters */
;;;213 assert_param(IS_DMA_ALL_PERIPH(DMAy_Channelx));
;;;214 assert_param(IS_DMA_DIR(DMA_InitStruct->DMA_DIR));
;;;215 assert_param(IS_DMA_BUFFER_SIZE(DMA_InitStruct->DMA_BufferSize));
;;;216 assert_param(IS_DMA_PERIPHERAL_INC_STATE(DMA_InitStruct->DMA_PeripheralInc));
;;;217 assert_param(IS_DMA_MEMORY_INC_STATE(DMA_InitStruct->DMA_MemoryInc));
;;;218 assert_param(IS_DMA_PERIPHERAL_DATA_SIZE(DMA_InitStruct->DMA_PeripheralDataSize));
;;;219 assert_param(IS_DMA_MEMORY_DATA_SIZE(DMA_InitStruct->DMA_MemoryDataSize));
;;;220 assert_param(IS_DMA_MODE(DMA_InitStruct->DMA_Mode));
;;;221 assert_param(IS_DMA_PRIORITY(DMA_InitStruct->DMA_Priority));
;;;222 assert_param(IS_DMA_M2M_STATE(DMA_InitStruct->DMA_M2M));
;;;223
;;;224 /*--------------------------- DMAy Channelx CCR Configuration -----------------*/
;;;225 /* Get the DMAy_Channelx CCR value */
;;;226 tmpreg = DMAy_Channelx->CCR;
000004 6802 LDR r2,[r0,#0]
;;;227 /* Clear MEM2MEM, PL, MSIZE, PSIZE, MINC, PINC, CIRC and DIR bits */
;;;228 tmpreg &= CCR_CLEAR_Mask;
000006 f64773f0 MOV r3,#0x7ff0
00000a 439a BICS r2,r2,r3
;;;229 /* Configure DMAy Channelx: data transfer, data size, priority level and mode */
;;;230 /* Set DIR bit according to DMA_DIR value */
;;;231 /* Set CIRC bit according to DMA_Mode value */
;;;232 /* Set PINC bit according to DMA_PeripheralInc value */
;;;233 /* Set MINC bit according to DMA_MemoryInc value */
;;;234 /* Set PSIZE bits according to DMA_PeripheralDataSize value */
;;;235 /* Set MSIZE bits according to DMA_MemoryDataSize value */
;;;236 /* Set PL bits according to DMA_Priority value */
;;;237 /* Set the MEM2MEM bit according to DMA_M2M value */
;;;238 tmpreg |= DMA_InitStruct->DMA_DIR | DMA_InitStruct->DMA_Mode |
00000c 6a0c LDR r4,[r1,#0x20]
00000e 688b LDR r3,[r1,#8]
000010 4323 ORRS r3,r3,r4
000012 690c LDR r4,[r1,#0x10]
000014 4323 ORRS r3,r3,r4
000016 694c LDR r4,[r1,#0x14]
000018 4323 ORRS r3,r3,r4
00001a 698c LDR r4,[r1,#0x18]
00001c 4323 ORRS r3,r3,r4
00001e 69cc LDR r4,[r1,#0x1c]
000020 4323 ORRS r3,r3,r4
000022 6a4c LDR r4,[r1,#0x24]
000024 4323 ORRS r3,r3,r4
000026 6a8c LDR r4,[r1,#0x28]
000028 4323 ORRS r3,r3,r4
00002a 431a ORRS r2,r2,r3
;;;239 DMA_InitStruct->DMA_PeripheralInc | DMA_InitStruct->DMA_MemoryInc |
;;;240 DMA_InitStruct->DMA_PeripheralDataSize | DMA_InitStruct->DMA_MemoryDataSize |
;;;241 DMA_InitStruct->DMA_Priority | DMA_InitStruct->DMA_M2M;
;;;242
;;;243 /* Write to DMAy Channelx CCR */
;;;244 DMAy_Channelx->CCR = tmpreg;
00002c 6002 STR r2,[r0,#0]
;;;245
;;;246 /*--------------------------- DMAy Channelx CNDTR Configuration ---------------*/
;;;247 /* Write to DMAy Channelx CNDTR */
;;;248 DMAy_Channelx->CNDTR = DMA_InitStruct->DMA_BufferSize;
00002e 68cb LDR r3,[r1,#0xc]
000030 6043 STR r3,[r0,#4]
;;;249
;;;250 /*--------------------------- DMAy Channelx CPAR Configuration ----------------*/
;;;251 /* Write to DMAy Channelx CPAR */
;;;252 DMAy_Channelx->CPAR = DMA_InitStruct->DMA_PeripheralBaseAddr;
000032 680b LDR r3,[r1,#0]
000034 6083 STR r3,[r0,#8]
;;;253
;;;254 /*--------------------------- DMAy Channelx CMAR Configuration ----------------*/
;;;255 /* Write to DMAy Channelx CMAR */
;;;256 DMAy_Channelx->CMAR = DMA_InitStruct->DMA_MemoryBaseAddr;
000036 684b LDR r3,[r1,#4]
000038 60c3 STR r3,[r0,#0xc]
;;;257 }
00003a bd10 POP {r4,pc}
;;;258
ENDP
AREA ||i.DMA_SetCurrDataCounter||, CODE, READONLY, ALIGN=1
DMA_SetCurrDataCounter PROC
;;;358 */
;;;359 void DMA_SetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx, uint16_t DataNumber)
000000 6041 STR r1,[r0,#4]
;;;360 {
;;;361 /* Check the parameters */
;;;362 assert_param(IS_DMA_ALL_PERIPH(DMAy_Channelx));
;;;363
;;;364 /*--------------------------- DMAy Channelx CNDTR Configuration ---------------*/
;;;365 /* Write to DMAy Channelx CNDTR */
;;;366 DMAy_Channelx->CNDTR = DataNumber;
;;;367 }
000002 4770 BX lr
;;;368
ENDP
AREA ||i.DMA_StructInit||, CODE, READONLY, ALIGN=1
DMA_StructInit PROC
;;;264 */
;;;265 void DMA_StructInit(DMA_InitTypeDef* DMA_InitStruct)
000000 2100 MOVS r1,#0
;;;266 {
;;;267 /*-------------- Reset DMA init structure parameters values ------------------*/
;;;268 /* Initialize the DMA_PeripheralBaseAddr member */
;;;269 DMA_InitStruct->DMA_PeripheralBaseAddr = 0;
000002 6001 STR r1,[r0,#0]
;;;270 /* Initialize the DMA_MemoryBaseAddr member */
;;;271 DMA_InitStruct->DMA_MemoryBaseAddr = 0;
000004 6041 STR r1,[r0,#4]
;;;272 /* Initialize the DMA_DIR member */
;;;273 DMA_InitStruct->DMA_DIR = DMA_DIR_PeripheralSRC;
000006 6081 STR r1,[r0,#8]
;;;274 /* Initialize the DMA_BufferSize member */
;;;275 DMA_InitStruct->DMA_BufferSize = 0;
000008 60c1 STR r1,[r0,#0xc]
;;;276 /* Initialize the DMA_PeripheralInc member */
;;;277 DMA_InitStruct->DMA_PeripheralInc = DMA_PeripheralInc_Disable;
00000a 6101 STR r1,[r0,#0x10]
;;;278 /* Initialize the DMA_MemoryInc member */
;;;279 DMA_InitStruct->DMA_MemoryInc = DMA_MemoryInc_Disable;
00000c 6141 STR r1,[r0,#0x14]
;;;280 /* Initialize the DMA_PeripheralDataSize member */
;;;281 DMA_InitStruct->DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
00000e 6181 STR r1,[r0,#0x18]
;;;282 /* Initialize the DMA_MemoryDataSize member */
;;;283 DMA_InitStruct->DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
000010 61c1 STR r1,[r0,#0x1c]
;;;284 /* Initialize the DMA_Mode member */
;;;285 DMA_InitStruct->DMA_Mode = DMA_Mode_Normal;
000012 6201 STR r1,[r0,#0x20]
;;;286 /* Initialize the DMA_Priority member */
;;;287 DMA_InitStruct->DMA_Priority = DMA_Priority_Low;
000014 6241 STR r1,[r0,#0x24]
;;;288 /* Initialize the DMA_M2M member */
;;;289 DMA_InitStruct->DMA_M2M = DMA_M2M_Disable;
000016 6281 STR r1,[r0,#0x28]
;;;290 }
000018 4770 BX lr
;;;291
ENDP
;*** Start embedded assembler ***
#line 1 "..\\..\\Libraries\\STM32F10x_StdPeriph_Driver\\src\\stm32f10x_dma.c"
AREA ||.rev16_text||, CODE
THUMB
EXPORT |__asm___15_stm32f10x_dma_c_e9b554c0____REV16|
#line 114 "..\\..\\Libraries\\CMSIS\\Include\\core_cmInstr.h"
|__asm___15_stm32f10x_dma_c_e9b554c0____REV16| PROC
#line 115
rev16 r0, r0
bx lr
ENDP
AREA ||.revsh_text||, CODE
THUMB
EXPORT |__asm___15_stm32f10x_dma_c_e9b554c0____REVSH|
#line 128
|__asm___15_stm32f10x_dma_c_e9b554c0____REVSH| PROC
#line 129
revsh r0, r0
bx lr
ENDP
;*** End embedded assembler ***

View File

@@ -0,0 +1,887 @@
; generated by Component: ARM Compiler 5.06 update 7 (build 960) Tool: ArmCC [4d365d]
; commandline ArmCC [--list --split_sections --debug -c --asm --interleave -o.\flash\obj\stm32f10x_gpio.o --asm_dir=.\Flash\List\ --list_dir=.\Flash\List\ --depend=.\flash\obj\stm32f10x_gpio.d --cpu=Cortex-M3 --apcs=interwork -O0 --diag_suppress=9931,870 -I..\..\Libraries\CMSIS\Device\ST\STM32F10x\Include -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Libraries\STM32_USB-FS-Device_Driver\inc -I..\..\Libraries\CMSIS\Include -I..\..\User\bsp -I..\..\User\bsp\inc -I..\..\User\app\inc -I..\..\User -IC:\Users\w1619\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__MICROLIB -D__UVISION_VERSION=538 -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD --omf_browse=.\flash\obj\stm32f10x_gpio.crf ..\..\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_gpio.c]
THUMB
AREA ||i.GPIO_AFIODeInit||, CODE, READONLY, ALIGN=1
GPIO_AFIODeInit PROC
;;;162 */
;;;163 void GPIO_AFIODeInit(void)
000000 b510 PUSH {r4,lr}
;;;164 {
;;;165 RCC_APB2PeriphResetCmd(RCC_APB2Periph_AFIO, ENABLE);
000002 2101 MOVS r1,#1
000004 4608 MOV r0,r1
000006 f7fffffe BL RCC_APB2PeriphResetCmd
;;;166 RCC_APB2PeriphResetCmd(RCC_APB2Periph_AFIO, DISABLE);
00000a 2100 MOVS r1,#0
00000c 2001 MOVS r0,#1
00000e f7fffffe BL RCC_APB2PeriphResetCmd
;;;167 }
000012 bd10 POP {r4,pc}
;;;168
ENDP
AREA ||i.GPIO_DeInit||, CODE, READONLY, ALIGN=2
GPIO_DeInit PROC
;;;111 */
;;;112 void GPIO_DeInit(GPIO_TypeDef *GPIOx)
000000 b510 PUSH {r4,lr}
;;;113 {
000002 4604 MOV r4,r0
;;;114 /* Check the parameters */
;;;115 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
;;;116
;;;117 if (GPIOx == GPIOA)
000004 4829 LDR r0,|L2.172|
000006 4284 CMP r4,r0
000008 d108 BNE |L2.28|
;;;118 {
;;;119 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA, ENABLE);
00000a 2101 MOVS r1,#1
00000c 2004 MOVS r0,#4
00000e f7fffffe BL RCC_APB2PeriphResetCmd
;;;120 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA, DISABLE);
000012 2100 MOVS r1,#0
000014 2004 MOVS r0,#4
000016 f7fffffe BL RCC_APB2PeriphResetCmd
00001a e046 B |L2.170|
|L2.28|
;;;121 }
;;;122 else if (GPIOx == GPIOB)
00001c 4824 LDR r0,|L2.176|
00001e 4284 CMP r4,r0
000020 d108 BNE |L2.52|
;;;123 {
;;;124 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB, ENABLE);
000022 2101 MOVS r1,#1
000024 2008 MOVS r0,#8
000026 f7fffffe BL RCC_APB2PeriphResetCmd
;;;125 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB, DISABLE);
00002a 2100 MOVS r1,#0
00002c 2008 MOVS r0,#8
00002e f7fffffe BL RCC_APB2PeriphResetCmd
000032 e03a B |L2.170|
|L2.52|
;;;126 }
;;;127 else if (GPIOx == GPIOC)
000034 481f LDR r0,|L2.180|
000036 4284 CMP r4,r0
000038 d108 BNE |L2.76|
;;;128 {
;;;129 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, ENABLE);
00003a 2101 MOVS r1,#1
00003c 2010 MOVS r0,#0x10
00003e f7fffffe BL RCC_APB2PeriphResetCmd
;;;130 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, DISABLE);
000042 2100 MOVS r1,#0
000044 2010 MOVS r0,#0x10
000046 f7fffffe BL RCC_APB2PeriphResetCmd
00004a e02e B |L2.170|
|L2.76|
;;;131 }
;;;132 else if (GPIOx == GPIOD)
00004c 481a LDR r0,|L2.184|
00004e 4284 CMP r4,r0
000050 d108 BNE |L2.100|
;;;133 {
;;;134 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD, ENABLE);
000052 2101 MOVS r1,#1
000054 2020 MOVS r0,#0x20
000056 f7fffffe BL RCC_APB2PeriphResetCmd
;;;135 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD, DISABLE);
00005a 2100 MOVS r1,#0
00005c 2020 MOVS r0,#0x20
00005e f7fffffe BL RCC_APB2PeriphResetCmd
000062 e022 B |L2.170|
|L2.100|
;;;136 }
;;;137 else if (GPIOx == GPIOE)
000064 4815 LDR r0,|L2.188|
000066 4284 CMP r4,r0
000068 d108 BNE |L2.124|
;;;138 {
;;;139 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOE, ENABLE);
00006a 2101 MOVS r1,#1
00006c 2040 MOVS r0,#0x40
00006e f7fffffe BL RCC_APB2PeriphResetCmd
;;;140 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOE, DISABLE);
000072 2100 MOVS r1,#0
000074 2040 MOVS r0,#0x40
000076 f7fffffe BL RCC_APB2PeriphResetCmd
00007a e016 B |L2.170|
|L2.124|
;;;141 }
;;;142 else if (GPIOx == GPIOF)
00007c 4810 LDR r0,|L2.192|
00007e 4284 CMP r4,r0
000080 d108 BNE |L2.148|
;;;143 {
;;;144 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOF, ENABLE);
000082 2101 MOVS r1,#1
000084 2080 MOVS r0,#0x80
000086 f7fffffe BL RCC_APB2PeriphResetCmd
;;;145 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOF, DISABLE);
00008a 2100 MOVS r1,#0
00008c 2080 MOVS r0,#0x80
00008e f7fffffe BL RCC_APB2PeriphResetCmd
000092 e00a B |L2.170|
|L2.148|
;;;146 }
;;;147 else
;;;148 {
;;;149 if (GPIOx == GPIOG)
000094 480b LDR r0,|L2.196|
000096 4284 CMP r4,r0
000098 d107 BNE |L2.170|
;;;150 {
;;;151 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOG, ENABLE);
00009a 2101 MOVS r1,#1
00009c 1580 ASRS r0,r0,#22
00009e f7fffffe BL RCC_APB2PeriphResetCmd
;;;152 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOG, DISABLE);
0000a2 2100 MOVS r1,#0
0000a4 15a0 ASRS r0,r4,#22
0000a6 f7fffffe BL RCC_APB2PeriphResetCmd
|L2.170|
;;;153 }
;;;154 }
;;;155 }
0000aa bd10 POP {r4,pc}
;;;156
ENDP
|L2.172|
DCD 0x40010800
|L2.176|
DCD 0x40010c00
|L2.180|
DCD 0x40011000
|L2.184|
DCD 0x40011400
|L2.188|
DCD 0x40011800
|L2.192|
DCD 0x40011c00
|L2.196|
DCD 0x40012000
AREA ||i.GPIO_ETH_MediaInterfaceConfig||, CODE, READONLY, ALIGN=2
GPIO_ETH_MediaInterfaceConfig PROC
;;;633 */
;;;634 void GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface)
000000 4901 LDR r1,|L3.8|
;;;635 {
;;;636 assert_param(IS_GPIO_ETH_MEDIA_INTERFACE(GPIO_ETH_MediaInterface));
;;;637
;;;638 /* Configure MII_RMII selection bit */
;;;639 *(__IO uint32_t *)MAPR_MII_RMII_SEL_BB = GPIO_ETH_MediaInterface;
000002 6008 STR r0,[r1,#0]
;;;640 }
000004 4770 BX lr
;;;641
ENDP
000006 0000 DCW 0x0000
|L3.8|
DCD 0x422000dc
AREA ||i.GPIO_EXTILineConfig||, CODE, READONLY, ALIGN=2
GPIO_EXTILineConfig PROC
;;;612 */
;;;613 void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)
000000 b530 PUSH {r4,r5,lr}
;;;614 {
;;;615 uint32_t tmp = 0x00;
000002 2200 MOVS r2,#0
;;;616 /* Check the parameters */
;;;617 assert_param(IS_GPIO_EXTI_PORT_SOURCE(GPIO_PortSource));
;;;618 assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
;;;619
;;;620 tmp = ((uint32_t)0x0F) << (0x04 * (GPIO_PinSource & (uint8_t)0x03));
000004 078b LSLS r3,r1,#30
000006 0f1c LSRS r4,r3,#28
000008 230f MOVS r3,#0xf
00000a fa03f204 LSL r2,r3,r4
;;;621 AFIO->EXTICR[GPIO_PinSource >> 0x02] &= ~tmp;
00000e 4b0b LDR r3,|L4.60|
000010 108c ASRS r4,r1,#2
000012 f8533024 LDR r3,[r3,r4,LSL #2]
000016 4393 BICS r3,r3,r2
000018 4c08 LDR r4,|L4.60|
00001a 108d ASRS r5,r1,#2
00001c f8443025 STR r3,[r4,r5,LSL #2]
;;;622 AFIO->EXTICR[GPIO_PinSource >> 0x02] |= (((uint32_t)GPIO_PortSource) << (0x04 * (GPIO_PinSource & (uint8_t)0x03)));
000020 4623 MOV r3,r4
000022 108c ASRS r4,r1,#2
000024 f8533024 LDR r3,[r3,r4,LSL #2]
000028 078c LSLS r4,r1,#30
00002a 0f24 LSRS r4,r4,#28
00002c fa00f404 LSL r4,r0,r4
000030 4323 ORRS r3,r3,r4
000032 4c02 LDR r4,|L4.60|
000034 108d ASRS r5,r1,#2
000036 f8443025 STR r3,[r4,r5,LSL #2]
;;;623 }
00003a bd30 POP {r4,r5,pc}
;;;624
ENDP
|L4.60|
DCD 0x40010008
AREA ||i.GPIO_EventOutputCmd||, CODE, READONLY, ALIGN=2
GPIO_EventOutputCmd PROC
;;;486 */
;;;487 void GPIO_EventOutputCmd(FunctionalState NewState)
000000 4901 LDR r1,|L5.8|
;;;488 {
;;;489 /* Check the parameters */
;;;490 assert_param(IS_FUNCTIONAL_STATE(NewState));
;;;491
;;;492 *(__IO uint32_t *)EVCR_EVOE_BB = (uint32_t)NewState;
000002 61c8 STR r0,[r1,#0x1c]
;;;493 }
000004 4770 BX lr
;;;494
ENDP
000006 0000 DCW 0x0000
|L5.8|
DCD 0x42200000
AREA ||i.GPIO_EventOutputConfig||, CODE, READONLY, ALIGN=2
GPIO_EventOutputConfig PROC
;;;465 */
;;;466 void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)
000000 4602 MOV r2,r0
;;;467 {
;;;468 uint32_t tmpreg = 0x00;
000002 2000 MOVS r0,#0
;;;469 /* Check the parameters */
;;;470 assert_param(IS_GPIO_EVENTOUT_PORT_SOURCE(GPIO_PortSource));
;;;471 assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
;;;472
;;;473 tmpreg = AFIO->EVCR;
000004 4b05 LDR r3,|L6.28|
000006 6818 LDR r0,[r3,#0]
;;;474 /* Clear the PORT[6:4] and PIN[3:0] bits */
;;;475 tmpreg &= EVCR_PORTPINCONFIG_MASK;
000008 f64f7380 MOV r3,#0xff80
00000c 4018 ANDS r0,r0,r3
;;;476 tmpreg |= (uint32_t)GPIO_PortSource << 0x04;
00000e ea401002 ORR r0,r0,r2,LSL #4
;;;477 tmpreg |= GPIO_PinSource;
000012 4308 ORRS r0,r0,r1
;;;478 AFIO->EVCR = tmpreg;
000014 4b01 LDR r3,|L6.28|
000016 6018 STR r0,[r3,#0]
;;;479 }
000018 4770 BX lr
;;;480
ENDP
00001a 0000 DCW 0x0000
|L6.28|
DCD 0x40010000
AREA ||i.GPIO_Init||, CODE, READONLY, ALIGN=1
GPIO_Init PROC
;;;176 */
;;;177 void GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_InitStruct)
000000 e92d41f0 PUSH {r4-r8,lr}
;;;178 {
000004 4602 MOV r2,r0
;;;179 uint32_t currentmode = 0x00, currentpin = 0x00, pinpos = 0x00, pos = 0x00;
000006 2500 MOVS r5,#0
000008 2600 MOVS r6,#0
00000a 2000 MOVS r0,#0
00000c 2300 MOVS r3,#0
;;;180 uint32_t tmpreg = 0x00, pinmask = 0x00;
00000e 2400 MOVS r4,#0
000010 2700 MOVS r7,#0
;;;181 /* Check the parameters */
;;;182 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
;;;183 assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));
;;;184 assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin));
;;;185
;;;186 /*---------------------------- GPIO Mode Configuration -----------------------*/
;;;187 currentmode = ((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x0F);
000012 f891c003 LDRB r12,[r1,#3]
000016 f00c050f AND r5,r12,#0xf
;;;188 if ((((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x10)) != 0x00)
00001a f891c003 LDRB r12,[r1,#3]
00001e f00c0c10 AND r12,r12,#0x10
000022 f1bc0f00 CMP r12,#0
000026 d003 BEQ |L7.48|
;;;189 {
;;;190 /* Check the parameters */
;;;191 assert_param(IS_GPIO_SPEED(GPIO_InitStruct->GPIO_Speed));
;;;192 /* Output mode */
;;;193 currentmode |= (uint32_t)GPIO_InitStruct->GPIO_Speed;
000028 f891c002 LDRB r12,[r1,#2]
00002c ea4c0505 ORR r5,r12,r5
|L7.48|
;;;194 }
;;;195 /*---------------------------- GPIO CRL Configuration ------------------------*/
;;;196 /* Configure the eight low port pins */
;;;197 if (((uint32_t)GPIO_InitStruct->GPIO_Pin & ((uint32_t)0x00FF)) != 0x00)
000030 f891c000 LDRB r12,[r1,#0]
000034 f1bc0f00 CMP r12,#0
000038 d031 BEQ |L7.158|
;;;198 {
;;;199 tmpreg = GPIOx->CRL;
00003a 6814 LDR r4,[r2,#0]
;;;200 for (pinpos = 0x00; pinpos < 0x08; pinpos++)
00003c 2000 MOVS r0,#0
00003e e02b B |L7.152|
|L7.64|
;;;201 {
;;;202 pos = ((uint32_t)0x01) << pinpos;
000040 f04f0c01 MOV r12,#1
000044 fa0cf300 LSL r3,r12,r0
;;;203 /* Get the port pins position */
;;;204 currentpin = (GPIO_InitStruct->GPIO_Pin) & pos;
000048 f8b1c000 LDRH r12,[r1,#0]
00004c ea0c0603 AND r6,r12,r3
;;;205 if (currentpin == pos)
000050 429e CMP r6,r3
000052 d120 BNE |L7.150|
;;;206 {
;;;207 pos = pinpos << 2;
000054 0083 LSLS r3,r0,#2
;;;208 /* Clear the corresponding low control register bits */
;;;209 pinmask = ((uint32_t)0x0F) << pos;
000056 f04f0c0f MOV r12,#0xf
00005a fa0cf703 LSL r7,r12,r3
;;;210 tmpreg &= ~pinmask;
00005e 43bc BICS r4,r4,r7
;;;211 /* Write the mode configuration in the corresponding bits */
;;;212 tmpreg |= (currentmode << pos);
000060 fa05fc03 LSL r12,r5,r3
000064 ea4c0404 ORR r4,r12,r4
;;;213 /* Reset the corresponding ODR bit */
;;;214 if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD)
000068 f891c003 LDRB r12,[r1,#3]
00006c f1bc0f28 CMP r12,#0x28
000070 d106 BNE |L7.128|
;;;215 {
;;;216 GPIOx->BRR = (((uint32_t)0x01) << pinpos);
000072 f04f0c01 MOV r12,#1
000076 fa0cfc00 LSL r12,r12,r0
00007a f8c2c014 STR r12,[r2,#0x14]
00007e e00a B |L7.150|
|L7.128|
;;;217 }
;;;218 else
;;;219 {
;;;220 /* Set the corresponding ODR bit */
;;;221 if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU)
000080 f891c003 LDRB r12,[r1,#3]
000084 f1bc0f48 CMP r12,#0x48
000088 d105 BNE |L7.150|
;;;222 {
;;;223 GPIOx->BSRR = (((uint32_t)0x01) << pinpos);
00008a f04f0c01 MOV r12,#1
00008e fa0cfc00 LSL r12,r12,r0
000092 f8c2c010 STR r12,[r2,#0x10]
|L7.150|
000096 1c40 ADDS r0,r0,#1 ;200
|L7.152|
000098 2808 CMP r0,#8 ;200
00009a d3d1 BCC |L7.64|
;;;224 }
;;;225 }
;;;226 }
;;;227 }
;;;228 GPIOx->CRL = tmpreg;
00009c 6014 STR r4,[r2,#0]
|L7.158|
;;;229 }
;;;230 /*---------------------------- GPIO CRH Configuration ------------------------*/
;;;231 /* Configure the eight high port pins */
;;;232 if (GPIO_InitStruct->GPIO_Pin > 0x00FF)
00009e f8b1c000 LDRH r12,[r1,#0]
0000a2 f1bc0fff CMP r12,#0xff
0000a6 dd34 BLE |L7.274|
;;;233 {
;;;234 tmpreg = GPIOx->CRH;
0000a8 6854 LDR r4,[r2,#4]
;;;235 for (pinpos = 0x00; pinpos < 0x08; pinpos++)
0000aa 2000 MOVS r0,#0
0000ac e02e B |L7.268|
|L7.174|
;;;236 {
;;;237 pos = (((uint32_t)0x01) << (pinpos + 0x08));
0000ae f1000c08 ADD r12,r0,#8
0000b2 f04f0801 MOV r8,#1
0000b6 fa08f30c LSL r3,r8,r12
;;;238 /* Get the port pins position */
;;;239 currentpin = ((GPIO_InitStruct->GPIO_Pin) & pos);
0000ba f8b1c000 LDRH r12,[r1,#0]
0000be ea0c0603 AND r6,r12,r3
;;;240 if (currentpin == pos)
0000c2 429e CMP r6,r3
0000c4 d121 BNE |L7.266|
;;;241 {
;;;242 pos = pinpos << 2;
0000c6 0083 LSLS r3,r0,#2
;;;243 /* Clear the corresponding high control register bits */
;;;244 pinmask = ((uint32_t)0x0F) << pos;
0000c8 f04f0c0f MOV r12,#0xf
0000cc fa0cf703 LSL r7,r12,r3
;;;245 tmpreg &= ~pinmask;
0000d0 43bc BICS r4,r4,r7
;;;246 /* Write the mode configuration in the corresponding bits */
;;;247 tmpreg |= (currentmode << pos);
0000d2 fa05fc03 LSL r12,r5,r3
0000d6 ea4c0404 ORR r4,r12,r4
;;;248 /* Reset the corresponding ODR bit */
;;;249 if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD)
0000da f891c003 LDRB r12,[r1,#3]
0000de f1bc0f28 CMP r12,#0x28
0000e2 d105 BNE |L7.240|
;;;250 {
;;;251 GPIOx->BRR = (((uint32_t)0x01) << (pinpos + 0x08));
0000e4 f1000c08 ADD r12,r0,#8
0000e8 fa08f80c LSL r8,r8,r12
0000ec f8c28014 STR r8,[r2,#0x14]
|L7.240|
;;;252 }
;;;253 /* Set the corresponding ODR bit */
;;;254 if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU)
0000f0 f891c003 LDRB r12,[r1,#3]
0000f4 f1bc0f48 CMP r12,#0x48
0000f8 d107 BNE |L7.266|
;;;255 {
;;;256 GPIOx->BSRR = (((uint32_t)0x01) << (pinpos + 0x08));
0000fa f1000c08 ADD r12,r0,#8
0000fe f04f0801 MOV r8,#1
000102 fa08f80c LSL r8,r8,r12
000106 f8c28010 STR r8,[r2,#0x10]
|L7.266|
00010a 1c40 ADDS r0,r0,#1 ;235
|L7.268|
00010c 2808 CMP r0,#8 ;235
00010e d3ce BCC |L7.174|
;;;257 }
;;;258 }
;;;259 }
;;;260 GPIOx->CRH = tmpreg;
000110 6054 STR r4,[r2,#4]
|L7.274|
;;;261 }
;;;262 }
000112 e8bd81f0 POP {r4-r8,pc}
;;;263
ENDP
AREA ||i.GPIO_PinLockConfig||, CODE, READONLY, ALIGN=1
GPIO_PinLockConfig PROC
;;;435 */
;;;436 void GPIO_PinLockConfig(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
000000 f44f3280 MOV r2,#0x10000
;;;437 {
;;;438 uint32_t tmp = 0x00010000;
;;;439
;;;440 /* Check the parameters */
;;;441 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
;;;442 assert_param(IS_GPIO_PIN(GPIO_Pin));
;;;443
;;;444 tmp |= GPIO_Pin;
000004 430a ORRS r2,r2,r1
;;;445 /* Set LCKK bit */
;;;446 GPIOx->LCKR = tmp;
000006 6182 STR r2,[r0,#0x18]
;;;447 /* Reset LCKK bit */
;;;448 GPIOx->LCKR = GPIO_Pin;
000008 6181 STR r1,[r0,#0x18]
;;;449 /* Set LCKK bit */
;;;450 GPIOx->LCKR = tmp;
00000a 6182 STR r2,[r0,#0x18]
;;;451 /* Read LCKK bit*/
;;;452 tmp = GPIOx->LCKR;
00000c 6982 LDR r2,[r0,#0x18]
;;;453 /* Read LCKK bit*/
;;;454 tmp = GPIOx->LCKR;
00000e 6982 LDR r2,[r0,#0x18]
;;;455 }
000010 4770 BX lr
;;;456
ENDP
AREA ||i.GPIO_PinRemapConfig||, CODE, READONLY, ALIGN=2
GPIO_PinRemapConfig PROC
;;;552 */
;;;553 void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState)
000000 b5f0 PUSH {r4-r7,lr}
;;;554 {
000002 460a MOV r2,r1
;;;555 uint32_t tmp = 0x00, tmp1 = 0x00, tmpreg = 0x00, tmpmask = 0x00;
000004 2300 MOVS r3,#0
000006 2400 MOVS r4,#0
000008 2100 MOVS r1,#0
00000a 2500 MOVS r5,#0
;;;556
;;;557 /* Check the parameters */
;;;558 assert_param(IS_GPIO_REMAP(GPIO_Remap));
;;;559 assert_param(IS_FUNCTIONAL_STATE(NewState));
;;;560
;;;561 if ((GPIO_Remap & 0x80000000) == 0x80000000)
00000c f0004600 AND r6,r0,#0x80000000
000010 f1b64f00 CMP r6,#0x80000000
000014 d102 BNE |L9.28|
;;;562 {
;;;563 tmpreg = AFIO->MAPR2;
000016 4e1d LDR r6,|L9.140|
000018 69f1 LDR r1,[r6,#0x1c]
00001a e001 B |L9.32|
|L9.28|
;;;564 }
;;;565 else
;;;566 {
;;;567 tmpreg = AFIO->MAPR;
00001c 4e1b LDR r6,|L9.140|
00001e 6871 LDR r1,[r6,#4]
|L9.32|
;;;568 }
;;;569
;;;570 tmpmask = (GPIO_Remap & DBGAFR_POSITION_MASK) >> 0x10;
000020 f3c04503 UBFX r5,r0,#16,#4
;;;571 tmp = GPIO_Remap & LSB_MASK;
000024 b283 UXTH r3,r0
;;;572
;;;573 if ((GPIO_Remap & (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK)) == (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK))
000026 f4001640 AND r6,r0,#0x300000
00002a f5b61f40 CMP r6,#0x300000
00002e d108 BNE |L9.66|
;;;574 {
;;;575 tmpreg &= DBGAFR_SWJCFG_MASK;
000030 f0216170 BIC r1,r1,#0xf000000
;;;576 AFIO->MAPR &= DBGAFR_SWJCFG_MASK;
000034 4e15 LDR r6,|L9.140|
000036 6876 LDR r6,[r6,#4]
000038 f0266670 BIC r6,r6,#0xf000000
00003c 4f13 LDR r7,|L9.140|
00003e 607e STR r6,[r7,#4]
000040 e012 B |L9.104|
|L9.66|
;;;577 }
;;;578 else if ((GPIO_Remap & DBGAFR_NUMBITS_MASK) == DBGAFR_NUMBITS_MASK)
000042 f4001680 AND r6,r0,#0x100000
000046 f5b61f80 CMP r6,#0x100000
00004a d106 BNE |L9.90|
;;;579 {
;;;580 tmp1 = ((uint32_t)0x03) << tmpmask;
00004c 2603 MOVS r6,#3
00004e fa06f405 LSL r4,r6,r5
;;;581 tmpreg &= ~tmp1;
000052 43a1 BICS r1,r1,r4
;;;582 tmpreg |= ~DBGAFR_SWJCFG_MASK;
000054 f0416170 ORR r1,r1,#0xf000000
000058 e006 B |L9.104|
|L9.90|
;;;583 }
;;;584 else
;;;585 {
;;;586 tmpreg &= ~(tmp << ((GPIO_Remap >> 0x15) * 0x10));
00005a 0d46 LSRS r6,r0,#21
00005c 0136 LSLS r6,r6,#4
00005e fa03f606 LSL r6,r3,r6
000062 43b1 BICS r1,r1,r6
;;;587 tmpreg |= ~DBGAFR_SWJCFG_MASK;
000064 f0416170 ORR r1,r1,#0xf000000
|L9.104|
;;;588 }
;;;589
;;;590 if (NewState != DISABLE)
000068 b122 CBZ r2,|L9.116|
;;;591 {
;;;592 tmpreg |= (tmp << ((GPIO_Remap >> 0x15) * 0x10));
00006a 0d46 LSRS r6,r0,#21
00006c 0136 LSLS r6,r6,#4
00006e fa03f606 LSL r6,r3,r6
000072 4331 ORRS r1,r1,r6
|L9.116|
;;;593 }
;;;594
;;;595 if ((GPIO_Remap & 0x80000000) == 0x80000000)
000074 f0004600 AND r6,r0,#0x80000000
000078 f1b64f00 CMP r6,#0x80000000
00007c d102 BNE |L9.132|
;;;596 {
;;;597 AFIO->MAPR2 = tmpreg;
00007e 4e03 LDR r6,|L9.140|
000080 61f1 STR r1,[r6,#0x1c]
000082 e001 B |L9.136|
|L9.132|
;;;598 }
;;;599 else
;;;600 {
;;;601 AFIO->MAPR = tmpreg;
000084 4e01 LDR r6,|L9.140|
000086 6071 STR r1,[r6,#4]
|L9.136|
;;;602 }
;;;603 }
000088 bdf0 POP {r4-r7,pc}
;;;604
ENDP
00008a 0000 DCW 0x0000
|L9.140|
DCD 0x40010000
AREA ||i.GPIO_ReadInputData||, CODE, READONLY, ALIGN=1
GPIO_ReadInputData PROC
;;;308 */
;;;309 uint16_t GPIO_ReadInputData(GPIO_TypeDef *GPIOx)
000000 4601 MOV r1,r0
;;;310 {
;;;311 /* Check the parameters */
;;;312 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
;;;313
;;;314 return ((uint16_t)GPIOx->IDR);
000002 6888 LDR r0,[r1,#8]
000004 b280 UXTH r0,r0
;;;315 }
000006 4770 BX lr
;;;316
ENDP
AREA ||i.GPIO_ReadInputDataBit||, CODE, READONLY, ALIGN=1
GPIO_ReadInputDataBit PROC
;;;284 */
;;;285 uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
000000 4602 MOV r2,r0
;;;286 {
;;;287 uint8_t bitstatus = 0x00;
000002 2000 MOVS r0,#0
;;;288
;;;289 /* Check the parameters */
;;;290 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
;;;291 assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
;;;292
;;;293 if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)Bit_RESET)
000004 6893 LDR r3,[r2,#8]
000006 400b ANDS r3,r3,r1
000008 b10b CBZ r3,|L11.14|
;;;294 {
;;;295 bitstatus = (uint8_t)Bit_SET;
00000a 2001 MOVS r0,#1
00000c e000 B |L11.16|
|L11.14|
;;;296 }
;;;297 else
;;;298 {
;;;299 bitstatus = (uint8_t)Bit_RESET;
00000e 2000 MOVS r0,#0
|L11.16|
;;;300 }
;;;301 return bitstatus;
;;;302 }
000010 4770 BX lr
;;;303
ENDP
AREA ||i.GPIO_ReadOutputData||, CODE, READONLY, ALIGN=1
GPIO_ReadOutputData PROC
;;;346 */
;;;347 uint16_t GPIO_ReadOutputData(GPIO_TypeDef *GPIOx)
000000 4601 MOV r1,r0
;;;348 {
;;;349 /* Check the parameters */
;;;350 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
;;;351
;;;352 return ((uint16_t)GPIOx->ODR);
000002 68c8 LDR r0,[r1,#0xc]
000004 b280 UXTH r0,r0
;;;353 }
000006 4770 BX lr
;;;354
ENDP
AREA ||i.GPIO_ReadOutputDataBit||, CODE, READONLY, ALIGN=1
GPIO_ReadOutputDataBit PROC
;;;323 */
;;;324 uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
000000 4602 MOV r2,r0
;;;325 {
;;;326 uint8_t bitstatus = 0x00;
000002 2000 MOVS r0,#0
;;;327 /* Check the parameters */
;;;328 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
;;;329 assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
;;;330
;;;331 if ((GPIOx->ODR & GPIO_Pin) != (uint32_t)Bit_RESET)
000004 68d3 LDR r3,[r2,#0xc]
000006 400b ANDS r3,r3,r1
000008 b10b CBZ r3,|L13.14|
;;;332 {
;;;333 bitstatus = (uint8_t)Bit_SET;
00000a 2001 MOVS r0,#1
00000c e000 B |L13.16|
|L13.14|
;;;334 }
;;;335 else
;;;336 {
;;;337 bitstatus = (uint8_t)Bit_RESET;
00000e 2000 MOVS r0,#0
|L13.16|
;;;338 }
;;;339 return bitstatus;
;;;340 }
000010 4770 BX lr
;;;341
ENDP
AREA ||i.GPIO_ResetBits||, CODE, READONLY, ALIGN=1
GPIO_ResetBits PROC
;;;377 */
;;;378 void GPIO_ResetBits(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
000000 6141 STR r1,[r0,#0x14]
;;;379 {
;;;380 /* Check the parameters */
;;;381 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
;;;382 assert_param(IS_GPIO_PIN(GPIO_Pin));
;;;383
;;;384 GPIOx->BRR = GPIO_Pin;
;;;385 }
000002 4770 BX lr
;;;386
ENDP
AREA ||i.GPIO_SetBits||, CODE, READONLY, ALIGN=1
GPIO_SetBits PROC
;;;361 */
;;;362 void GPIO_SetBits(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
000000 6101 STR r1,[r0,#0x10]
;;;363 {
;;;364 /* Check the parameters */
;;;365 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
;;;366 assert_param(IS_GPIO_PIN(GPIO_Pin));
;;;367
;;;368 GPIOx->BSRR = GPIO_Pin;
;;;369 }
000002 4770 BX lr
;;;370
ENDP
AREA ||i.GPIO_StructInit||, CODE, READONLY, ALIGN=1
GPIO_StructInit PROC
;;;269 */
;;;270 void GPIO_StructInit(GPIO_InitTypeDef *GPIO_InitStruct)
000000 f64f71ff MOV r1,#0xffff
;;;271 {
;;;272 /* Reset GPIO init structure parameters values */
;;;273 GPIO_InitStruct->GPIO_Pin = GPIO_Pin_All;
000004 8001 STRH r1,[r0,#0]
;;;274 GPIO_InitStruct->GPIO_Speed = GPIO_Speed_2MHz;
000006 2102 MOVS r1,#2
000008 7081 STRB r1,[r0,#2]
;;;275 GPIO_InitStruct->GPIO_Mode = GPIO_Mode_IN_FLOATING;
00000a 2104 MOVS r1,#4
00000c 70c1 STRB r1,[r0,#3]
;;;276 }
00000e 4770 BX lr
;;;277
ENDP
AREA ||i.GPIO_Write||, CODE, READONLY, ALIGN=1
GPIO_Write PROC
;;;420 */
;;;421 void GPIO_Write(GPIO_TypeDef *GPIOx, uint16_t PortVal)
000000 60c1 STR r1,[r0,#0xc]
;;;422 {
;;;423 /* Check the parameters */
;;;424 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
;;;425
;;;426 GPIOx->ODR = PortVal;
;;;427 }
000002 4770 BX lr
;;;428
ENDP
AREA ||i.GPIO_WriteBit||, CODE, READONLY, ALIGN=1
GPIO_WriteBit PROC
;;;397 */
;;;398 void GPIO_WriteBit(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, BitAction BitVal)
000000 b10a CBZ r2,|L18.6|
;;;399 {
;;;400 /* Check the parameters */
;;;401 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
;;;402 assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
;;;403 assert_param(IS_GPIO_BIT_ACTION(BitVal));
;;;404
;;;405 if (BitVal != Bit_RESET)
;;;406 {
;;;407 GPIOx->BSRR = GPIO_Pin;
000002 6101 STR r1,[r0,#0x10]
000004 e000 B |L18.8|
|L18.6|
;;;408 }
;;;409 else
;;;410 {
;;;411 GPIOx->BRR = GPIO_Pin;
000006 6141 STR r1,[r0,#0x14]
|L18.8|
;;;412 }
;;;413 }
000008 4770 BX lr
;;;414
ENDP
;*** Start embedded assembler ***
#line 1 "..\\..\\Libraries\\STM32F10x_StdPeriph_Driver\\src\\stm32f10x_gpio.c"
AREA ||.rev16_text||, CODE
THUMB
EXPORT |__asm___16_stm32f10x_gpio_c_f8e8e39a____REV16|
#line 114 "..\\..\\Libraries\\CMSIS\\Include\\core_cmInstr.h"
|__asm___16_stm32f10x_gpio_c_f8e8e39a____REV16| PROC
#line 115
rev16 r0, r0
bx lr
ENDP
AREA ||.revsh_text||, CODE
THUMB
EXPORT |__asm___16_stm32f10x_gpio_c_f8e8e39a____REVSH|
#line 128
|__asm___16_stm32f10x_gpio_c_f8e8e39a____REVSH| PROC
#line 129
revsh r0, r0
bx lr
ENDP
;*** End embedded assembler ***

View File

@@ -0,0 +1,197 @@
; generated by Component: ARM Compiler 5.06 update 7 (build 960) Tool: ArmCC [4d365d]
; commandline ArmCC [--list --split_sections --debug -c --asm --interleave -o.\flash\obj\stm32f10x_it.o --asm_dir=.\Flash\List\ --list_dir=.\Flash\List\ --depend=.\flash\obj\stm32f10x_it.d --cpu=Cortex-M3 --apcs=interwork -O0 --diag_suppress=9931,870 -I..\..\Libraries\CMSIS\Device\ST\STM32F10x\Include -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Libraries\STM32_USB-FS-Device_Driver\inc -I..\..\Libraries\CMSIS\Include -I..\..\User\bsp -I..\..\User\bsp\inc -I..\..\User\app\inc -I..\..\User -IC:\Users\w1619\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__MICROLIB -D__UVISION_VERSION=538 -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD --omf_browse=.\flash\obj\stm32f10x_it.crf ..\..\User\bsp\stm32f10x_it.c]
THUMB
AREA ||i.BusFault_Handler||, CODE, READONLY, ALIGN=1
BusFault_Handler PROC
;;;114 */
;;;115 void BusFault_Handler(void)
000000 bf00 NOP
|L1.2|
;;;116 {
;;;117 /* 当总线异常时进入死循环 */
;;;118 while (1)
000002 e7fe B |L1.2|
;;;119 {
;;;120 }
;;;121 }
;;;122
ENDP
AREA ||i.DebugMon_Handler||, CODE, READONLY, ALIGN=1
DebugMon_Handler PROC
;;;158 */
;;;159 void DebugMon_Handler(void)
000000 4770 BX lr
;;;160 {
;;;161 }
;;;162
ENDP
AREA ||i.HardFault_Handler||, CODE, READONLY, ALIGN=1
HardFault_Handler PROC
;;;58 */
;;;59 void HardFault_Handler(void)
000000 bf00 NOP
|L3.2|
;;;60 {
;;;61 #if 0
;;;62 const char *pError = ERR_INFO;
;;;63 uint8_t i;
;;;64
;;;65 for (i = 0; i < sizeof(ERR_INFO); i++)
;;;66 {
;;;67 USART1->DR = pError[i];
;;;68 /* 等待发送结束 */
;;;69 while ((USART1->SR & USART_FLAG_TC) == (uint16_t)RESET);
;;;70 }
;;;71 #endif
;;;72
;;;73 #if 0 /* 出现异常时,驱动蜂鸣器发声 */
;;;74 while(1)
;;;75 {
;;;76 uint16_t m;
;;;77
;;;78 GPIOA->ODR ^= GPIO_Pin_8;
;;;79
;;;80 for (m = 0; m < 10000; m++);
;;;81 }
;;;82 #else
;;;83
;;;84 /* 当硬件失效异常发生时进入死循环 */
;;;85 while (1)
000002 e7fe B |L3.2|
;;;86 {
;;;87 }
;;;88 #endif
;;;89 }
;;;90
ENDP
AREA ||i.MemManage_Handler||, CODE, READONLY, ALIGN=1
MemManage_Handler PROC
;;;98 */
;;;99 void MemManage_Handler(void)
000000 bf00 NOP
|L4.2|
;;;100 {
;;;101 /* 当内存管理异常发生时进入死循环 */
;;;102 while (1)
000002 e7fe B |L4.2|
;;;103 {
;;;104 }
;;;105 }
;;;106
ENDP
AREA ||i.NMI_Handler||, CODE, READONLY, ALIGN=1
NMI_Handler PROC
;;;46 */
;;;47 void NMI_Handler(void)
000000 4770 BX lr
;;;48 {
;;;49 }
;;;50
ENDP
AREA ||i.PendSV_Handler||, CODE, READONLY, ALIGN=1
PendSV_Handler PROC
;;;170 */
;;;171 void PendSV_Handler(void)
000000 4770 BX lr
;;;172 {
;;;173 }
;;;174
ENDP
AREA ||i.SVC_Handler||, CODE, READONLY, ALIGN=1
SVC_Handler PROC
;;;146 */
;;;147 void SVC_Handler(void)
000000 4770 BX lr
;;;148 {
;;;149 }
;;;150
ENDP
AREA ||i.USB_LP_CAN1_RX0_IRQHandler||, CODE, READONLY, ALIGN=2
USB_LP_CAN1_RX0_IRQHandler PROC
;;;205 extern void USB_Istr(void);
;;;206 void USB_LP_CAN1_RX0_IRQHandler(void)
000000 4801 LDR r0,|L8.8|
;;;207 {
;;;208 /* 判断CAN1的时钟是否打开 */
;;;209 if (RCC->APB1ENR & RCC_APB1Periph_CAN1)
000002 69c0 LDR r0,[r0,#0x1c]
;;;210 {
;;;211 }
;;;212 else
;;;213 {
;;;214 }
;;;215 }
000004 4770 BX lr
;;;216
ENDP
000006 0000 DCW 0x0000
|L8.8|
DCD 0x40021000
AREA ||i.UsageFault_Handler||, CODE, READONLY, ALIGN=1
UsageFault_Handler PROC
;;;130 */
;;;131 void UsageFault_Handler(void)
000000 bf00 NOP
|L9.2|
;;;132 {
;;;133 /* 当用法异常时进入死循环 */
;;;134 while (1)
000002 e7fe B |L9.2|
;;;135 {
;;;136 }
;;;137 }
;;;138
ENDP
;*** Start embedded assembler ***
#line 1 "..\\..\\User\\bsp\\stm32f10x_it.c"
AREA ||.rev16_text||, CODE
THUMB
EXPORT |__asm___14_stm32f10x_it_c_bb8ca80c____REV16|
#line 114 "..\\..\\Libraries\\CMSIS\\Include\\core_cmInstr.h"
|__asm___14_stm32f10x_it_c_bb8ca80c____REV16| PROC
#line 115
rev16 r0, r0
bx lr
ENDP
AREA ||.revsh_text||, CODE
THUMB
EXPORT |__asm___14_stm32f10x_it_c_bb8ca80c____REVSH|
#line 128
|__asm___14_stm32f10x_it_c_bb8ca80c____REVSH| PROC
#line 129
revsh r0, r0
bx lr
ENDP
;*** End embedded assembler ***

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,582 @@
; generated by Component: ARM Compiler 5.06 update 7 (build 960) Tool: ArmCC [4d365d]
; commandline ArmCC [--list --split_sections --debug -c --asm --interleave -o.\flash\obj\system_stm32f10x.o --asm_dir=.\Flash\List\ --list_dir=.\Flash\List\ --depend=.\flash\obj\system_stm32f10x.d --cpu=Cortex-M3 --apcs=interwork -O0 --diag_suppress=9931,870 -I..\..\Libraries\CMSIS\Device\ST\STM32F10x\Include -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Libraries\STM32_USB-FS-Device_Driver\inc -I..\..\Libraries\CMSIS\Include -I..\..\User\bsp -I..\..\User\bsp\inc -I..\..\User\app\inc -I..\..\User -IC:\Users\w1619\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__MICROLIB -D__UVISION_VERSION=538 -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD --omf_browse=.\flash\obj\system_stm32f10x.crf ..\..\User\bsp\system_stm32f10x.c]
THUMB
AREA ||i.SetSysClock||, CODE, READONLY, ALIGN=1
SetSysClock PROC
;;;418 */
;;;419 static void SetSysClock(void)
000000 b510 PUSH {r4,lr}
;;;420 {
;;;421 #ifdef SYSCLK_FREQ_HSE
;;;422 SetSysClockToHSE();
;;;423 #elif defined SYSCLK_FREQ_24MHz
;;;424 SetSysClockTo24();
;;;425 #elif defined SYSCLK_FREQ_36MHz
;;;426 SetSysClockTo36();
;;;427 #elif defined SYSCLK_FREQ_48MHz
;;;428 SetSysClockTo48();
;;;429 #elif defined SYSCLK_FREQ_56MHz
;;;430 SetSysClockTo56();
;;;431 #elif defined SYSCLK_FREQ_72MHz
;;;432 SetSysClockTo72();
000002 f7fffffe BL SetSysClockTo72
;;;433 #endif
;;;434
;;;435 /* If none of the define above is enabled, the HSI is used as System clock
;;;436 source (default after reset) */
;;;437 }
000006 bd10 POP {r4,pc}
;;;438
ENDP
AREA ||i.SetSysClockTo72||, CODE, READONLY, ALIGN=2
SetSysClockTo72 PROC
;;;986 */
;;;987 static void SetSysClockTo72(void)
000000 b50c PUSH {r2,r3,lr}
;;;988 {
;;;989 __IO uint32_t StartUpCounter = 0, HSEStatus = 0;
000002 2000 MOVS r0,#0
000004 9001 STR r0,[sp,#4]
000006 9000 STR r0,[sp,#0]
;;;990
;;;991 /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/
;;;992 /* Enable HSE */
;;;993 RCC->CR |= ((uint32_t)RCC_CR_HSEON);
000008 4833 LDR r0,|L2.216|
00000a 6800 LDR r0,[r0,#0]
00000c f4403080 ORR r0,r0,#0x10000
000010 4931 LDR r1,|L2.216|
000012 6008 STR r0,[r1,#0]
;;;994
;;;995 /* Wait till HSE is ready and if Time out is reached exit */
;;;996 do
000014 bf00 NOP
|L2.22|
;;;997 {
;;;998 HSEStatus = RCC->CR & RCC_CR_HSERDY;
000016 4830 LDR r0,|L2.216|
000018 6800 LDR r0,[r0,#0]
00001a f4003000 AND r0,r0,#0x20000
00001e 9000 STR r0,[sp,#0]
;;;999 StartUpCounter++;
000020 9801 LDR r0,[sp,#4]
000022 1c40 ADDS r0,r0,#1
000024 9001 STR r0,[sp,#4]
;;;1000 } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));
000026 9800 LDR r0,[sp,#0]
000028 b918 CBNZ r0,|L2.50|
00002a 9801 LDR r0,[sp,#4]
00002c f5b06fa0 CMP r0,#0x500
000030 d1f1 BNE |L2.22|
|L2.50|
;;;1001
;;;1002 if ((RCC->CR & RCC_CR_HSERDY) != RESET)
000032 4829 LDR r0,|L2.216|
000034 6800 LDR r0,[r0,#0]
000036 f4003000 AND r0,r0,#0x20000
00003a b110 CBZ r0,|L2.66|
;;;1003 {
;;;1004 HSEStatus = (uint32_t)0x01;
00003c 2001 MOVS r0,#1
00003e 9000 STR r0,[sp,#0]
000040 e001 B |L2.70|
|L2.66|
;;;1005 }
;;;1006 else
;;;1007 {
;;;1008 HSEStatus = (uint32_t)0x00;
000042 2000 MOVS r0,#0
000044 9000 STR r0,[sp,#0]
|L2.70|
;;;1009 }
;;;1010
;;;1011 if (HSEStatus == (uint32_t)0x01)
000046 9800 LDR r0,[sp,#0]
000048 2801 CMP r0,#1
00004a d143 BNE |L2.212|
;;;1012 {
;;;1013 /* Enable Prefetch Buffer */
;;;1014 FLASH->ACR |= FLASH_ACR_PRFTBE;
00004c 4823 LDR r0,|L2.220|
00004e 6800 LDR r0,[r0,#0]
000050 f0400010 ORR r0,r0,#0x10
000054 4921 LDR r1,|L2.220|
000056 6008 STR r0,[r1,#0]
;;;1015
;;;1016 /* Flash 2 wait state */
;;;1017 FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
000058 4608 MOV r0,r1
00005a 6800 LDR r0,[r0,#0]
00005c f0200003 BIC r0,r0,#3
000060 6008 STR r0,[r1,#0]
;;;1018 FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;
000062 4608 MOV r0,r1
000064 6800 LDR r0,[r0,#0]
000066 f0400002 ORR r0,r0,#2
00006a 6008 STR r0,[r1,#0]
;;;1019
;;;1020
;;;1021 /* HCLK = SYSCLK */
;;;1022 RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
00006c 481a LDR r0,|L2.216|
00006e 6840 LDR r0,[r0,#4]
000070 4919 LDR r1,|L2.216|
000072 6048 STR r0,[r1,#4]
;;;1023
;;;1024 /* PCLK2 = HCLK */
;;;1025 RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
000074 4608 MOV r0,r1
000076 6840 LDR r0,[r0,#4]
000078 6048 STR r0,[r1,#4]
;;;1026
;;;1027 /* PCLK1 = HCLK */
;;;1028 RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;
00007a 4608 MOV r0,r1
00007c 6840 LDR r0,[r0,#4]
00007e f4406080 ORR r0,r0,#0x400
000082 6048 STR r0,[r1,#4]
;;;1029
;;;1030 #ifdef STM32F10X_CL
;;;1031 /* Configure PLLs ------------------------------------------------------*/
;;;1032 /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */
;;;1033 /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */
;;;1034
;;;1035 RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |
;;;1036 RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);
;;;1037 RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |
;;;1038 RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);
;;;1039
;;;1040 /* Enable PLL2 */
;;;1041 RCC->CR |= RCC_CR_PLL2ON;
;;;1042 /* Wait till PLL2 is ready */
;;;1043 while((RCC->CR & RCC_CR_PLL2RDY) == 0)
;;;1044 {
;;;1045 }
;;;1046
;;;1047
;;;1048 /* PLL configuration: PLLCLK = PREDIV1 * 9 = 72 MHz */
;;;1049 RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);
;;;1050 RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 |
;;;1051 RCC_CFGR_PLLMULL9);
;;;1052 #else
;;;1053 /* PLL configuration: PLLCLK = HSE * 9 = 72 MHz */
;;;1054 RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |
000084 4608 MOV r0,r1
000086 6840 LDR r0,[r0,#4]
000088 f420107c BIC r0,r0,#0x3f0000
00008c 6048 STR r0,[r1,#4]
;;;1055 RCC_CFGR_PLLMULL));
;;;1056 RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);
00008e 4608 MOV r0,r1
000090 6840 LDR r0,[r0,#4]
000092 f44010e8 ORR r0,r0,#0x1d0000
000096 6048 STR r0,[r1,#4]
;;;1057 #endif /* STM32F10X_CL */
;;;1058
;;;1059 /* Enable PLL */
;;;1060 RCC->CR |= RCC_CR_PLLON;
000098 4608 MOV r0,r1
00009a 6800 LDR r0,[r0,#0]
00009c f0407080 ORR r0,r0,#0x1000000
0000a0 6008 STR r0,[r1,#0]
;;;1061
;;;1062 /* Wait till PLL is ready */
;;;1063 while((RCC->CR & RCC_CR_PLLRDY) == 0)
0000a2 bf00 NOP
|L2.164|
0000a4 480c LDR r0,|L2.216|
0000a6 6800 LDR r0,[r0,#0]
0000a8 f0007000 AND r0,r0,#0x2000000
0000ac 2800 CMP r0,#0
0000ae d0f9 BEQ |L2.164|
;;;1064 {
;;;1065 }
;;;1066
;;;1067 /* Select PLL as system clock source */
;;;1068 RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
0000b0 4809 LDR r0,|L2.216|
0000b2 6840 LDR r0,[r0,#4]
0000b4 f0200003 BIC r0,r0,#3
0000b8 4907 LDR r1,|L2.216|
0000ba 6048 STR r0,[r1,#4]
;;;1069 RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;
0000bc 4608 MOV r0,r1
0000be 6840 LDR r0,[r0,#4]
0000c0 f0400002 ORR r0,r0,#2
0000c4 6048 STR r0,[r1,#4]
;;;1070
;;;1071 /* Wait till PLL is used as system clock source */
;;;1072 while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)
0000c6 bf00 NOP
|L2.200|
0000c8 4803 LDR r0,|L2.216|
0000ca 6840 LDR r0,[r0,#4]
0000cc f000000c AND r0,r0,#0xc
0000d0 2808 CMP r0,#8
0000d2 d1f9 BNE |L2.200|
|L2.212|
;;;1073 {
;;;1074 }
;;;1075 }
;;;1076 else
;;;1077 { /* If HSE fails to start-up, the application will have wrong clock
;;;1078 configuration. User can add here some code to deal with this error */
;;;1079 }
;;;1080 }
0000d4 bd0c POP {r2,r3,pc}
;;;1081 #endif
ENDP
0000d6 0000 DCW 0x0000
|L2.216|
DCD 0x40021000
|L2.220|
DCD 0x40022000
AREA ||i.SystemCoreClockUpdate||, CODE, READONLY, ALIGN=2
SystemCoreClockUpdate PROC
;;;305 */
;;;306 void SystemCoreClockUpdate (void)
000000 b510 PUSH {r4,lr}
;;;307 {
;;;308 uint32_t tmp = 0, pllmull = 0, pllsource = 0;
000002 2100 MOVS r1,#0
000004 2000 MOVS r0,#0
000006 2200 MOVS r2,#0
;;;309
;;;310 #ifdef STM32F10X_CL
;;;311 uint32_t prediv1source = 0, prediv1factor = 0, prediv2factor = 0, pll2mull = 0;
;;;312 #endif /* STM32F10X_CL */
;;;313
;;;314 #if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
;;;315 uint32_t prediv1factor = 0;
;;;316 #endif /* STM32F10X_LD_VL or STM32F10X_MD_VL or STM32F10X_HD_VL */
;;;317
;;;318 /* Get SYSCLK source -------------------------------------------------------*/
;;;319 tmp = RCC->CFGR & RCC_CFGR_SWS;
000008 4b21 LDR r3,|L3.144|
00000a 685b LDR r3,[r3,#4]
00000c f003010c AND r1,r3,#0xc
;;;320
;;;321 switch (tmp)
000010 b121 CBZ r1,|L3.28|
000012 2904 CMP r1,#4
000014 d006 BEQ |L3.36|
000016 2908 CMP r1,#8
000018 d128 BNE |L3.108|
00001a e007 B |L3.44|
|L3.28|
;;;322 {
;;;323 case 0x00: /* HSI used as system clock */
;;;324 SystemCoreClock = HSI_VALUE;
00001c 4b1d LDR r3,|L3.148|
00001e 4c1e LDR r4,|L3.152|
000020 6023 STR r3,[r4,#0] ; SystemCoreClock
;;;325 break;
000022 e027 B |L3.116|
|L3.36|
;;;326 case 0x04: /* HSE used as system clock */
;;;327 SystemCoreClock = HSE_VALUE;
000024 4b1b LDR r3,|L3.148|
000026 4c1c LDR r4,|L3.152|
000028 6023 STR r3,[r4,#0] ; SystemCoreClock
;;;328 break;
00002a e023 B |L3.116|
|L3.44|
;;;329 case 0x08: /* PLL used as system clock */
;;;330
;;;331 /* Get PLL clock source and multiplication factor ----------------------*/
;;;332 pllmull = RCC->CFGR & RCC_CFGR_PLLMULL;
00002c 4b18 LDR r3,|L3.144|
00002e 685b LDR r3,[r3,#4]
000030 f4031070 AND r0,r3,#0x3c0000
;;;333 pllsource = RCC->CFGR & RCC_CFGR_PLLSRC;
000034 4b16 LDR r3,|L3.144|
000036 685b LDR r3,[r3,#4]
000038 f4033280 AND r2,r3,#0x10000
;;;334
;;;335 #ifndef STM32F10X_CL
;;;336 pllmull = ( pllmull >> 18) + 2;
00003c 2302 MOVS r3,#2
00003e eb034090 ADD r0,r3,r0,LSR #18
;;;337
;;;338 if (pllsource == 0x00)
000042 b922 CBNZ r2,|L3.78|
;;;339 {
;;;340 /* HSI oscillator clock divided by 2 selected as PLL clock entry */
;;;341 SystemCoreClock = (HSI_VALUE >> 1) * pllmull;
000044 4b15 LDR r3,|L3.156|
000046 4343 MULS r3,r0,r3
000048 4c13 LDR r4,|L3.152|
00004a 6023 STR r3,[r4,#0] ; SystemCoreClock
00004c e00d B |L3.106|
|L3.78|
;;;342 }
;;;343 else
;;;344 {
;;;345 #if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
;;;346 prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1;
;;;347 /* HSE oscillator clock selected as PREDIV1 clock entry */
;;;348 SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull;
;;;349 #else
;;;350 /* HSE selected as PLL clock entry */
;;;351 if ((RCC->CFGR & RCC_CFGR_PLLXTPRE) != (uint32_t)RESET)
00004e 4b10 LDR r3,|L3.144|
000050 685b LDR r3,[r3,#4]
000052 f4033300 AND r3,r3,#0x20000
000056 b123 CBZ r3,|L3.98|
;;;352 {/* HSE oscillator clock divided by 2 */
;;;353 SystemCoreClock = (HSE_VALUE >> 1) * pllmull;
000058 4b10 LDR r3,|L3.156|
00005a 4343 MULS r3,r0,r3
00005c 4c0e LDR r4,|L3.152|
00005e 6023 STR r3,[r4,#0] ; SystemCoreClock
000060 e003 B |L3.106|
|L3.98|
;;;354 }
;;;355 else
;;;356 {
;;;357 SystemCoreClock = HSE_VALUE * pllmull;
000062 4b0c LDR r3,|L3.148|
000064 4343 MULS r3,r0,r3
000066 4c0c LDR r4,|L3.152|
000068 6023 STR r3,[r4,#0] ; SystemCoreClock
|L3.106|
;;;358 }
;;;359 #endif
;;;360 }
;;;361 #else
;;;362 pllmull = pllmull >> 18;
;;;363
;;;364 if (pllmull != 0x0D)
;;;365 {
;;;366 pllmull += 2;
;;;367 }
;;;368 else
;;;369 { /* PLL multiplication factor = PLL input clock * 6.5 */
;;;370 pllmull = 13 / 2;
;;;371 }
;;;372
;;;373 if (pllsource == 0x00)
;;;374 {
;;;375 /* HSI oscillator clock divided by 2 selected as PLL clock entry */
;;;376 SystemCoreClock = (HSI_VALUE >> 1) * pllmull;
;;;377 }
;;;378 else
;;;379 {/* PREDIV1 selected as PLL clock entry */
;;;380
;;;381 /* Get PREDIV1 clock source and division factor */
;;;382 prediv1source = RCC->CFGR2 & RCC_CFGR2_PREDIV1SRC;
;;;383 prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1;
;;;384
;;;385 if (prediv1source == 0)
;;;386 {
;;;387 /* HSE oscillator clock selected as PREDIV1 clock entry */
;;;388 SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull;
;;;389 }
;;;390 else
;;;391 {/* PLL2 clock selected as PREDIV1 clock entry */
;;;392
;;;393 /* Get PREDIV2 division factor and PLL2 multiplication factor */
;;;394 prediv2factor = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> 4) + 1;
;;;395 pll2mull = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> 8 ) + 2;
;;;396 SystemCoreClock = (((HSE_VALUE / prediv2factor) * pll2mull) / prediv1factor) * pllmull;
;;;397 }
;;;398 }
;;;399 #endif /* STM32F10X_CL */
;;;400 break;
00006a e003 B |L3.116|
|L3.108|
;;;401
;;;402 default:
;;;403 SystemCoreClock = HSI_VALUE;
00006c 4b09 LDR r3,|L3.148|
00006e 4c0a LDR r4,|L3.152|
000070 6023 STR r3,[r4,#0] ; SystemCoreClock
;;;404 break;
000072 bf00 NOP
|L3.116|
000074 bf00 NOP ;325
;;;405 }
;;;406
;;;407 /* Compute HCLK clock frequency ----------------*/
;;;408 /* Get HCLK prescaler */
;;;409 tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
000076 4b06 LDR r3,|L3.144|
000078 685b LDR r3,[r3,#4]
00007a f3c31303 UBFX r3,r3,#4,#4
00007e 4c08 LDR r4,|L3.160|
000080 5ce1 LDRB r1,[r4,r3]
;;;410 /* HCLK clock frequency */
;;;411 SystemCoreClock >>= tmp;
000082 4b05 LDR r3,|L3.152|
000084 681b LDR r3,[r3,#0] ; SystemCoreClock
000086 40cb LSRS r3,r3,r1
000088 4c03 LDR r4,|L3.152|
00008a 6023 STR r3,[r4,#0] ; SystemCoreClock
;;;412 }
00008c bd10 POP {r4,pc}
;;;413
ENDP
00008e 0000 DCW 0x0000
|L3.144|
DCD 0x40021000
|L3.148|
DCD 0x007a1200
|L3.152|
DCD SystemCoreClock
|L3.156|
DCD 0x003d0900
|L3.160|
DCD AHBPrescTable
AREA ||i.SystemInit||, CODE, READONLY, ALIGN=2
SystemInit PROC
;;;211 */
;;;212 void SystemInit (void)
000000 b510 PUSH {r4,lr}
;;;213 {
;;;214 /* Reset the RCC clock configuration to the default reset state(for debug purpose) */
;;;215 /* Set HSION bit */
;;;216 RCC->CR |= (uint32_t)0x00000001;
000002 4813 LDR r0,|L4.80|
000004 6800 LDR r0,[r0,#0]
000006 f0400001 ORR r0,r0,#1
00000a 4911 LDR r1,|L4.80|
00000c 6008 STR r0,[r1,#0]
;;;217
;;;218 /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */
;;;219 #ifndef STM32F10X_CL
;;;220 RCC->CFGR &= (uint32_t)0xF8FF0000;
00000e 4608 MOV r0,r1
000010 6840 LDR r0,[r0,#4]
000012 4910 LDR r1,|L4.84|
000014 4008 ANDS r0,r0,r1
000016 490e LDR r1,|L4.80|
000018 6048 STR r0,[r1,#4]
;;;221 #else
;;;222 RCC->CFGR &= (uint32_t)0xF0FF0000;
;;;223 #endif /* STM32F10X_CL */
;;;224
;;;225 /* Reset HSEON, CSSON and PLLON bits */
;;;226 RCC->CR &= (uint32_t)0xFEF6FFFF;
00001a 4608 MOV r0,r1
00001c 6800 LDR r0,[r0,#0]
00001e 490e LDR r1,|L4.88|
000020 4008 ANDS r0,r0,r1
000022 490b LDR r1,|L4.80|
000024 6008 STR r0,[r1,#0]
;;;227
;;;228 /* Reset HSEBYP bit */
;;;229 RCC->CR &= (uint32_t)0xFFFBFFFF;
000026 4608 MOV r0,r1
000028 6800 LDR r0,[r0,#0]
00002a f4202080 BIC r0,r0,#0x40000
00002e 6008 STR r0,[r1,#0]
;;;230
;;;231 /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */
;;;232 RCC->CFGR &= (uint32_t)0xFF80FFFF;
000030 4608 MOV r0,r1
000032 6840 LDR r0,[r0,#4]
000034 f42000fe BIC r0,r0,#0x7f0000
000038 6048 STR r0,[r1,#4]
;;;233
;;;234 #ifdef STM32F10X_CL
;;;235 /* Reset PLL2ON and PLL3ON bits */
;;;236 RCC->CR &= (uint32_t)0xEBFFFFFF;
;;;237
;;;238 /* Disable all interrupts and clear pending bits */
;;;239 RCC->CIR = 0x00FF0000;
;;;240
;;;241 /* Reset CFGR2 register */
;;;242 RCC->CFGR2 = 0x00000000;
;;;243 #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
;;;244 /* Disable all interrupts and clear pending bits */
;;;245 RCC->CIR = 0x009F0000;
;;;246
;;;247 /* Reset CFGR2 register */
;;;248 RCC->CFGR2 = 0x00000000;
;;;249 #else
;;;250 /* Disable all interrupts and clear pending bits */
;;;251 RCC->CIR = 0x009F0000;
00003a f44f001f MOV r0,#0x9f0000
00003e 6088 STR r0,[r1,#8]
;;;252 #endif /* STM32F10X_CL */
;;;253
;;;254 #if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)
;;;255 #ifdef DATA_IN_ExtSRAM
;;;256 SystemInit_ExtMemCtl();
;;;257 #endif /* DATA_IN_ExtSRAM */
;;;258 #endif
;;;259
;;;260 /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */
;;;261 /* Configure the Flash Latency cycles and enable prefetch buffer */
;;;262 SetSysClock();
000040 f7fffffe BL SetSysClock
;;;263
;;;264 #ifdef VECT_TAB_SRAM
;;;265 SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
;;;266 #else
;;;267 SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
000044 f04f6000 MOV r0,#0x8000000
000048 4904 LDR r1,|L4.92|
00004a 6008 STR r0,[r1,#0]
;;;268 #endif
;;;269 }
00004c bd10 POP {r4,pc}
;;;270
ENDP
00004e 0000 DCW 0x0000
|L4.80|
DCD 0x40021000
|L4.84|
DCD 0xf8ff0000
|L4.88|
DCD 0xfef6ffff
|L4.92|
DCD 0xe000ed08
AREA ||.data||, DATA, ALIGN=2
SystemCoreClock
DCD 0x044aa200
AHBPrescTable
000004 00000000 DCB 0x00,0x00,0x00,0x00
000008 00000000 DCB 0x00,0x00,0x00,0x00
00000c 01020304 DCB 0x01,0x02,0x03,0x04
000010 06070809 DCB 0x06,0x07,0x08,0x09
;*** Start embedded assembler ***
#line 1 "..\\..\\User\\bsp\\system_stm32f10x.c"
AREA ||.rev16_text||, CODE
THUMB
EXPORT |__asm___18_system_stm32f10x_c_5d646a67____REV16|
#line 114 "..\\..\\Libraries\\CMSIS\\Include\\core_cmInstr.h"
|__asm___18_system_stm32f10x_c_5d646a67____REV16| PROC
#line 115
rev16 r0, r0
bx lr
ENDP
AREA ||.revsh_text||, CODE
THUMB
EXPORT |__asm___18_system_stm32f10x_c_5d646a67____REVSH|
#line 128
|__asm___18_system_stm32f10x_c_5d646a67____REVSH| PROC
#line 129
revsh r0, r0
bx lr
ENDP
;*** End embedded assembler ***

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,21 @@
/*
* Auto generated Run-Time-Environment Configuration File
* *** Do not modify ! ***
*
* Project: 'project'
* Target: 'Flash'
*/
#ifndef RTE_COMPONENTS_H
#define RTE_COMPONENTS_H
/*
* Define the Device Header File:
*/
#define CMSIS_device_header "stm32f10x.h"
#endif /* RTE_COMPONENTS_H */

View File

@@ -0,0 +1,27 @@
del *.bak /s
del *.ddk /s
del *.edk /s
del *.lst /s
del *.lnp /s
del *.mpf /s
del *.mpj /s
del *.obj /s
del *.omf /s
::del *.opt /s ::不允许删除JLINK的设置
del *.plg /s
del *.rpt /s
del *.tmp /s
del *.__i /s
del *.crf /s
del *.o /s
del *.d /s
del *.axf /s
del *.tra /s
del *.dep /s
del JLinkLog.txt /s
del *.iex /s
del *.htm /s
::del *.sct /s
del *.map /s
exit

View File

@@ -0,0 +1,3 @@
[STARTUP]
CPUTARGETTYPENAME=

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,955 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_opt.xsd">
<SchemaVersion>1.0</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Extensions>
<cExt>*.c</cExt>
<aExt>*.s*; *.src; *.a*</aExt>
<oExt>*.obj</oExt>
<lExt>*.lib</lExt>
<tExt>*.txt; *.h; *.inc</tExt>
<pExt>*.plm</pExt>
<CppX>*.cpp</CppX>
<nMigrate>0</nMigrate>
</Extensions>
<DaveTm>
<dwLowDateTime>0</dwLowDateTime>
<dwHighDateTime>0</dwHighDateTime>
</DaveTm>
<Target>
<TargetName>Flash</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<TargetOption>
<CLKADS>8000000</CLKADS>
<OPTTT>
<gFlags>1</gFlags>
<BeepAtEnd>1</BeepAtEnd>
<RunSim>1</RunSim>
<RunTarget>0</RunTarget>
<RunAbUc>0</RunAbUc>
</OPTTT>
<OPTHX>
<HexSelection>1</HexSelection>
<FlashByte>65535</FlashByte>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
</OPTHX>
<OPTLEX>
<PageWidth>79</PageWidth>
<PageLength>66</PageLength>
<TabStop>8</TabStop>
<ListingPath>.\Flash\List\</ListingPath>
</OPTLEX>
<ListingPage>
<CreateCListing>1</CreateCListing>
<CreateAListing>1</CreateAListing>
<CreateLListing>1</CreateLListing>
<CreateIListing>0</CreateIListing>
<AsmCond>1</AsmCond>
<AsmSymb>1</AsmSymb>
<AsmXref>0</AsmXref>
<CCond>1</CCond>
<CCode>0</CCode>
<CListInc>0</CListInc>
<CSymb>0</CSymb>
<LinkerCodeListing>0</LinkerCodeListing>
</ListingPage>
<OPTXL>
<LMap>1</LMap>
<LComments>1</LComments>
<LGenerateSymbols>1</LGenerateSymbols>
<LLibSym>1</LLibSym>
<LLines>1</LLines>
<LLocSym>1</LLocSym>
<LPubSym>1</LPubSym>
<LXref>0</LXref>
<LExpSel>0</LExpSel>
</OPTXL>
<OPTFL>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>1</IsCurrentTarget>
</OPTFL>
<CpuCode>255</CpuCode>
<Books>
<Book>
<Number>0</Number>
<Title>Reference Manual</Title>
<Path>DATASHTS\ST\STM32F10xxx.PDF</Path>
</Book>
<Book>
<Number>1</Number>
<Title>Technical Reference Manual</Title>
<Path>datashts\arm\cortex_m3\r1p1\DDI0337E_CORTEX_M3_R1P1_TRM.PDF</Path>
</Book>
<Book>
<Number>2</Number>
<Title>Generic User Guide</Title>
<Path>datashts\arm\cortex_m3\r2p1\DUI0552A_CORTEX_M3_DGUG.PDF</Path>
</Book>
</Books>
<DebugOpt>
<uSim>0</uSim>
<uTrg>1</uTrg>
<sLdApp>0</sLdApp>
<sGomain>1</sGomain>
<sRbreak>1</sRbreak>
<sRwatch>1</sRwatch>
<sRmem>1</sRmem>
<sRfunc>1</sRfunc>
<sRbox>1</sRbox>
<tLdApp>1</tLdApp>
<tGomain>1</tGomain>
<tRbreak>1</tRbreak>
<tRwatch>1</tRwatch>
<tRmem>1</tRmem>
<tRfunc>0</tRfunc>
<tRbox>1</tRbox>
<tRtrace>0</tRtrace>
<sRSysVw>1</sRSysVw>
<tRSysVw>1</tRSysVw>
<sRunDeb>0</sRunDeb>
<sLrtime>0</sLrtime>
<bEvRecOn>1</bEvRecOn>
<nTsel>5</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile></tIfile>
<pMon>STLink\ST-LINKIII-KEIL_SWO.dll</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>ST-LINKIII-KEIL_SWO</Key>
<Name>-U53FF6F067287555124401367 -I0 -O78 -S1 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>UL2CM3</Key>
<Name>-O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGTARM</Key>
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=15,39,651,702,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=926,146,1337,541,0)(121=-1,-1,-1,-1,0)(122=-1,-1,-1,-1,0)(123=-1,-1,-1,-1,0)(124=-1,-1,-1,-1,0)(125=949,148,1360,543,0)(126=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=1082,400,1520,804,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMDBGFLAGS</Key>
<Name></Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGUARM</Key>
<Name>(106=-1,-1,-1,-1,0)(107=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>JL2CM3</Key>
<Name>-U4294967295 -O78 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<WatchWindow1>
<Ww>
<count>0</count>
<WinNumber>1</WinNumber>
<ItemText>FileName</ItemText>
</Ww>
<Ww>
<count>1</count>
<WinNumber>1</WinNumber>
<ItemText>pdev-&gt;host</ItemText>
</Ww>
<Ww>
<count>2</count>
<WinNumber>1</WinNumber>
<ItemText>g_tRadio.usFreq,0x0A</ItemText>
</Ww>
<Ww>
<count>3</count>
<WinNumber>1</WinNumber>
<ItemText>xx,0x0A</ItemText>
</Ww>
<Ww>
<count>4</count>
<WinNumber>1</WinNumber>
<ItemText>yy,0x0A</ItemText>
</Ww>
<Ww>
<count>5</count>
<WinNumber>1</WinNumber>
<ItemText>x,0x0A</ItemText>
</Ww>
<Ww>
<count>6</count>
<WinNumber>1</WinNumber>
<ItemText>y,0x0A</ItemText>
</Ww>
<Ww>
<count>7</count>
<WinNumber>1</WinNumber>
<ItemText>g_LcdWidth</ItemText>
</Ww>
<Ww>
<count>8</count>
<WinNumber>1</WinNumber>
<ItemText>g_LcdHeight</ItemText>
</Ww>
<Ww>
<count>9</count>
<WinNumber>1</WinNumber>
<ItemText>g_tSF.ChipName</ItemText>
</Ww>
<Ww>
<count>10</count>
<WinNumber>1</WinNumber>
<ItemText>FileName</ItemText>
</Ww>
<Ww>
<count>11</count>
<WinNumber>1</WinNumber>
<ItemText>y</ItemText>
</Ww>
<Ww>
<count>12</count>
<WinNumber>1</WinNumber>
<ItemText>tpX</ItemText>
</Ww>
<Ww>
<count>13</count>
<WinNumber>1</WinNumber>
<ItemText>g_tMag3110</ItemText>
</Ww>
<Ww>
<count>14</count>
<WinNumber>1</WinNumber>
<ItemText>buf</ItemText>
</Ww>
<Ww>
<count>15</count>
<WinNumber>1</WinNumber>
<ItemText>g_Wave,0x0A</ItemText>
</Ww>
<Ww>
<count>16</count>
<WinNumber>1</WinNumber>
<ItemText>g_DSO,0x0A</ItemText>
</Ww>
<Ww>
<count>17</count>
<WinNumber>1</WinNumber>
<ItemText>SPI1</ItemText>
</Ww>
<Ww>
<count>18</count>
<WinNumber>1</WinNumber>
<ItemText>s_RegReadNow</ItemText>
</Ww>
<Ww>
<count>19</count>
<WinNumber>1</WinNumber>
<ItemText>s_RegMapNow</ItemText>
</Ww>
<Ww>
<count>20</count>
<WinNumber>1</WinNumber>
<ItemText>_freq,0x0A</ItemText>
</Ww>
<Ww>
<count>21</count>
<WinNumber>1</WinNumber>
<ItemText>_freq</ItemText>
</Ww>
<Ww>
<count>22</count>
<WinNumber>1</WinNumber>
<ItemText>g_tMoto</ItemText>
</Ww>
<Ww>
<count>23</count>
<WinNumber>1</WinNumber>
<ItemText>g_APList</ItemText>
</Ww>
<Ww>
<count>24</count>
<WinNumber>1</WinNumber>
<ItemText>g_tUart2</ItemText>
</Ww>
<Ww>
<count>25</count>
<WinNumber>1</WinNumber>
<ItemText>g_tCanRxMsg</ItemText>
</Ww>
</WatchWindow1>
<MemoryWindow1>
<Mm>
<WinNumber>1</WinNumber>
<SubType>0</SubType>
<ItemText>0x200074</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow1>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>
<DebugFlag>
<trace>0</trace>
<periodic>0</periodic>
<aLwin>1</aLwin>
<aCover>0</aCover>
<aSer1>0</aSer1>
<aSer2>0</aSer2>
<aPa>0</aPa>
<viewmode>1</viewmode>
<vrSel>0</vrSel>
<aSym>0</aSym>
<aTbox>0</aTbox>
<AscS1>0</AscS1>
<AscS2>0</AscS2>
<AscS3>0</AscS3>
<aSer3>0</aSer3>
<eProf>0</eProf>
<aLa>0</aLa>
<aPa1>0</aPa1>
<AscS4>0</AscS4>
<aSer4>0</aSer4>
<StkLoc>0</StkLoc>
<TrcWin>0</TrcWin>
<newCpu>0</newCpu>
<uProt>0</uProt>
</DebugFlag>
<LintExecutable></LintExecutable>
<LintConfigFile></LintConfigFile>
<bLintAuto>0</bLintAuto>
<bAutoGenD>0</bAutoGenD>
<LntExFlags>0</LntExFlags>
<pMisraName></pMisraName>
<pszMrule></pszMrule>
<pSingCmds></pSingCmds>
<pMultCmds></pMultCmds>
</TargetOption>
</Target>
<Target>
<TargetName>CpuRAM</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<TargetOption>
<CLKADS>25000000</CLKADS>
<OPTTT>
<gFlags>1</gFlags>
<BeepAtEnd>1</BeepAtEnd>
<RunSim>1</RunSim>
<RunTarget>0</RunTarget>
<RunAbUc>0</RunAbUc>
</OPTTT>
<OPTHX>
<HexSelection>1</HexSelection>
<FlashByte>65535</FlashByte>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
</OPTHX>
<OPTLEX>
<PageWidth>79</PageWidth>
<PageLength>66</PageLength>
<TabStop>8</TabStop>
<ListingPath>.\CpuRAM\List\</ListingPath>
</OPTLEX>
<ListingPage>
<CreateCListing>1</CreateCListing>
<CreateAListing>1</CreateAListing>
<CreateLListing>1</CreateLListing>
<CreateIListing>0</CreateIListing>
<AsmCond>1</AsmCond>
<AsmSymb>1</AsmSymb>
<AsmXref>0</AsmXref>
<CCond>1</CCond>
<CCode>0</CCode>
<CListInc>0</CListInc>
<CSymb>0</CSymb>
<LinkerCodeListing>0</LinkerCodeListing>
</ListingPage>
<OPTXL>
<LMap>1</LMap>
<LComments>1</LComments>
<LGenerateSymbols>1</LGenerateSymbols>
<LLibSym>1</LLibSym>
<LLines>1</LLines>
<LLocSym>1</LLocSym>
<LPubSym>1</LPubSym>
<LXref>0</LXref>
<LExpSel>0</LExpSel>
</OPTXL>
<OPTFL>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>0</IsCurrentTarget>
</OPTFL>
<CpuCode>255</CpuCode>
<Books>
<Book>
<Number>0</Number>
<Title>Reference Manual</Title>
<Path>DATASHTS\ST\STM32F4xx.PDF</Path>
</Book>
<Book>
<Number>1</Number>
<Title>Technical Reference Manual</Title>
<Path>datashts\arm\cortex_m4\r0p1\DDI0439C_CORTEX_M4_R0P1_TRM.PDF</Path>
</Book>
<Book>
<Number>2</Number>
<Title>Generic User Guide</Title>
<Path>datashts\arm\cortex_m4\r0p1\DUI0553A_CORTEX_M4_DGUG.PDF</Path>
</Book>
</Books>
<DebugOpt>
<uSim>0</uSim>
<uTrg>1</uTrg>
<sLdApp>0</sLdApp>
<sGomain>1</sGomain>
<sRbreak>1</sRbreak>
<sRwatch>1</sRwatch>
<sRmem>1</sRmem>
<sRfunc>1</sRfunc>
<sRbox>1</sRbox>
<tLdApp>0</tLdApp>
<tGomain>1</tGomain>
<tRbreak>1</tRbreak>
<tRwatch>1</tRwatch>
<tRmem>1</tRmem>
<tRfunc>0</tRfunc>
<tRbox>1</tRbox>
<tRtrace>0</tRtrace>
<sRSysVw>1</sRSysVw>
<tRSysVw>1</tRSysVw>
<sRunDeb>0</sRunDeb>
<sLrtime>0</sLrtime>
<bEvRecOn>1</bEvRecOn>
<nTsel>7</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile>.\CpuRAM.ini</tIfile>
<pMon>Segger\JL2CM3.dll</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGTARM</Key>
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMDBGFLAGS</Key>
<Name></Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGUARM</Key>
<Name>(106=-1,-1,-1,-1,0)(107=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>JL2CM3</Key>
<Name>-U68000531 -O207 -S8 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint>
<Bp>
<Number>0</Number>
<Type>0</Type>
<LineNumber>247</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>E:\MyData\STM32-F4-A\软件\src\F4-999_STM32-V5出厂测试程序\User\LwIP\lwip-1.4.1\src\core\netif.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>1</Number>
<Type>0</Type>
<LineNumber>53</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>E:\MyData\01.产品资料\01.开发板\STM32-V5\软件\src\V1.2\V5-999_出厂程序裸机\User\FatFS\src\diskio.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>2</Number>
<Type>0</Type>
<LineNumber>165</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>E:\MyData\01.产品资料\01.开发板\STM32-V5\软件\src\V1.2\V5-999_出厂程序裸机\User\FatFS\src\diskio.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>3</Number>
<Type>0</Type>
<LineNumber>180</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>E:\MyData\01.产品资料\01.开发板\STM32-V5\软件\src\V1.2\V5-999_出厂程序裸机\User\FatFS\src\diskio.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>4</Number>
<Type>0</Type>
<LineNumber>522</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>E:\MyData\01.产品资料\01.开发板\STM32-V5\软件\src\V1.2\V5-999_出厂程序裸机\User\bsp_stm32f4xx\src\bsp_ra8875_flash.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>5</Number>
<Type>0</Type>
<LineNumber>166</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>E:\MyData\01.产品资料\01.开发板\STM32-V4\02.软件\V4-999_出厂程序裸机V0.1\V4-999_出厂程序裸机\User\bsp\src\bsp_rda5807.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
</Breakpoint>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>
<DebugFlag>
<trace>0</trace>
<periodic>0</periodic>
<aLwin>1</aLwin>
<aCover>0</aCover>
<aSer1>0</aSer1>
<aSer2>0</aSer2>
<aPa>0</aPa>
<viewmode>1</viewmode>
<vrSel>0</vrSel>
<aSym>0</aSym>
<aTbox>0</aTbox>
<AscS1>0</AscS1>
<AscS2>0</AscS2>
<AscS3>0</AscS3>
<aSer3>0</aSer3>
<eProf>0</eProf>
<aLa>0</aLa>
<aPa1>0</aPa1>
<AscS4>0</AscS4>
<aSer4>0</aSer4>
<StkLoc>0</StkLoc>
<TrcWin>0</TrcWin>
<newCpu>0</newCpu>
<uProt>0</uProt>
</DebugFlag>
<LintExecutable></LintExecutable>
<LintConfigFile></LintConfigFile>
<bLintAuto>0</bLintAuto>
<bAutoGenD>0</bAutoGenD>
<LntExFlags>0</LntExFlags>
<pMisraName></pMisraName>
<pszMrule></pszMrule>
<pSingCmds></pSingCmds>
<pMultCmds></pMultCmds>
</TargetOption>
</Target>
<Group>
<GroupName>App</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>1</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\User\app\src\main.c</PathWithFileName>
<FilenameWithoutPath>main.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>BSP</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>2</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\User\bsp\src\bsp_digital_tube.c</PathWithFileName>
<FilenameWithoutPath>bsp_digital_tube.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>3</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\User\bsp\src\bsp_beep.c</PathWithFileName>
<FilenameWithoutPath>bsp_beep.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>4</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\User\bsp\src\bsp_key.c</PathWithFileName>
<FilenameWithoutPath>bsp_key.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>5</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\User\bsp\src\bsp_drv8880.c</PathWithFileName>
<FilenameWithoutPath>bsp_drv8880.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>6</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\User\bsp\src\bsp_step_moto.c</PathWithFileName>
<FilenameWithoutPath>bsp_step_moto.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>7</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\User\bsp\src\bsp_timer.c</PathWithFileName>
<FilenameWithoutPath>bsp_timer.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>8</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\User\bsp\bsp.c</PathWithFileName>
<FilenameWithoutPath>bsp.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>9</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\User\bsp\stm32f10x_it.c</PathWithFileName>
<FilenameWithoutPath>stm32f10x_it.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>10</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\User\bsp\stm32f10x_assert.c</PathWithFileName>
<FilenameWithoutPath>stm32f10x_assert.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>11</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\User\bsp\src\bsp_uart_fifo.c</PathWithFileName>
<FilenameWithoutPath>bsp_uart_fifo.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>12</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\User\bsp\src\bsp_tim_pwm.c</PathWithFileName>
<FilenameWithoutPath>bsp_tim_pwm.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>13</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\User\bsp\src\bsp_eeprom_24xx.c</PathWithFileName>
<FilenameWithoutPath>bsp_eeprom_24xx.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>14</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\User\bsp\src\bsp_i2c_gpio.c</PathWithFileName>
<FilenameWithoutPath>bsp_i2c_gpio.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>MDK-ARM</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>15</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\Libraries\CMSIS\Device\ST\STM32F10x\Source\Templates\arm\startup_stm32f10x_hd.s</PathWithFileName>
<FilenameWithoutPath>startup_stm32f10x_hd.s</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>StdPeriph_Driver</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>16</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_gpio.c</PathWithFileName>
<FilenameWithoutPath>stm32f10x_gpio.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>17</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_rcc.c</PathWithFileName>
<FilenameWithoutPath>stm32f10x_rcc.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>18</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\Libraries\STM32F10x_StdPeriph_Driver\src\misc.c</PathWithFileName>
<FilenameWithoutPath>misc.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>19</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_tim.c</PathWithFileName>
<FilenameWithoutPath>stm32f10x_tim.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>20</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_usart.c</PathWithFileName>
<FilenameWithoutPath>stm32f10x_usart.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>21</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_dac.c</PathWithFileName>
<FilenameWithoutPath>stm32f10x_dac.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>CMSIS</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>22</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\User\bsp\system_stm32f10x.c</PathWithFileName>
<FilenameWithoutPath>system_stm32f10x.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>Doc</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>23</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\Doc\01.例程功能说明.txt</PathWithFileName>
<FilenameWithoutPath>01.例程功能说明.txt</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>24</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\Doc\02.开发环境说明.txt</PathWithFileName>
<FilenameWithoutPath>02.开发环境说明.txt</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
</ProjectOpt>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,9 @@
project.uvproj MDK uV4工程文件,双击这个文件可启动MDK
project.uvopt MDK uV4工程配置参数
CpuRAM.ini 在CPU内部RAM调试的脚本(文本文件)当启动调试时调试器自动执行脚本文件将代码装载在CPU内部RAM
CopyHex_Flash.bat 批处理文件,编译连接成功后将Flash\Obj下的Hex文件复制到前级目录
CopyHex_CpuRAM.bat 批处理文件,编译连接成功后将CpuRAM\Obj下的Hex文件复制到前级目录

BIN
Project/bin_file/Update.bin Normal file

Binary file not shown.