📄 wavemaker.txt
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\wavemaker.o --depend=.\Obj\wavemaker.d --device=DARMSTM --apcs=interwork -O0 -Otime -I..\..\Libraries\CMSIS\Core\CM3 -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Source\inc -Id:\Keil\ARM\INC\ST\STM32F10x -D__MICROLIB -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER ..\..\Source\src\WaveMaker.c]
THUMB
AREA ||i.InitWaveMaker||, CODE, READONLY, ALIGN=2
InitWaveMaker PROC
;;;182 */
;;;183 void InitWaveMaker(void)
000000 b510 PUSH {r4,lr}
;;;184 {
000002 b08c SUB sp,sp,#0x30
;;;185 {
;;;186 uint32_t i;
;;;187
;;;188 for (i = 0; i < 32; i++)
000004 2400 MOVS r4,#0
000006 e013 B |L1.48|
|L1.8|
;;;189 {
;;;190 /* 调整正弦波幅度 */
;;;191 g_Wave[i] = g_SineWave32[i] * 0.606;
000008 4946 LDR r1,|L1.292|
00000a f8310014 LDRH r0,[r1,r4,LSL #1]
00000e f7fffffe BL __aeabi_ui2d
000012 e9cd010a STRD r0,r1,[sp,#0x28]
000016 a044 ADR r0,|L1.296|
000018 c80c LDM r0!,{r2,r3}
00001a 980a LDR r0,[sp,#0x28]
00001c f7fffffe BL __aeabi_dmul
000020 e9cd0108 STRD r0,r1,[sp,#0x20]
000024 f7fffffe BL __aeabi_d2uiz
000028 4941 LDR r1,|L1.304|
00002a f8210014 STRH r0,[r1,r4,LSL #1]
00002e 1c64 ADDS r4,r4,#1 ;188
|L1.48|
000030 2c20 CMP r4,#0x20 ;188
000032 d3e9 BCC |L1.8|
;;;192 }
;;;193
;;;194 }
;;;195
;;;196 /* 配置时钟 */
;;;197 {
;;;198 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);
000034 2101 MOVS r1,#1
000036 2002 MOVS r0,#2
000038 f7fffffe BL RCC_AHBPeriphClockCmd
;;;199
;;;200 /* GPIOA Periph clock enable */
;;;201 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
00003c 2101 MOVS r1,#1
00003e 2004 MOVS r0,#4
000040 f7fffffe BL RCC_APB2PeriphClockCmd
;;;202
;;;203 /* DAC Periph clock enable */
;;;204 RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
000044 2101 MOVS r1,#1
000046 0748 LSLS r0,r1,#29
000048 f7fffffe BL RCC_APB1PeriphClockCmd
;;;205
;;;206 /* TIM6 Periph clock enable */
;;;207 //RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
;;;208 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);
00004c 2101 MOVS r1,#1
00004e 2010 MOVS r0,#0x10
000050 f7fffffe BL RCC_APB1PeriphClockCmd
;;;209 }
;;;210
;;;211 /* 第1步,配置GPIO. */
;;;212 {
;;;213 GPIO_InitTypeDef GPIO_InitStructure;
;;;214
;;;215 // RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
;;;216
;;;217 /* 配置PA4为DAC_OUT1 */
;;;218 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
000054 2010 MOVS r0,#0x10
000056 f8ad002c STRH r0,[sp,#0x2c]
;;;219 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
00005a 2000 MOVS r0,#0
00005c f88d002f STRB r0,[sp,#0x2f]
;;;220 GPIO_Init(GPIOA, &GPIO_InitStructure);
000060 a90b ADD r1,sp,#0x2c
000062 4834 LDR r0,|L1.308|
000064 f7fffffe BL GPIO_Init
;;;221 }
;;;222
;;;223 /* TIM6 Configuration */
;;;224 #if 1 /* 用TIM6, IAR下不产生波形 */
;;;225 {
;;;226 // RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);
;;;227
;;;228 TIM_PrescalerConfig(TIM6, 0, TIM_PSCReloadMode_Update);
000068 2200 MOVS r2,#0
00006a 4611 MOV r1,r2
00006c 4832 LDR r0,|L1.312|
00006e f7fffffe BL TIM_PrescalerConfig
;;;229
;;;230 /* 决定DAC输出的采样频率
;;;231 x = 72000000 / 频率
;;;232 */
;;;233 //TIM_SetAutoreload(TIM6, 562); /* 562 输出1KHz的正弦波 */
;;;234 //TIM_SetAutoreload(TIM6, 22); /* 22 输出100KHz的正弦波 */
;;;235 TIM_SetAutoreload(TIM6, 220); /* 22 输出10KHz的正弦波 */
000072 21dc MOVS r1,#0xdc
000074 4830 LDR r0,|L1.312|
000076 f7fffffe BL TIM_SetAutoreload
;;;236
;;;237
;;;238 /* TIM6 TRGO selection */
;;;239 TIM_SelectOutputTrigger(TIM6, TIM_TRGOSource_Update);
00007a 2120 MOVS r1,#0x20
00007c 482e LDR r0,|L1.312|
00007e f7fffffe BL TIM_SelectOutputTrigger
;;;240 }
;;;241 #else
;;;242 {
;;;243 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
;;;244
;;;245 /* TIM2 Configuration */
;;;246 /* Time base configuration */
;;;247 TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
;;;248 TIM_TimeBaseStructure.TIM_Period = 0x19;
;;;249 TIM_TimeBaseStructure.TIM_Prescaler = 0x0;
;;;250 TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
;;;251 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
;;;252 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
;;;253
;;;254 /* TIM2 TRGO selection */
;;;255 TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update);
;;;256 }
;;;257 #endif
;;;258
;;;259 /* DAC channel1 Configuration */
;;;260 {
;;;261 DAC_InitTypeDef DAC_InitStructure;
;;;262
;;;263 // RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
;;;264
;;;265 DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO;
000082 2004 MOVS r0,#4
000084 9008 STR r0,[sp,#0x20]
;;;266 //DAC_InitStructure.DAC_Trigger = DAC_Trigger_T2_TRGO;
;;;267 DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
000086 2000 MOVS r0,#0
000088 9009 STR r0,[sp,#0x24]
;;;268 DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;
00008a 2002 MOVS r0,#2
00008c 900b STR r0,[sp,#0x2c]
;;;269 DAC_Init(DAC_Channel_1, &DAC_InitStructure);
00008e a908 ADD r1,sp,#0x20
000090 2000 MOVS r0,#0
000092 f7fffffe BL DAC_Init
;;;270 }
;;;271
;;;272 {
;;;273 uint32_t i;
;;;274
;;;275 for (i = 0; i < 32; i++)
000096 2400 MOVS r4,#0
000098 e013 B |L1.194|
|L1.154|
;;;276 {
;;;277 /* 调整正弦波幅度 */
;;;278 g_Wave[i] = g_SineWave32[i] * 0.606;
00009a 4922 LDR r1,|L1.292|
00009c f8310014 LDRH r0,[r1,r4,LSL #1]
0000a0 f7fffffe BL __aeabi_ui2d
0000a4 e9cd010a STRD r0,r1,[sp,#0x28]
0000a8 a01f ADR r0,|L1.296|
0000aa c80c LDM r0!,{r2,r3}
0000ac 980a LDR r0,[sp,#0x28]
0000ae f7fffffe BL __aeabi_dmul
0000b2 e9cd0108 STRD r0,r1,[sp,#0x20]
0000b6 f7fffffe BL __aeabi_d2uiz
0000ba 491d LDR r1,|L1.304|
0000bc f8210014 STRH r0,[r1,r4,LSL #1]
0000c0 1c64 ADDS r4,r4,#1 ;275
|L1.194|
0000c2 2c20 CMP r4,#0x20 ;275
0000c4 d3e9 BCC |L1.154|
;;;279 }
;;;280
;;;281 }
;;;282
;;;283 /* DMA2 channel3 configuration */
;;;284 {
;;;285 DMA_InitTypeDef DMA_InitStructure;
;;;286
;;;287 // RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);
;;;288
;;;289 DMA_DeInit(DMA2_Channel3);
0000c6 481d LDR r0,|L1.316|
0000c8 f7fffffe BL DMA_DeInit
;;;290 DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR12R1_Address;
0000cc 481c LDR r0,|L1.320|
0000ce 9001 STR r0,[sp,#4]
;;;291 DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&g_Wave;
0000d0 4817 LDR r0,|L1.304|
0000d2 9002 STR r0,[sp,#8]
;;;292 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
0000d4 2010 MOVS r0,#0x10
0000d6 9003 STR r0,[sp,#0xc]
;;;293 DMA_InitStructure.DMA_BufferSize = 32;
0000d8 2020 MOVS r0,#0x20
0000da 9004 STR r0,[sp,#0x10]
;;;294 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
0000dc 2000 MOVS r0,#0
0000de 9005 STR r0,[sp,#0x14]
;;;295 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
0000e0 2080 MOVS r0,#0x80
0000e2 9006 STR r0,[sp,#0x18]
;;;296 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
0000e4 0040 LSLS r0,r0,#1
0000e6 9007 STR r0,[sp,#0x1c]
;;;297 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
0000e8 0080 LSLS r0,r0,#2
0000ea 9008 STR r0,[sp,#0x20]
;;;298 DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
0000ec 2020 MOVS r0,#0x20
0000ee 9009 STR r0,[sp,#0x24]
;;;299 DMA_InitStructure.DMA_Priority = DMA_Priority_High;
0000f0 0200 LSLS r0,r0,#8
0000f2 900a STR r0,[sp,#0x28]
;;;300 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
0000f4 2000 MOVS r0,#0
0000f6 900b STR r0,[sp,#0x2c]
;;;301 DMA_Init(DMA2_Channel3, &DMA_InitStructure);
0000f8 a901 ADD r1,sp,#4
0000fa 4810 LDR r0,|L1.316|
0000fc f7fffffe BL DMA_Init
;;;302
;;;303 /* Enable DMA2 Channel3 */
;;;304 DMA_Cmd(DMA2_Channel3, ENABLE);
000100 2101 MOVS r1,#1
000102 480e LDR r0,|L1.316|
000104 f7fffffe BL DMA_Cmd
;;;305 }
;;;306
;;;307 /* Enable DAC Channel1: Once the DAC channel1 is enabled, PA.04 is
;;;308 automatically connected to the DAC converter. */
;;;309 DAC_Cmd(DAC_Channel_1, ENABLE);
000108 2101 MOVS r1,#1
00010a 2000 MOVS r0,#0
00010c f7fffffe BL DAC_Cmd
;;;310
;;;311 /* Enable DMA for DAC Channel1 */
;;;312 DAC_DMACmd(DAC_Channel_1, ENABLE);
000110 2101 MOVS r1,#1
000112 2000 MOVS r0,#0
000114 f7fffffe BL DAC_DMACmd
;;;313
;;;314 /* TIM6 enable counter */
;;;315 TIM_Cmd(TIM6, ENABLE);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -