历史上的今天
今天是:2024年11月27日(星期三)
2019年11月27日 | 用看门狗定时器做计时器,计算程序耗时,超声波测距,FL244
2019-11-27 来源:eefocus
开发板:FL2440
核心芯片:S3C2440(ARM9)
超声波模块:HC-SR04
超声波模块工作原理:共四个脚,VCC接5V,GND接地,Trig脚接芯片通过IO传出的高电平(持续时间不低于10微秒),之后Echo脚输出一段时间高电平,高电平持续时间即为超声波发出到接收到回波的间隔时间。
主要是为了使用看门狗定时器来作计时器,来计算Echo脚返回的高电平持续时间,要将复位使能与中断使能关闭,然后给“狗”最大数值,持续一段时间后,用最大数值减去当前数值,就可得到消耗的数值,再乘以“狗”每次减数的时间间隔(通过设定预分频与分频因子来确定),就是消耗的时间。
试验期间出现的重要错误:程序自动run后,消耗时间总是0,而采用AXD单步执行则可以得出正确数值——解决方法:将“狗”的每次递减的时间间隔加大。
下面来程序:
2440init.s
1 ;=========================================
2 ; NAME: 2440INIT.S
3 ; DESC: C start up codes
4 ; Configure memory, ISR ,stacks
5 ; Initialize C-variables
6 ; HISTORY:
7 ; 2002.02.25:kwtark: ver 0.0
8 ; 2002.03.20:purnnamu: Add some functions for testing STOP,Sleep mode
9 ; 2003.03.14:DonGo: Modified for 2440.
10 ;=========================================
11
12 GET option.inc
13 GET memcfg.inc
14 GET 2440addr.inc
15
16 BIT_SELFREFRESH EQU (1<<22)
17
18 ;Pre-defined constants
19 USERMODE EQU 0x10
20 FIQMODE EQU 0x11
21 IRQMODE EQU 0x12
22 SVCMODE EQU 0x13
23 ABORTMODE EQU 0x17
24 UNDEFMODE EQU 0x1b
25 MODEMASK EQU 0x1f
26 NOINT EQU 0xc0
27
28 ;The location of stacks
29 UserStack EQU (_STACK_BASEADDRESS-0x3800) ;0x33ff4800 ~
30 SVCStack EQU (_STACK_BASEADDRESS-0x2800) ;0x33ff5800 ~
31 UndefStack EQU (_STACK_BASEADDRESS-0x2400) ;0x33ff5c00 ~
32 AbortStack EQU (_STACK_BASEADDRESS-0x2000) ;0x33ff6000 ~
33 IRQStack EQU (_STACK_BASEADDRESS-0x1000) ;0x33ff7000 ~
34 FIQStack EQU (_STACK_BASEADDRESS-0x0) ;0x33ff8000 ~
35
36 ;Check if tasm.exe(armasm -16 ...@ADS 1.0) is used.
37 GBLL THUMBCODE
38 [ {CONFIG} = 16
39 THUMBCODE SETL {TRUE}
40 CODE32
41 |
42 THUMBCODE SETL {FALSE}
43 ]
44
45 MACRO
46 MOV_PC_LR
47 [ THUMBCODE
48 bx lr
49 |
50 mov pc,lr
51 ]
52 MEND
53
54 MACRO
55 MOVEQ_PC_LR
56 [ THUMBCODE
57 bxeq lr
58 |
59 moveq pc,lr
60 ]
61 MEND
62
63
64 MACRO
65 $HandlerLabel HANDLER $HandleLabel
66
67 $HandlerLabel
68 sub sp,sp,#4 ;decrement sp(to store jump address)
69 stmfd sp!,{r0} ;PUSH the work register to stack(lr does not push because it return to original address)
70 ldr r0,=$HandleLabel;load the address of HandleXXX to r0
71 ldr r0,[r0] ;load the contents(service routine start address) of HandleXXX
72 str r0,[sp,#4] ;store the contents(ISR) of HandleXXX to stack
73 ldmfd sp!,{r0,pc} ;POP the work register and pc(jump to ISR)
74 MEND
75
76
77
78
79 IMPORT Main ; The main entry of mon program
80
81 AREA Init,CODE,READONLY
82
83 ENTRY
84
85 EXPORT __ENTRY
86 __ENTRY
87 ResetEntry
88 ;1)The code, which converts to Big-endian, should be in little endian code.
89 ;2)The following little endian code will be compiled in Big-Endian mode.
90 ; The code byte order should be changed as the memory bus width.
91 ;3)The pseudo instruction,DCD can not be used here because the linker generates error.
92 ASSERT :DEF:ENDIAN_CHANGE
93 [ ENDIAN_CHANGE
94 ASSERT :DEF:ENTRY_BUS_WIDTH
95
96
97 [ ENTRY_BUS_WIDTH=16
98 andeq r14,r7,r0,lsl #20 ;DCD 0x0007ea00
99 ]
100
101 [ ENTRY_BUS_WIDTH=8
102 streq r0,[r0,-r10,ror #1] ;DCD 0x070000ea
103 ]
104 |
105 b ResetHandler
106 ]
107 b HandlerUndef ;handler for Undefined mode
108 b HandlerSWI ;handler for SWI interrupt
109 b HandlerPabort ;handler for PAbort
110 b HandlerDabort ;handler for DAbort
111 b . ;reserved
112 b HandlerIRQ ;handler for IRQ interrupt
113 b HandlerFIQ ;handler for FIQ interrupt
114
115 ;@0x20
116 ; b EnterPWDN ; Must be @0x20.
117
118
119 HandlerFIQ HANDLER HandleFIQ
120 HandlerIRQ HANDLER HandleIRQ
121 HandlerUndef HANDLER HandleUndef
122 HandlerSWI HANDLER HandleSWI
123 HandlerDabort HANDLER HandleDabort
124 HandlerPabort HANDLER HandlePabort
125
126 IsrIRQ
127 sub sp,sp,#4 ;reserved for PC
128 stmfd sp!,{r8-r9}
129
130 ldr r9,=INTOFFSET
131 ldr r9,[r9]
132 ldr r8,=HandleEINT0
133 add r8,r8,r9,lsl #2
134 ldr r8,[r8]
135 str r8,[sp,#8]
136 ldmfd sp!,{r8-r9,pc}
137
138
139 LTORG
140
141 ;=======
142 ; ENTRY
143 ;=======
144 ResetHandler
145 ldr r0,=WTCON ;watch dog disable
146 ldr r1,=0x0
147 str r1,[r0]
148
149 ldr r0,=INTMSK
150 ldr r1,=0xffffffff ;all interrupt disable
151 str r1,[r0]
152
153 ldr r0,=INTSUBMSK
154 ldr r1,=0x7fff ;all sub interrupt disable
155 str r1,[r0]
156
157
158
159 ;To reduce PLL lock time, adjust the LOCKTIME register.
160 ldr r0,=LOCKTIME
161 ldr r1,=0xffffff
162 str r1,[r0]
163
164 [ PLL_ON_START
165 ; Added for confirm clock divide. for 2440.
166 ; Setting value Fclk:Hclk:Pclk
167 ldr r0,=CLKDIVN
168 ldr r1,=CLKDIV_VAL ; 0=1:1:1, 1=1:1:2, 2=1:2:2, 3=1:2:4, 4=1:4:4, 5=1:4:8, 6=1:3:3, 7=1:3:6.
169 str r1,[r0]
170
171 ;program has not been copied, so use these directly,
172 [ CLKDIV_VAL>1 ; means Fclk:Hclk is not 1:1.
173 mrc p15,0,r0,c1,c0,0
174 orr r0,r0,#0xc0000000;R1_nF:OR:R1_iA
175 mcr p15,0,r0,c1,c0,0
176 |
177 mrc p15,0,r0,c1,c0,0
178 bic r0,r0,#0xc0000000;R1_iA:OR:R1_nF
179 mcr p15,0,r0,c1,c0,0
180 ]
181
182 ;Configure UPLL
183 ldr r0,=UPLLCON
184 ldr r1,=((U_MDIV<<12)+(U_PDIV<<4)+U_SDIV)
185 str r1,[r0]
186 nop ; Caution: After UPLL setting, at least 7-clocks delay must be inserted for setting hardware be completed.
187 nop
188 nop
189 nop
190 nop
191 nop
192 nop
193 ;Configure MPLL
194 ldr r0,=MPLLCON
195 ldr r1,=((M_MDIV<<12)+(M_PDIV<<4)+M_SDIV) ;Fin=16.9344MHz
196 str r1,[r0]
197 ]
198
199 ;Check if the boot is caused by the wake-up from SLEEP mode.
200
201
202
203
204 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
205 ;;;;;;;;;;;;; When EINT0 is pressed, Clear SDRAM
206 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
207 ; check if EIN0 button is pressed
208
209
210 1 bl InitStacks
史海拾趣
|
不知道团里有没有航模爱好者,现在4轴飞行器很火,因为涉及了4阶系统的稳态控制等一些自控理论,相信有很多爱好者都在研究(国外也都在研究这个啊)。本人是做仪器的,最近也想做个4轴玩玩,具体方案打算使用4pcs STM32做4个无刷无感电机 ...… 查看全部问答> |
|
作者:chenzhufly QQ:36886052 ( 转载请注明出处)BeagleBone的IO控制可以见我发的这个帖子:Linux下AM335X的GPIO控制https://bbs.eeworld.com.cn/thread-327156-1-2.html 测试代码:#include <stdlib.h>#include <sys/types.h>#include ...… 查看全部问答> |
|
DSP采用TMS320VC5509 外扩FLASH二次加载 采用专用上变频芯片AD9857 输出QAM信号 提供论文资料和思路。价格可以商量 联系方式QQ:570270317 … 查看全部问答> |
|
前面简单了解了一下双核的基本配置 以及双核间的通信 准备着手双核协同工作的一些内容了 简单设想了一下这次的方案: M0产生一个随机数,共享给M4 M4读取这个随机数,并进行计算判断是否为偶数,并将结果通知M0 M0收到M4的计算判断结果后, ...… 查看全部问答> |




