历史上的今天
返回首页

历史上的今天

今天是: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

推荐阅读

史海拾趣

昆泰芯微电子(CONNTEK)公司的发展小趣事

昆泰芯微电子自成立以来,便以其深厚的技术实力和持续的创新能力,在电子行业中独树一帜。公司拥有一支由清华大学、荷兰代尔夫特理工大学等海内外知名大学毕业的专业技术团队,他们具备在恩智浦、美满电子及高通等半导体名企的工作经历,为公司带来了丰富的行业经验和前沿技术。在传感器芯片领域,昆泰芯微电子成功研发出具有国际一流性能的产品,成功打入一线知名品牌厂商,引领了行业风潮。

Hoffman_Enclosures__Inc.公司的发展小趣事

Hoffman始终将技术创新视为企业发展的核心驱动力。公司不断投入研发资源,致力于开发更加高效、节能、环保的电气机柜和温控产品。其中,数据中心液体冷却技术的推出,更是引领了行业潮流。Hoffman还积极参与国际标准的制定工作,通过遵循和践行全球行业标准,确保产品的通用性和高质量。这些努力不仅提升了公司的技术实力,也进一步巩固了其在行业内的领先地位。

Elite Semiconductor Products Inc公司的发展小趣事

Elite Semiconductor Products Inc(以下简称Elite)自创立之初,就坚持以技术创新为核心竞争力。公司创始人是一位经验丰富的半导体工程师,他深知在电子行业,技术的领先意味着市场的领先。因此,Elite投入大量资源进行研发,不断推出具有领先性能的半导体产品。其中,一款高性能的芯片产品因其卓越的功耗控制和计算能力,在行业内引起了广泛关注。这款产品不仅帮助Elite打开了市场,也为公司后续的技术创新奠定了坚实的基础。

Axiohm公司的发展小趣事

随着国内市场的饱和,Axiohm公司开始寻求国际化发展。公司制定了详细的国际化战略,先后在亚洲、欧洲和北美设立了分支机构和研发中心。通过与当地企业的合作,Axiohm成功打入多个国际市场,并根据不同地区的需求进行产品定制。这一战略不仅拓宽了公司的销售渠道,还提升了品牌知名度。

FCI / Amphenol公司的发展小趣事

1997年,Amphenol公司经历了一次重要的转折点。当时,公司被KKR(一家具有传奇色彩的美国纽约的私人股权投资公司)以杠杆收购的方式收购。KKR的收购为Amphenol公司注入了新的活力,公司开始进行一系列的战略调整和业务转型。在KKR的助力下,Amphenol公司不仅保留了大部分现有的管理团队,还引入了更大的财务杠杆,使得公司能够更加灵活地应对市场变化和挑战。这一收购和转型不仅为Amphenol公司带来了新的发展机遇,也为其在全球连接器市场上的地位奠定了更加坚实的基础。

Crouzet公司的发展小趣事

Crouzet公司,这家以生产自控产品为主的跨国公司,于1921年正式成立。创立之初,Crouzet主要专注于自控产品的研发和生产,凭借其卓越的技术和创新能力,很快在市场中占据了一席之地。公司逐渐扩大生产规模,提升产品质量,赢得了客户的信赖。

问答坊 | AI 解惑

积分电路用电阻大家一般选哪种材料的电容

积分电路用电阻大家一般选哪种材料的电容?…

查看全部问答>

使用STM32做4轴飞行器

不知道团里有没有航模爱好者,现在4轴飞行器很火,因为涉及了4阶系统的稳态控制等一些自控理论,相信有很多爱好者都在研究(国外也都在研究这个啊)。本人是做仪器的,最近也想做个4轴玩玩,具体方案打算使用4pcs STM32做4个无刷无感电机 ...…

查看全部问答>

易语言资源下载器

http://115.com/file/dn0uyscy 1、收集很多网上流行经典的易语言语音教程,和一些常用的工具,易语言模块,易语言支持库。2、此工具能一键下载已收集的的所有语音视频教程和工具,模块,支持库等等。3、还带有一个智能分析115网盘地址,并下 ...…

查看全部问答>

BeagleBone IO速率测试

作者: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 ...…

查看全部问答>

奋斗,实现梦想

你完全可以不再愤青,不用羡慕,只需要通过自己的努力,创造属于自己的明天。 我们的创业团队,有全球领先的产品,目前只缺少一位FPGA开发人员。 需要一定的经验,更需要一颗奋斗的心。 有兴趣请联系ywf_2002@163.com…

查看全部问答>

《MCU工程师炼成记》印刷错误7

P136中间程序 [ 本帖最后由 qinkaiabc 于 2013-10-26 09:01 编辑 ]…

查看全部问答>

崩溃了,这不科学~

如图所示,TA在红色语句处进入中断,但我程序里MC0还未置1,此时查看TA的寄存器,MC0和MC1也都为0,为什么会这样呀?怀疑程序里某处MC0置1,所以导致CCIE置1时,立刻进入中断,那寄存器里MC0和MC1不应该为0呀,实际中,我检查了半天也没找到,泪 ...…

查看全部问答>

通常fpga和arm高速通信各位一般用什么方式

通常fpga和arm高速通信各位一般用什么方式 \0\0\0eeworldpostqq…

查看全部问答>

有偿找人代做DSP信号发生器

DSP采用TMS320VC5509 外扩FLASH二次加载  采用专用上变频芯片AD9857  输出QAM信号  提供论文资料和思路。价格可以商量 联系方式QQ:570270317 …

查看全部问答>

【LPC54100】双核协同工作NO.1点灯

前面简单了解了一下双核的基本配置 以及双核间的通信 准备着手双核协同工作的一些内容了 简单设想了一下这次的方案: M0产生一个随机数,共享给M4 M4读取这个随机数,并进行计算判断是否为偶数,并将结果通知M0 M0收到M4的计算判断结果后, ...…

查看全部问答>