📄 timer.txt
字号:
; generated by ARM C/C++ Compiler, 4.1 [Build 481]
; commandline ArmCC [--debug -c --asm --interleave -o.\OBJ\timer.o --depend=.\OBJ\timer.d --cpu=Cortex-M3 --apcs=interwork -O0 -I..\Demo -I.\HARDWARE\EXTI -I.\HARDWARE\KEY -I.\HARDWARE\LCD -I.\HARDWARE\LED -I.\HARDWARE\TIMER -I.\HARDWARE\WDG -I.\SYSTEM\delay -I.\SYSTEM\sys -I.\SYSTEM\usart -I.\USER -IC:\Keil\ARM\INC -IC:\Keil\ARM\INC\ST\STM32F10x --omf_browse=.\OBJ\timer.crf HARDWARE\TIMER\timer.c]
THUMB
AREA ||.text||, CODE, READONLY, ALIGN=2
TIM3_IRQHandler PROC
;;;8 //2ms中断1次
;;;9 void TIM3_IRQHandler(void)
000000 484c LDR r0,|L1.308|
;;;10 {
;;;11 if(TIM3->SR&0X0001)//溢出中断
000002 8800 LDRH r0,[r0,#0]
000004 f0100f01 TST r0,#1
000008 d007 BEQ |L1.26|
;;;12 {
;;;13 LED1=!LED1;
00000a 484b LDR r0,|L1.312|
00000c 6800 LDR r0,[r0,#0]
00000e b908 CBNZ r0,|L1.20|
000010 2001 MOVS r0,#1
000012 e000 B |L1.22|
|L1.20|
000014 2000 MOVS r0,#0
|L1.22|
000016 4948 LDR r1,|L1.312|
000018 6008 STR r0,[r1,#0]
|L1.26|
;;;14 }
;;;15 TIM3->SR&=~(1<<0);//清除中断标志位
00001a 4846 LDR r0,|L1.308|
00001c 8800 LDRH r0,[r0,#0]
00001e f0200001 BIC r0,r0,#1
000022 f04f4180 MOV r1,#0x40000000
000026 f8a10410 STRH r0,[r1,#0x410]
;;;16 }
00002a 4770 BX lr
;;;17 //通用定时器中断初始化
ENDP
Timerx_Init PROC
;;;21 //这里使用的是定时器3!
;;;22 void Timerx_Init(u16 arr,u16 psc)
00002c b570 PUSH {r4-r6,lr}
;;;23 {
00002e 4604 MOV r4,r0
000030 460d MOV r5,r1
;;;24 RCC->APB1ENR|=1<<1;//TIM3时钟使能
000032 4842 LDR r0,|L1.316|
000034 69c0 LDR r0,[r0,#0x1c]
000036 f0400002 ORR r0,r0,#2
00003a 4940 LDR r1,|L1.316|
00003c 61c8 STR r0,[r1,#0x1c]
;;;25 TIM3->ARR=arr; //设定计数器自动重装值//刚好1ms
00003e 4840 LDR r0,|L1.320|
000040 8004 STRH r4,[r0,#0]
;;;26 TIM3->PSC=psc; //预分频器7200,得到10Khz的计数时钟
000042 f04f4080 MOV r0,#0x40000000
000046 f8a05428 STRH r5,[r0,#0x428]
;;;27 //这两个东东要同时设置才可以使用中断
;;;28 TIM3->DIER|=1<<0; //允许更新中断
00004a f8b0040c LDRH r0,[r0,#0x40c]
00004e f0400001 ORR r0,r0,#1
000052 f04f4180 MOV r1,#0x40000000
000056 f8a1040c STRH r0,[r1,#0x40c]
;;;29 TIM3->DIER|=1<<6; //允许触发中断
00005a 4608 MOV r0,r1
00005c f8b0040c LDRH r0,[r0,#0x40c]
000060 f0400040 ORR r0,r0,#0x40
000064 f8a1040c STRH r0,[r1,#0x40c]
;;;30
;;;31 TIM3->CR1|=0x01; //使能定时器3
000068 4608 MOV r0,r1
00006a f8b00400 LDRH r0,[r0,#0x400]
00006e f0400001 ORR r0,r0,#1
000072 f8a10400 STRH r0,[r1,#0x400]
;;;32 MY_NVIC_Init(1,3,TIM3_IRQChannel,2);//抢占1,子优先级3,组2
000076 f04f0302 MOV r3,#2
00007a f04f021d MOV r2,#0x1d
00007e f04f0103 MOV r1,#3
000082 f04f0001 MOV r0,#1
000086 f7fffffe BL MY_NVIC_Init
;;;33 }
00008a bd70 POP {r4-r6,pc}
;;;34
ENDP
PWM_Init PROC
;;;41 //psc:时钟预分频数
;;;42 void PWM_Init(u16 arr,u16 psc)
00008c 4a2b LDR r2,|L1.316|
;;;43 {
;;;44 //此部分需手动修改IO口设置
;;;45 RCC->APB1ENR|=1<<1; //TIM3时钟使能
00008e 69d2 LDR r2,[r2,#0x1c]
000090 f0420202 ORR r2,r2,#2
000094 4b29 LDR r3,|L1.316|
000096 61da STR r2,[r3,#0x1c]
;;;46
;;;47 GPIOA->CRH&=0XFFFFFFF0;//PA8输出
000098 4a2a LDR r2,|L1.324|
00009a 6812 LDR r2,[r2,#0]
00009c f022020f BIC r2,r2,#0xf
0000a0 4b29 LDR r3,|L1.328|
0000a2 f8c32804 STR r2,[r3,#0x804]
;;;48 GPIOA->CRH|=0X00000004;//浮空输入
0000a6 461a MOV r2,r3
0000a8 f8d22804 LDR r2,[r2,#0x804]
0000ac f0420204 ORR r2,r2,#4
0000b0 f8c32804 STR r2,[r3,#0x804]
;;;49
;;;50 GPIOA->CRL&=0X0FFFFFFF;//PA7输出
0000b4 461a MOV r2,r3
0000b6 f8d22800 LDR r2,[r2,#0x800]
0000ba f0224270 BIC r2,r2,#0xf0000000
0000be f8c32800 STR r2,[r3,#0x800]
;;;51 GPIOA->CRL|=0XB0000000;//复用功能输出
0000c2 461a MOV r2,r3
0000c4 f8d22800 LDR r2,[r2,#0x800]
0000c8 f0424230 ORR r2,r2,#0xb0000000
0000cc f8c32800 STR r2,[r3,#0x800]
;;;52 GPIOA->ODR|=1<<7;//PA7上拉
0000d0 461a MOV r2,r3
0000d2 f8d2280c LDR r2,[r2,#0x80c]
0000d6 f0420280 ORR r2,r2,#0x80
0000da f8c3280c STR r2,[r3,#0x80c]
;;;53
;;;54 TIM3->ARR=arr;//设定计数器自动重装值
0000de f04f4280 MOV r2,#0x40000000
0000e2 f8a2042c STRH r0,[r2,#0x42c]
;;;55 TIM3->PSC=psc;//预分频器不分频
0000e6 f8a21428 STRH r1,[r2,#0x428]
;;;56
;;;57 TIM3->CCMR1|=7<<12; //CH2 PWM2模式
0000ea f8b22418 LDRH r2,[r2,#0x418]
0000ee f44242e0 ORR r2,r2,#0x7000
0000f2 f04f4380 MOV r3,#0x40000000
0000f6 f8a32418 STRH r2,[r3,#0x418]
;;;58 TIM3->CCMR1|=1<<11; //CH2预装载使能
0000fa 461a MOV r2,r3
0000fc f8b22418 LDRH r2,[r2,#0x418]
000100 f4426200 ORR r2,r2,#0x800
000104 f8a32418 STRH r2,[r3,#0x418]
;;;59
;;;60 TIM3->CCER|=1<<4; //OC2 输出使能
000108 461a MOV r2,r3
00010a f8b22420 LDRH r2,[r2,#0x420]
00010e f0420210 ORR r2,r2,#0x10
000112 4b0e LDR r3,|L1.332|
000114 801a STRH r2,[r3,#0]
;;;61
;;;62 TIM3->CR1=0x8000; //ARPE使能
000116 f44f4200 MOV r2,#0x8000
00011a f04f4380 MOV r3,#0x40000000
00011e f8a32400 STRH r2,[r3,#0x400]
;;;63 TIM3->CR1|=0x01; //使能定时器3
000122 f04f4280 MOV r2,#0x40000000
000126 f8b22400 LDRH r2,[r2,#0x400]
00012a f0420201 ORR r2,r2,#1
00012e 4b08 LDR r3,|L1.336|
000130 801a STRH r2,[r3,#0]
;;;64 }
000132 4770 BX lr
;;;65
ENDP
|L1.308|
DCD 0x40000410
|L1.312|
DCD 0x42210184
|L1.316|
DCD 0x40021000
|L1.320|
DCD 0x4000042c
|L1.324|
DCD 0x40010804
|L1.328|
DCD 0x40010000
|L1.332|
DCD 0x40000420
|L1.336|
DCD 0x40000400
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -