⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wavemaker.txt

📁 STM32手持式示波器源代码
💻 TXT
📖 第 1 页 / 共 2 页
字号:
; 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 + -