/******************************************************
*说 明:S3C2440 进行微秒级、毫秒级延时函数
******************************************************/
MCLK:405MHz
HCLK:135MHz
PCLK:67.5MHz
在这里定时器时钟频率为PCLK/8=67.5/8=8.4375MHz
定时器0示例代码:
1 void T0DelayNus(UINT16 t)
2 {
3 rTCFG1 &= ~0x0F;
4 rTCFG1 |= 2;
5 rTCNTB0 =(S3C2440PCLK)/8/1000000; //时钟频率为PCLK/8
6 //除以1000000表示进行微秒级延时
7 rTCON &= ~0x0F;
8 rTCON |= (1<<3)|(1<<1)|(1<<0);
9 rTCON &= ~(1<<1);
10
11
12 while(t--)
13 {
14 while(rTCNTO0!=(rTCNTB0-1));
15 }
16
17 rTCON &= ~(1<<0); //停止定时器0
18
19 }
20
21 void T0DelayNms(UINT16 t)
22 {
23 rTCFG1 &= ~0x0F;
24 rTCFG1 |= 2;
25 rTCNTB0 =(S3C2440PCLK)/8/1000; //时钟频率为PCLK/8
26 //除以1000表示进行毫级延时
27 rTCON &= ~0x0F;
28 rTCON |= (1<<3)|(1<<1)|(1<<0);
29 rTCON &= ~(1<<1);
30
31 while(t--)
32 {
33 while(rTCNTO0!=(rTCNTB0-1));
34 }
35
36 rTCON &= ~(1<<0); //停止定时器0
37 }
定时器1示例代码:
1 void T1DelayNus(UINT16 t)
2 {
3 rTCFG1 &= ~(0x0F<<4);
4 rTCFG1 |= (2<<4);
5 rTCNTB1 =(S3C2440PCLK)/8/1000000;
6 rTCON &= ~(0x0F<<8);
7 rTCON |= (1<<11)|(1<<9)|(1<<8);
8 rTCON &= ~(1<<9);
9
10
11 while(t--)
12 {
13
14 while(rTCNTO1!=(rTCNTB1-1));
15
16 }
17
18 rTCON &= ~(1<<8);
19
20 }
21
22
23 void T1DelayNms(UINT16 t)
24 {
25 rTCFG1 &= ~(0x0F<<4);
26 rTCFG1 |= (2<<4);
27 rTCNTB1 =(S3C2440PCLK)/8/1000;
28 rTCON &= ~(0x0F<<8);
29 rTCON |= (1<<11)|(1<<9)|(1<<8);
30 rTCON &= ~(1<<9);
31
32
33 while(t--)
34 {
35 while(rTCNTO1!=(rTCNTB1-1));
36 }
37
38 rTCON &= ~(1<<8);
39
40 }
特别是要注意rTCNTOn与rTCNTBn的关系。
关键字:S3C2440 微秒级 毫秒级 延时函数
引用地址:
S3C2440 进行微秒级、毫秒级延时函数
推荐阅读最新更新时间:2024-03-16 15:28
STM32-使用定时器做延时函数时遇到的坑
做延时函数,可以使用简单的循环等待,如下面这样的: void Delay(uint32_t nCount) { for(; nCount != 0; nCount--); } 但是有个问题,就是这个nCount值怎么取? 我们可以通过多次试验,来确定调用时使用的循环次数。 但是还要考虑下,如果硬件有变化,例如外接晶振变化,或类似的主芯片替换等情况下,这个值有可能会变化。另外,编译的优化选项变化,也可能导致循环次数的变化。也就是说,这样写的延时函数,对外部的依赖项比较多,稍不注意,可能最终的延时时间不准确。 更好的延时方式是使用定时器,这样能更准确的定时,并且移植性也更好一些。 但是使用定时器做延时函数时,也是有一些需要注意
[单片机]
一种嵌入式无线智能家居网关系统的设计方案
0 引言 智能家居系统是为适应现代化家庭生活而形成的一个形式多样化的网络系统。它是现代3C技术(计算机技术,通信技术,控制技术)与传统家居系统相结合的产物,是家居信息化未来的发展方向。智能家居网络通常包括智能家居网关,外部网,安防设备等。智能家居网关与其他4个部分连接,交互信息,对它们进行统一的管理。此外,智能家居网关还接入外部网络,使用户能够远程实时控制管理家庭内部网络。 在本文中,智能家居网络是指应用于家庭环境的无线传感器网络。在家庭中,部署各种传感器,例如红外传感器,烟雾传感器,RFID门磁传感器来监测家庭的一些环境信息,这些传感器通过自组织方式就构建了智能家居网络。所以本文设计的智能家居网关主要是实现WSN
[单片机]
I2S音频总线学习(三)S3C2440的I2S控制器
一、I2S控制器结构框图 S3C2440A的Inter-IC Sound (IIS)总线接口作为一个编解码接口连接外部8/16位立体声音频解码IC用于迷你碟机和可携式应用。IIS总线接口支持IIS总线数据格式和MSB-justified数据格式。该接口对FIFO的访问采用了DMA模式取代了中断。它可以在同一时间接收和发送数据。 图1 结构框图 总线接口,寄存器组和状态机(BRFC):总线接口逻辑和FIFO 访问由状态机控制。 5 位双预定标器(IPSR):一个预定标器用于IIS 总线接口的主时钟发生器,另外一个用作外部编解码时钟发生器。 64 位FIFO(TxFIFO 和RxFIFO):在发送数据传输时,数据写到T
[单片机]
S3C2440之串口
/* 名称:S3C2440之串口 说明:S3C2440的串口,啊。并没有什么特殊的。稍微有点不同的就是,它有一个64字节的FIFO,相当于 C51和STM32中的输入输出缓冲。 关于具体的使用,也是先配置端口为串口功能,然后配置串口的一些参数,如波特率、数据位等等。最后是通过中断或者轮询的方式从缓冲器(FIFO)中读取或写入数据。 这里就不提供代码了,实验和韦东山嵌入式Linux开发中的代码差不多。(我去,改了半天,实验没跑出来,可能还把开发板弄坏了。)哎。 */
[单片机]
STM32开发笔记80: 在构造函数中调用延时函数应注意的问题
单片机型号:STM32L053R8T6 W5500驱动程序完成后,运行时,单片机死机。W5500驱动程序先前已经在项目中具体应用过,运行的比较稳定。这次移植后,没有做改动,但是单片机运行时死机。 此项目与先前项目的不同点在于,项目中有FreeRTOS操作系统运行,原先的项目没有,最后将问题聚焦于W5500的构造函数上,如下程序所示: CW5500::CW5500(void):CSpi() { //uint8_t memsize = {{2,2,2,2,2,2,2,2},{2,2,2,2,2,2,2,2}}; //注册相关的函数 reg_wizchip_cris_cbfunc(w5500_cris_enter
[单片机]
S3C2440开发板裸机程序系列07—NAND FLASH存储器
1. 概述 我的TQ2440开发板上安装有2M的NOR FLASH和512M的NAND FLASH。 NOR FLASH 的特点是芯片内执行(XIP, eXecute In Place),应用程序可以直接在 NOR FLASH 里运行,不必再把代码读到系统RAM中(可以节约SRAM的成本)。NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。 NAND FLASH的特点是有很高的存储密度,并且写入和擦除速度也很快,但是无法直接寻址运行程序,接口上需要专门的控制器。另外NAND FLASH 非常容易出现坏区,所以需要有校验的算法。 因此,NOR FLASH一
[单片机]
S3C2440学习四(如何使用Jlink)
下载程序: 1、 连上Jlink的USB到PC上。连接JTAG到GT2440开发板上,选择从Nor Flash 启动。 2、 板子上电后,启动J-Flash ARM 。File - New Project新建一个工程,然后去配置Options- Project Settings- Target Interface中,为了提升速度,把Jtag Speed After Init设置为第三项,选择2000KHz。 3、 在Flash选项中,要正确输入Base Address:00000000,Organization:16 Bits X 1 chip(s)。并勾选Automatically detect flash memory。(地址
[单片机]
s3c2440定时器中断的应用
在前面的几篇文章中,每当程序需要延时时,我们是利用循环语句来实现。这种方法的延时简单,但不是很精确,就是说不能得到确切的一段时间的延时。因此当需要精确延时时,就不能采用这种方法了。一般是利用定时器来实现。在这里,我们就介绍一下s3c2440定时器的使用方法。 在讲解之前,先介绍一下s3c2440时钟系统。一般来说,MCU的主时钟源主要是外部晶振或外部时钟,而用的最多的是外部晶振。在正确情况下,系统内所使用的时钟都是外部时钟源经过一定的处理得到的。由于外部时钟源的频率一般不能满足系统所需要的高频条件,所以往往需要PLL(锁相环)进行倍频处理。在s3c2440中,有2个不同的PLL,一个是MPLL,另一个是UPLL。UPLL是给US
[单片机]