新唐单片机如何生成精确延迟

最近在搞新唐单片机,所以记录下这部分内容。

之前的相关文章

呵,你会51单片机的精确延时吗?

假如使用者想要产生精确的延迟时间,建议使用 __nop() 函数来组合达成。__nop() 函数能够产生 1 个精确的 CPU 频率周期延迟时间。然而,由于 flash 的速度低于 CPU 的频率速度,在 CPU 内部有快取优化的技术,编译程序也会自动针对程序做优化,造成__nop() 函数组合出来的时间会与预期的时间不同。因此,建议将程序代码放置于 SRAM 中执行,以避免优化造成的非预期延迟时间问题。

 

以产生 2 us 的延迟时间为例:

(1) CPU 频率= 32MHz => 1 CPU 频率周期花费 1/32000000 sec = 31.25 ns

(2) 2 us 延迟时间 = 2000 ns / 31.25 ns = 64 次 CPU 频率周期

 

1. 于KEIL的项目中加入一个新的.c文件

2. 将文件位置指定至SRAM

3. 设定 Linker

4. 编写延迟程序代码

 

由于执行一次 for 循环需要花费 5 个 CPU 频率周期的时间,因此可以使用以下的方式达到 2 us 的时间延迟

 

(1) 执行一次 for 循环需要 5 个 CPU 频率周期

(2) 执行一次 __NOP() 指令需要 1 个 CPU 频率周期

(3) 64 个 CPU 频率周期 = 8 ( 5 ( for 循环 ) + 3 * 1 ( __NOP() ) )

 

void Delay_Test_Function(void)
{for(i = 0; i <8; i ++)/ *延迟2微秒。* /{__NOP();__NOP();__NOP();}
}

 

5. 测试

使用者可以利用下列程序代码进行延迟时间的测试,透过示波器量测 I/O toggle 的时间,以观察延迟函数是否精准。由于 CPU 需要下指令让 I/O 转态,因此观察到的时间中需要增加转态的指令时间 (PA0 = 0)。

 

执行一次 PA = 0 需花费 11 CPU 指令周期,这意味着 I/O 会持续 (64+11) * 31.25 ns = 2343.75 ns 的时间才进行转态。

 

void Delay_Test_Function(void)
{uint32_t i,DelayCNTofCPUClock = 8;PA0 = 1;for(i = 0; i <DelayCNTofCPUClock; i ++)/ *延迟2微秒。* /{__NOP();__NOP();__NOP();}PA0 = 0;
}

 


推荐阅读:

专辑|Linux文章汇总

专辑|程序人生

专辑|C语言

我的知识小密圈

关注公众号,后台回复「1024」获取学习资料网盘链接。

欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466398.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

request获取各种路径总结、页面跳转总结。

页面跳转总结 JSP中response.sendRedirect()与request.getRequestDispatcher().forward(request,response)这两个对象都可以使页面跳转&#xff0c;但是二者是有很大的区别的&#xff0c;分条来说&#xff0c;有以下几点&#xff1a;①response.sendRedirect(url)-----重定向到…

CFileDialog

https://baike.baidu.com/item/CFileDialog/9747028

GBT19056精要

GBT19056精要 1、专业术语 1.1脉冲系数impulse ratio&#xff1a;车速传感器在车辆行驶1km距离过程中产生的脉冲信号个数。 1.2行驶开始时间 starttime of travelling&#xff1a;车辆从静止状态转变为行驶状态&#xff08;速度大于0km/h且持续10s以上&#xff09;的时间。 …

看门狗你确定会用了?(经验干货满满)

看门狗&#xff1f;看门狗(watchdog)-字面上的意思就是一条看门的dog&#xff0c;如果一切正常dog就不回叫&#xff0c;如出现异常dog就会叫&#xff0c;并且把你逼到门外&#xff01;其实看门狗不是什么特殊的外设&#xff0c;一般我们叫看门狗也叫做看门狗定时器&#xff0c;…

自定义GridView 介绍

GridView 是Microsoft DataGrid(VS2003版本)的一个替代品&#xff0c;它继承了DataGrid的很多优点&#xff0c;同时也继承了它的很多缺点&#xff0c;我们在方便使用的同时&#xff0c;还是不免会产生一丝遗憾。早在2004年的时候&#xff0c;对DataGrid 进行了二次封装(DotNetG…

递归算法时间复杂度计算

https://blog.csdn.net/so_geili/article/details/53444816

图解,C语言数据结构,插入排序

之前写过的排序文章&#xff0c;放上链接给大家看看。C语言&#xff0c;谁都能看得懂的归并排序高中新生开学&#xff0c;需要进行军训&#xff0c;军训的时候&#xff0c;教官需要大家把按高到低排队排好。先随机找到一个比较帅的男生做排头。然后第二个人过来跟这个男生比身高…

十大经典算法 - 转载

十大经典排序算法最强总结&#xff08;含JAVA代码实现&#xff09; 最近几天在研究排序算法&#xff0c;看了很多博客&#xff0c;发现网上有的文章中对排序算法解释的并不是很透彻&#xff0c;而且有很多代码都是错误的&#xff0c;例如有的文章中在“桶排序”算法中对每个桶进…

7E加码解码

// // 加密单个字符 uint8_t* hdlc_encode_buf(uint8_t *buf, uint8_t c) {switch (c){case 0x7E:*buf 0x7D;*buf 0x02;break;case 0x7D:*buf 0x7D;*buf 0x01;break;default:*buf c;break;}return buf; }// // 加密字符串 static void encode_process(uint8_t *encoded_bu…

我们应该学习什么 java、C#还是C++(VC)

来源&#xff1a;http://www.itcast.net/community/view/482 此文仅代表个人观点&#xff0c;欢迎讨论。 很多学员有这样的问题&#xff1a;我们应该学习什么语言&#xff0c;java、C#还是c&#xff1f; 好像很多公司都找会VC的人&#xff0c;java和C#有用吗&…

读写ini文件

读写ini文件 WritePrivateProfileString https://blog.csdn.net/wuguai4/article/details/7287346

首个开源 Linux 系统登陆火星,占有率超 Windows,一同登录还有一款安卓手机芯片...

来源| 量子位 作者 | 贾浩楠 萧箫 公众号 QbitAI“确认着陆&#xff01;毅力号安全到达火星表面。”就在昨日凌晨4点55分&#xff0c;美国“毅力号”不经变轨&#xff0c;直接冲入火星大气层&#xff0c;最终成功着陆。“毅力号”成功着陆后&#xff0c;很快传回了首张图片。…

PL/SQL包(Package)

包&#xff08;Package&#xff09;的主要作用是用于逻辑组合相关的PL/SQL类型&#xff0c;一旦创建了包&#xff0c;包就会被存储在Oracle数据库中。 包由以下两部分组成&#xff1a; &#xff08;1&#xff09;包规范&#xff08;Specification&#xff09;&#xff1a;主要是…

VS2005(c#)项目调试问题解决方案集锦

1.检测到有潜在危险的 Request.Form 值原因: (1)在提交数据的页面或webconfig中没有对validateRequest的属性进行正确的设置 (2)HTML里面写了两个<form>引起解决: 方案一&#xff1a; 在.aspx文件头中加入这句&#xff1a; <% Page validateRequest"false"…

TQ210——TFTP裸板程序下载

TQ210——TFTP裸板程序下载 1. 直接下载u-boot.bin到内存运行&#xff08;使用DNW中的的210USB启动下载&#xff09;,在DNW中输入命令可以直接查看修改u-boot.bin 2. 通过tftp下载你需要下载的程序到内存下载示例: tftp 30000000(指定程序led_on.bin下载到内存中的30000000地址…

看了这动图,你还会相信眼睛吗?

面对下面这张动图&#xff0c; 你看到的是两个顺时针旋转的黄蓝相间的圆环&#xff0c;在中心箭头的指引下做上下左右运动、扩展、收缩。稍微留神一下&#xff0c;你会发现好像这应该是收到箭头的暗示所产生的幻觉。▲ 圆圈看起来跟着箭头移动和变化为了证实这个错误的起因&…

Web页面在桌面上显示的后台基本步骤

一个Web页面如何出现在你的电脑屏幕上,以下是幕后的基本步骤: 例如访问&#xff1a;地址是http://www.osssi.com/article/1/120 的web页面。 浏览器把URL拆分成了三个部分: >协议&#xff1a;http >服务器名称&#xff1a;www.osssi.com >文件名&#xff1a;artic…

WDS远程安装

WDS远程安装1.创建可启动 Windows PEa&#xff09;安装Windows AIK软件&#xff0c;免费下载700多Mb&#xff09;运行 copype.cmd 脚本&#xff0c;以创建本地 Windows?PE 构建目录。例如&#xff0c;在命令提示符下&#xff0c;键入以下内容&#xff1a;cd Program Files\Win…

TQ210——下载总结

TQ210——下载总结 学习方法:(分阶段学习)-----内核学习是一个长期的过程 1.学习使用内核提供的接口函数 (涉及到很多操作系统知识,编程规范) 2.找到一个函数如do_fork来学习进程管理模块 3.通过kmalloc函数来学习进程管理,通过do_irq学习中断管理 1.U-BOOT配置与烧写常用命令…

解剖8051内核如何进行多任务切换

最近在玩新唐单片机&#xff0c;这个跟我之前用的51内核是一样的&#xff0c;然后今天觉得跑下多任务&#xff0c;自己研究了下&#xff0c;跟几个同学还讨论了&#xff0c;发现有些人对切换过程还不是十分明白&#xff0c;所以发个文章出来。直接上代码#include "MS51_16…