精华内容
下载资源
问答
  • trio运动控制器 清空各轴的脉冲数,可用于清空埃斯顿私服电机的圈内脉冲数,(记录在这里,防止忘记)
  •  为处理此部分功能,本章在创建该脉冲和瞬态测量控件时,建立一个重新初始化游标子Ⅵ。在每个瞬态测量控件中调用该初始化游标子Ⅵ,从而在瞬态测量控件属性时,能够通过初始化游标在测量结果波形图上显示游标。以下...
  • 这个脚本包含许多函数,它们一起提供函数initializeatomspeeds的实现,该函数...例如,速度可以根据温度来设定,然后某个特定分子的速度可以被赋予一个脉冲。或者,可以在不同的区域使用两种不同的温度来研究热导率。
  • S71500CPU一般本身是不带高速脉冲计数的,所以要选用高速计数模块,一般最常用的模块为TMcount2X24 ,其提供两路24V高速脉冲采集信号。两路高速脉冲采集通道,在一般项目应用中有点少在工业领域数据采集和处理中,...

            S71500CPU一般本身是不带高速脉冲计数的,所以要选用高速计数模块,一般最常用的模块为TMcount2X24 ,其提供两路24V高速脉冲采集信号。两路高速脉冲采集通道,在一般项目应用中有点少在工业领域数据采集和处理中,经常会遇到如流量、转速、扭矩等高速脉冲信号形式的传感器。这种类型的传感器精确度高,抗干扰能力强,得到技术人员的青睐。

            举例说明西门子S7-1500高速脉冲采集功能和应用,包括数据的处理。

                                                         

                                                              

                                                                                     图1.DC24V脉冲信号的转速扭矩传感器

     

    1. 高速计数模块TM count2X24属性

                                                                    

    1>.支持的编码器类型

    ●24V增量编码器;

    ●具有方向信号的24V脉冲编码器

    ●布局有方向信号的24V脉冲编码器

    ●用于向上和向下计数脉冲的24V脉冲编码器

    2>.支持的技术功能

    ●高速计数

    ●测量评率

    ●作为运动控制的位置反馈

    3>.接线(图)端子

    2. 高速计数模块的组态和应用

    下面举例子,来说明西门子S71500系列PLC高速脉冲采集的用法。

    如图所示的扭矩转速传感器,转速码盘数为60,扭矩-50N.m-50 N.m对应5K-15K脉冲。

    2.1硬件配置及组态

    插入一个CPU模块,本例中用CPU1515,并插入TM count2X24模块,订货号:6ES7550-1AA00-0AB0

    2.2 配置通道属性

    双击模块2,下面出现高速计数模块的属性。

    选择工作模式: 通过工艺对象组态通道。当然也可以选用手动操作,手动操作和1200中的配置方法一样,就是配置为测量,配置为频率,配置更新时间,这些都可以在工艺里面完成,大同小异。

    此处我们选择通过工艺对象组态通道。选择了通过工艺对象组态通道,下面的手动选项就会变灰,只能在工艺对象里面进行配置。

    2.3新增工艺对象

    在项目树底下的CPPU下面,找到工艺对象,新增对象。如图所示的方法,增加两个对象,一个命名为转速频率测量,一个命名为扭矩频率测量。完成这一步后,就可以在项目数下面看到新增的两个工艺对象。

    2.4组态工艺对象

    点击组态,配置相关参数。在参数选项卡,可以看到组态的相关参数及配置,还可以看到状态:公司图标表示参数里包含错误或不可用的参数;绿色图标表示参数配置里面包含修改过的参数;蓝色图标表示系统默认的配置参数,没经过修改。

    下面完成上图中的参数配置

    1>.基本参数

    模块:选择我们插入的模块:TM COUNT 2×24

    通道:模块有两个通道,转速分配第1通道,扭矩分配第2通道。

    2>.配置计数器

    选择技术器信号类型,这里选择脉冲A相。选择滤波器频率。

    信号类型大概有以下几种:

    3>.测量值

    测量变量:频率

    更新时间:100ms,0-25000ms可选。

    通常,如高速脉冲型式的传感器,如流量传感器,转速扭矩传感器等,测量其相应的流量,转速、扭矩等,最终都是先得到其频率值,再对频率直接进行数据处理,即可得到相应的流量、转速、扭矩等物理量。S71200系列CPU直接可以通过硬件组态,将计数通道设置为频率测量。S71200系列CPU高速脉冲采集频率测量功能,有3种不同的评率测量周期:1.0秒,0.1秒和0.01秒,不同工况需求下,可以选择不同的测量周期。在1500PLC里面可以0-2500ms选择,根据不同的工况进行配置即可。

    2.5调试工艺对象

    计数工艺对象提供了一个可以调试的控制面板,在这个调试界面下可以进行技术器的基本操作和错误诊断。 需要注意的是,使用调试界面前,需要在主程序中调用高速计数功能块才能正常使用。

    1>.插入指令模块

    在Main中,从指令表里面找到工艺类->计数和测量,找到High_Speed_Counter功能并拖拽到程序段中,并在背景数据块中选择之前建立的计数器工艺对象。

    将项目存盘编译并下载后,就可以到项目树下面找到调试功能进行调试。

    2>.工艺对象的调试

    进入调试界面后,首先点击左上角的在线标志,使得PLC处于工作状态,在线模式下,使得软件门“SWGate”为真,观察反馈的门状态“StatusHW”是否为真,如果为真说明计数器已经开始工作,这时候如果外部有脉冲信号的话,计数器将进行计数并将计数值反馈到“CountValue”。

    2.6编程

    如果调试界面没问题,就可以回到Main程序块中进行编程,程序块的使用方法与调试界面完全一致。

    有几个参数值得注意:

    软件门:可以控制计数器什么时候开始计数。

    countValue:计数值,这里区别与测量值。

    MeasuredValue:测量值,此处就显示测得的频率值。

    2.7数据处理

    转速的处理:评率为f,表示一秒钟采集f个脉冲,则一分钟采集60f个脉冲。码盘数为60,表示转一转,转速传感器发出60个脉冲。则,一分钟60f个脉冲表示转了60f/60转,转速为f转/分。

    及:转速的处理公式为:转速=60f/码盘数 (转/分)

    扭矩的处理:扭矩处理比较简单,5K—15K线性对应-50N.m—50N.m。对评率值进行线性变换即可。

    注意:无论是高速计数还是频率测量,读取到的ID1000值都是整数,要换算为相应的物理量,首先要进行数据转换,把双整数换算为浮点数,再进行数据转换。

    https://www.sohu.com/a/391900862_700558

     

    展开全文
  • HC-SR04模块初始化

    2020-03-19 10:03:17
    在进行初始化的时候我们首先要了解超声波模块的工作原理 VCC 供 5V电源,GND 为地线,TRIG 触 发 控 制 信 号 输入,ECHO 回响信号输出等四个接口端 最后看时序图,也就是模块初始化的重点 从时序图结合他的工作...

    在进行初始化的时候我们首先要了解超声波模块的工作原理

    VCC 供 5V电源,GND 为地线,TRIG 触 发 控 制 信 号 输入,ECHO 回响信号输出等四个接口端
    在这里插入图片描述
    最后看时序图,也就是模块初始化的重点
    在这里插入图片描述
    从时序图结合他的工作原理我们可以得到以下结论:
    1.首先需要有一个不少于10uS的触发信号(建议20uS)
    2.然后等待模块内部发出信号(ECHO变为高电平的时候),这时候就会发出8个脉冲信号,此时的ECHO为低电平(最好加上超时处理)。
    3.等到回响信号变为高电平的时候,计算时间即可,加上超时处理

    以下是博主在stm32f4开发板上的代码

    #include "stm32f4xx.h"
    #include "sys.h"
    
    
    void sr04_init(void)
    {
    	GPIO_InitTypeDef GPIO_InitStruct;
    	//打开端口B的硬件时钟  PB6 PE6
    	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
    	//打开端口E的硬件时钟
    	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
    	//端口B的6号配置为输出模式 TRIG  (根据自己喜欢的引脚配置 不固定)
    	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;//输出模式
    	GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//推挽输出
    	GPIO_InitStruct.GPIO_Speed = GPIO_Fast_Speed;//50MHz
    	GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;//无上下拉
    	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;//PB6
    	GPIO_Init(GPIOB,&GPIO_InitStruct);
    	
    	//端口E的6号配置为输入模式 ECHO
    	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN ;//输入模式
    	GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//推挽输出
    	GPIO_InitStruct.GPIO_Speed = GPIO_Fast_Speed;//50MHz
    	GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;//无上下拉
    	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;//PE6
    	GPIO_Init(GPIOE,&GPIO_InitStruct);
    	//默认不给触发
    	PBout(6)=0;
    	
    }
    void delay_init(void)
    {
    	//配置参考时钟位HCLK/8 = 21MHz
    	//SysTick->CTRL &= ~(SysTick_CTRL_CLKSOURCE_Msk);	
    	SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
    }
    //毫秒延时
    //21MHz ----- 21000000 = 1s   1ms = 21000  
    //2^24 / 21000000s = 798ms
    //ms < 798
    void delay_ms(u32 ms)
    {
    	//设置计数初始值
    	SysTick->LOAD = 21000*ms-1;
    	//将当前计数值清0
    	SysTick->VAL = 0;
    	
    	//启动systick(将ctrl寄存器的最低位置1)
    	SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
    	//等待计数值为0(查看ctrl寄存器的16位是否为1)
    	while(!(SysTick->CTRL&SysTick_CTRL_COUNTFLAG_Msk));
    	
    	//关闭systick(将ctrl寄存器的最低位清0)
    	SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
    	
    	//将当前计数值清0
    	SysTick->VAL = 0;
    }
    
    void delay_us(u32 us)
    {
    	//设置计数初始值
    	SysTick->LOAD = 21*us-1;  //
    	//将当前计数值清0
    	SysTick->VAL = 0;
    	
    	//启动systick(将ctrl寄存器的最低位置1)
    	SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
    	//等待计数值为0(查看ctrl寄存器的16位是否为1)
    	while(!(SysTick->CTRL&SysTick_CTRL_COUNTFLAG_Msk));
    	
    	//关闭systick(将ctrl寄存器的最低位清0)
    	SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
    	
    	//将当前计数值清0
    	SysTick->VAL = 0;
    }
    int32_t sr04_get_distance(void)  //配置的时候是什么引脚 对应的就是什么引脚
    {	
    	int32_t t=0;
    	delay_init();
    
    	//先给触发信号
    	PBout(6)=1;
    	//至少要给10us
    	delay_us(20);
    	PBout(6)=0;
    	//等待回响信号变为高电平
    	while(PEin(6)==0)
    	{
    		t++;
    		delay_us(1);
    		//超时判断
    		if(t>1000000)
    		{
    			return -1;
    		}
    	}
    	t = 0;
    	while(PEin(6))
    	{
    		//计算高电平持续时间
    		//3000000/340000 = 8.8us  延时9us相当于3mm的传输距离
    		delay_us(9);
    		t++;
    		//超时判断
    		if(t>1000000)
    		{
    			return -2;
    		}
    	}
    	//返回当前的传输距离
    	return 3*(t/2);
    }
    

    转载声明原出处:https://blog.csdn.net/xl575864781/article/details/104960041

    展开全文
  • 内存的初始化

    千次阅读 2017-03-29 10:23:13
    内存的初始化

    内存的分类

    内存由于具备访问速度快,访问方式简单等优点,成为了PC或者是嵌入式硬件平台上不可或缺的元件。在开始学习如何使用内存之前,非常有必要先了解一下内存的分类:

    这里写图片描述

    DRAM:它的基本原件是小电容,电容可以在两个极板上保留电荷,但是需要定期的充电(刷新),否则数据会丢失。缺点:由于要定期刷新存储介质,存取速度较慢。

    SRAM:它是一种具有静止存取功能的内存,不需要定期刷新电路就能保存它内部存储的数据。其优点:存取速度快; 但是缺点是:功耗大,成本高。常用作存储容量不高,但存取速度快的场合,比如stepping stone。

    在嵌入式硬件体系中,除了CPU内部的“垫脚石”采用SRAM外,板载内存一般会采用DRAM,而DRAM又可以分为SDRAM,DDR,DDR2等。

    SDRAM(Synchronous Dynamic Random AccessMemory):同步动态随机存储器
    同步: 内存工作需要有同步时钟,内部的命令的发送与数据的传输都以该时钟为基准。
    动态:存储阵列需要不断的刷新来保证数据不丢失。
    随机:是指数据不是线性依次存储,而是自由指定地址进行数据读写。

    DDR (Double Data Rate SDRAM),即“双倍速率同步动态随机存储器”。与早期的SDRAM相比,DDR 除了可以在时钟脉冲的上升沿传输数据,还可以在下降沿传输信号,这意味着在相同的工作频率下,DDR 的理论传输速率为SDRAM的两倍。DDR2 则在DDR 的基础上再次进行了改进,使得数据传输速率在DDR 的基础上再次翻倍。

    内存的内部结构

    表结构:
    内存的内部如同表格,数据就存放在每个单元格中。数
    据读写时,先指定行号(行地址),再指定列号(列地
    址) ,我们就可以准确地找到所需要的单元格。而这张表格的称为:Logical Bank(L-Bank)。

    这里写图片描述

    由于技术、成本等原因,一块内存不可能把所有的单元格都做到一个L-Bank,现在内存内部基本都会分割成4个L-Bank。

    这里写图片描述

    需要向芯片提供以下3个信息来做到寻址:
    1、L-Bank选择信号
    2、行地址
    3、列地址

    OK6410开发板上的内存资源:
    128M字节Mobile DDR内存。
    2片KSX51163PC芯片:
    每一片为:32M*16,总共128M

    上面的16有两重含义:1、每个内存单元的大小为16位; 2、内存芯片的数据宽度为16位。ARM芯片的数据线为32位,剩下的16位连入另一个内存芯片。

    这里写图片描述
    4 * 2^13 * 2^10 = 32M

    2440内存初始化

    2440开发板配置的是SDRAM内存。

    S3c2440芯片对外提供的引脚上,只给出了27根地址线Addr[0:26]。单靠芯片上的 27 根引脚,它只能访问128M 的外设空间。

    为了扩大外设的访问范围,S3c2440芯片又提供了8个片选信号nGCS0~nGCS7。当某个片选信号nGCSx有效时,则可以通过27根地址线去访问对应这个片选的128MB空间。由于有8个片选,所以2440芯片能访问的外设空间总共为8*128MB=1GB。而1G (0x40000000)以上的空间,则安排给了2440内部的寄存器,访问这些内部的寄存器,则是通过32位的处理器内部总线来完成的。

    这里写图片描述

    一般把内存放置在片选6和片选7的位置,因此编写程序时,内存的起始地址为0x30000000。

    这里写图片描述

    对于某一个地址,首先有存储控制器进行分解,然后对相应的存储设备进行操作。因此,对内存的初始化,其实就是对存储控制器的初始化。

    初始化存储寄存器:(mini2440开发板)

    #define mem_contrl 0x48000000
    init_sdram:
        ldr r0, =mem_contrl 
        add r3, r0, #4*13 @最后一个地址
        adrl r1, mem_data
    
    0:
        ldr r2, [r1], #4 @加载并且更新地址
        str r2, [r0], #4 @存储并且更新地址
        cmp r0, r3
        bne 0b           @不等于就跳到分支
        mov pc, lr
    
    mem_data:
        .long 0x22000000 
        .long 0x00000700
        .long 0x00000700
        .long 0x00000700
        .long 0x00000700
        .long 0x00000700
        .long 0x00000700
        .long 0x00018001
        .long 0x00018001
        .long 0x008c04f5
        .long 0x000000b1
        .long 0x00000030
        .long 0x00000030

    6410内存初始化

    6410开发板配置的是DDR内存。

    S3C6410处理器拥32位地址总线,其寻址空间为4GB。其中高2GB为保留区,低2GB区域又可划分为两部分:主存储区和外设区。

    这里写图片描述

    保留区没有使用。外设区放置6410芯片中的寄存器,访问这些内部寄存器就通过这些地址。主存储区

    主存储区的划分:

    这里写图片描述

    boot启动镜像区:
    这个区域的作用正如它的名字所述,是用来启动ARM系统的。但是这个区域并没有固定的存储 介质与之对应。而是通过修改启动选项,把不同的启动介质映射到该区域。比如说选择了IROM 启动方式后,就把IROM映射到该区域。

    内部存储区:
    这个区域对应着内部的内存地址,iROM和SRAM都是分布在这个区间。0x08000000~0x0bffffff对应着内部ROM,但是IROM实际只有32KB,选择从IROM启动的时候,首先运行就是这里面的程序BL0,BL0这部分代码由三星固化。0x0c000000~0x0fffffff对应内部SRAM,实际就是8KB的Steppingstone。

    静态存储区:
    这个区域用于访问挂在外部总线上的设备,比如说NOR flash、oneNand等。这个区域被分割为6个bank,每个bank为128MB,数据宽度最大支持16bit,每个bank由片选Xm0CS[0]~Xm0CS[5] 选中。

    动态存储区:
    该区域从0x50000000~0x6fffffff,又分为2个区间,分别占256MB,可以片选Xm1CS[0]~Xm1CS[1]来进行着2个区间的选择。我们6410开发板上256MB的DDR内存就安排在这个区域,这也就是为什么6410的内存地址是从0x50000000开始的原因。

    内存芯片的连接方式:
    这里写图片描述

    6410芯片手册中的存储控制器
    芯片手册第5章,DRAM CONTROLLER

    5.4节介绍了内存控制器初始化的流程。

    uboot代码中的cpu\s3c64xx\s3c6410文件下的cpu_init.S文件下的标号mem _ ctrl _ asm _ init下的代码就是对存储控制器进行初始化的代码。

    代码举例:(OK6410开发板)

    .text
    .global mem_init
    mem_init:
    
        ldr r0, =0x7e00f120 @设置数据线
        mov r1, #0x8
        str r1, [r0]
    
        ldr r0, =0x7e001004  @make DRAM Controller enter ‘Config’ state
        mov r1, #0x4         
        str r1, [r0]
    
        ldr r0, =0x7e001010  @鍒锋柊瀵勫瓨鍣ㄥ湴鍧€
        ldr r1, =( ( 7800 / ( 1000000000/133000000 ) + 1 ) )      @璁剧疆鍒锋柊鏃堕棿
        str r1, [r0]
    
        ldr r0, =0x7e001014  @CAS latency瀵勫瓨鍣?
        mov r1, #(3 << 1)
        str r1, [r0]
    
        ldr r0, =0x7e001018  @t_DQSS瀵勫瓨鍣?
        mov r1, #0x1
        str r1, [r0]
    
        ldr r0, =0x7e00101c  @T_MRD瀵勫瓨鍣?
        mov r1, #0x2
        str r1, [r0]
    
        ldr r0, =0x7e001020   @t_RAS瀵勫瓨鍣?
        ldr r1, =( ( 45 / ( 1000000000 / 133000000 ) + 1 ) )
        str r1, [r0]
    
        ldr r0, =0x7e001024   @t_RC瀵勫瓨鍣?
        ldr r1, =( ( 68 / ( 1000000000 / 133000000 ) + 1 ) )
        str r1, [r0]
    
        ldr r0, =0x7e001028   @t_RCD瀵勫瓨鍣?
        ldr r1, =( ( 23 / ( 1000000000 / 133000000 ) + 1 ) )
        str r1, [r0]
    
        ldr r0, =0x7e00102c   @t_RFC瀵勫瓨鍣?
        ldr r1, =( ( 80 / ( 1000000000 / 133000000 ) + 1 ) )
        str r1, [r0]
    
        ldr r0, =0x7e001030   @t_RP瀵勫瓨鍣?
        ldr r1, =( ( 23 / ( 1000000000 / 133000000 ) + 1 ) )
        str r1, [r0]
    
        ldr r0, =0x7e001034   @t_rrd瀵勫瓨鍣?
        ldr r1, =( ( 15 / ( 1000000000 / 133000000 ) + 1 ) )
        str r1, [r0]
    
        ldr r0, =0x7e001038   @t_wr瀵勫瓨鍣?
        ldr r1, =( ( 15 / ( 1000000000 / 133000000 ) + 1 ) )
     @  ldr r2, [r0]
        str r1, [r0]
    
        ldr r0, =0x7e00103c   @t_wtr瀵勫瓨鍣?
        mov r1, #0x07
        str r1, [r0]
    
        ldr r0, =0x7e001040   @t_xp瀵勫瓨鍣?
        mov r1, #0x02
        str r1, [r0]
    
        ldr r0, =0x7e001044   @t_xsr瀵勫瓨鍣?
        ldr r1, =( ( 120 / ( 1000000000 / 133000000 ) + 1 ) )
        str r1, [r0]
    
        ldr r0, =0x7e001048   @t_esr瀵勫瓨鍣?
        ldr r1, =( ( 120 / ( 1000000000 / 133000000 ) + 1 ) )
        str r1, [r0]
    
        ldr r0, =0x7e00100c   @鍐呭瓨鎺у埗閰嶇疆瀵勫瓨鍣?
        ldr r1, =0x00010012   @閰嶇疆鎺у埗鍣?
        str r1, [r0]
    
        ldr r0, =0x7e00104c   @32浣岲RAM閰嶇疆鎺у埗瀵勫瓨鍣?
        ldr r1, =0x0b45
        str r1, [r0]
    
        ldr r0, =0x7e001200   @鐗囬€夊瘎瀛樺櫒
        ldr r1, =0x150f8
        str r1, [r0]
    
        ldr r0, =0x7e001304   @鐢ㄦ埛閰嶇疆瀵勫瓨鍣?
        mov r1, #0x0
        str r1, [r0]
    
        ldr r0, =0x7e001008   @从这一步开始,初始化内存,设置mem_cmd为nop
        ldr r1, =0x000c0000
        str r1, [r0]
    
        ldr r1, =0x00000000   @‘Prechargeall’ 
        str r1, [r0]
    
        ldr r1, =0x00040000   @‘Autorefresh’2次
        str r1, [r0]
        str r1, [r0]
    
        ldr r1, =0x000a0000   @MRS
        str r1, [r0]
    
        ldr r1, =0x00080032   @Mode Reg
        str r1, [r0]
    
        ldr r0, =0x7e001004   @memc_cmd‘3’b000’
        mov r1, #0x0          @DRAM Controller enter ‘Ready’ state
        str r1, [r0]
    
    check_dmc1_ready:         @检查内存状态 ‘2’b01’, which means'Ready’
        ldr r0, =0x7e001000 
        ldr r1, [r0]
        mov r2, #0x3
        and r1, r1, r2
        cmp r1, #0x1
        bne check_dmc1_ready
        nop
        mov pc, lr

    210内存初始化

    210开发板配置的是DDR2内存。
    这里写图片描述

    内存起始地址为0x20000000

    210开发板的内存通常采用8片或者4片128M*8bit芯片级联的办法。

    代码举例(OK210开发板)

    #define DMC_PHYCONTROL0 0xf0000018
    #define DMC_PHYCONTROL1 0xf000001c
    #define DMC_CONCONTROL  0xf0000000
    #define DMC_MEMCONTROL  0xf0000004
    #define DMC_MEMCONFIG0  0xf0000008
    #define DMC_MEMCONFIG1  0xf000000c
    #define DMC_PRECHCONFIG 0xf0000014
    #define DMC_TIMINGAREF  0xf0000030
    #define DMC_TIMINGROW   0xf0000034
    #define DMC_TIMINGDATA  0xf0000038
    #define DMC_TIMINGPOWER 0xf000003c
    #define DMC_PHYSTATUS   0xf0000040
    #define DMC_DIRECTCMD   0xf0000010
    #define DMC_PWRDNCONFIG 0xf0000028
    
    #define DMC0_MEMCONTROL         0x00202400
    #define DMC0_MEMCONFIG_0        0x20F00313  
    #define DMC0_MEMCONFIG_1        0x00F00313  
    
    #define DMC0_TIMINGA_REF        0x00000618
    #define DMC0_TIMING_ROW         0x2B34438A
    #define DMC0_TIMING_DATA        0x24240000
    #define DMC0_TIMING_PWR         0x0BDC0343      
    
    .globl mem_init
    mem_init:
        @ step 2.1
        ldr r0, =DMC_PHYCONTROL0
        ldr r1, =0x00101000             
        str r1, [r0]
    
        @ step 2.2
        ldr r0, =DMC_PHYCONTROL0
        ldr r1, =0x00101002                 
        str r1, [r0]
    
        @ step 4
        ldr r0, =DMC_PHYCONTROL0
        ldr r1, =0x00101003                 
        str r1, [r0]
    
        @ step 5
        ldr r0, =DMC_CONCONTROL             
        ldr r1, =0x0FFF1350
        str r1, [r0]
    
        @ step 6
        ldr r0, =DMC_MEMCONTROL
        ldr r1, =DMC0_MEMCONTROL                
        str r1, [r0]
    
        @ step 7
        ldr r0, =DMC_MEMCONFIG0
        ldr r1, =DMC0_MEMCONFIG_0               
        str r1, [r0]
    
        @ step 8
        ldr r0, =DMC_PRECHCONFIG
        ldr r1, =0xFF000000                 
        str r1, [r0]
    
        @ step 9.1
        ldr r0, =DMC_TIMINGAREF
        ldr r1, =DMC0_TIMINGA_REF               
        str r1, [r0]
    
        @ step 9.2
        ldr r0, =DMC_TIMINGROW
        ldr r1, =DMC0_TIMING_ROW                
        str r1, [r0]
    
        @ step 9.3
        ldr r0, =DMC_TIMINGDATA
        ldr r1, =DMC0_TIMING_DATA               
        str r1, [r0]
    
        @ step 9.4
        ldr r0, =DMC_TIMINGPOWER
        ldr r1, =DMC0_TIMING_PWR                
        str r1, [r0]
    
        @ step 11
    wait_lock:
        ldr r0, =DMC_PHYSTATUS 
        ldr r1, [r0]            
        and r2, r1, #0x4
        cmp r2, #0x4                    
        bne wait_lock
    
        @ step 14
        ldr r0, =DMC_DIRECTCMD
        ldr r1, =0x07000000                 
        str r1, [r0]
    
        @ step 16
        ldr r1, =0x01000000                 
        str r1, [r0]
    
        @ step 17
        ldr r1, =0x00020000                 
        str r1, [r0]
    
        @ step 18
        ldr r1, =0x00030000                 
        str r1, [r0]
    
        @ step 19
        ldr r1, =0x00010400                 
        str r1, [r0]
    
        @ step 20
        ldr r1, =0x00000542                 
        str r1, [r0]
    
        @ step 21
        ldr r1, =0x01000000                 
        str r1, [r0]
    
        @ step 22.1 
        ldr r1, =0x05000000                 
        str r1, [r0]
    
        @ step 22.2
        ldr r1, =0x05000000                 
        str r1, [r0]
    
        @ step 23
        ldr r1, =0x00000442                 
        str r1, [r0]
    
        @ step 25.1
        ldr r1, =0x00010780                 
        str r1, [r0]
    
        @ step 25.2
        ldr r1, =0x00010400                 
        str r1, [r0]
    
        @ step 26, repeat step14~step25
        ldr r1, =0x07100000                 
        str r1, [r0]
    
        ldr r1, =0x01100000                 
        str r1, [r0]
    
        ldr r1, =0x00120000                 
        str r1, [r0]
    
        ldr r1, =0x00130000                 
        str r1, [r0]
    
        ldr r1, =0x00110400                 
        str r1, [r0]
    
        ldr r1, =0x00100542                 
        str r1, [r0]
    
        ldr r1, =0x01100000                 
        str r1, [r0]
    
        ldr r1, =0x05100000                 
        str r1, [r0]
    
        ldr r1, =0x05100000                 
        str r1, [r0]
    
        ldr r1, =0x00100442                 
        str r1, [r0]
    
        ldr r1, =0x00110780                 
        str r1, [r0]
    
        ldr r1, =0x00110400                 
        str r1, [r0]
    
        @ step 27
        ldr     r0, =DMC_CONCONTROL
        ldr r1, =0x0FF02030                 
        str r1, [r0]
    
        ldr     r0, =DMC_PWRDNCONFIG
        ldr r1, =0xFFFF00FF                 
        str r1, [r0]
    
        ldr     r0, =DMC_CONCONTROL
        ldr r1, =0x00202400                 
        str r1, [r0]
    
        mov pc, lr
    展开全文
  • 基于忽略相干耦合项的无色散耦合模方程...结果表明,高斯脉冲的时间波形窄较严重,初始啁啾对时间波形及能量透射率无影响,但对输出光谱影响较大;方波脉冲的时间波形和光谱形状的变化很小,且能量透射率有很大提高。
  • SD卡初始化步骤详解

    千次阅读 2016-12-15 14:55:29
    初始化时,一定要是低速模式并且有超过74个时钟脉冲! 注:在测试的过程中,也是遇到了些比较蛋疼的问题,我手里有3张卡,2张8ghc,1张2gsc。这两张8g卡在读ocr时,其最高字节一直返回0x80,也就是说从ocr...

    硬件平台:飞思卡尔s12xep100

    开发环境:codewarrior 5.2

    结果:批量存储稳定


    最近在做文件系统的升级,先前用的是21ic论坛上面down的znfat,相信做单片机软件的兄弟们应该都知道。

    后来用的过程中发现此文件系统超时机制做的不是很好,而且不精简,会占用比较大的ram和flash,产品用了几个月后,决定升级一下文件系统,后来就发现了fatfs。


    这里先从sd卡的初始化说起吧,只说初始化流程以及一些细节问题(spi模式)。

    1、第一步,在将spi模块初始化好之后,将spi速度设为低速模式,我这里用的是250k

    2、保持select脚为高电平,并向SD卡发送不低于74个时钟脉冲,此时sd卡将进入它的native operation mode(翻译为本地操作模式了),并做好接收本地指令的准备。

    3、此时将select脚拉低并向SD卡发送cmd0指令,SD卡在检测到select脚为低并收到cmd0指令后将进入spi模式,并返回0x01空闲状态。

    4、成功进入空闲状态后,继续发送cmd8指令,携带的参数为0x000001AA,如果SD卡不能识别并返回错误码5,说明此卡非2.0卡(进入步骤6)。如果指令能被识别,则SD卡将返回R1+32位共40位数据,其中R1位0x01,32位数据为0x000001AA。此时可判断卡为2.0卡。

    5、判断为2.0卡后,紧接着发送cmd55+acmd41指令(应该是在cmd55返回1的情况下再接着发送acmd41),如果返回0,则初始化成功。此时如果你想继续判断是标准2.0卡SCSD还是大容量HCSD,则需要继续发送cmd58指令,并在cmd58指令被成功响应后连续从SD卡读取4个字节的ocr数据,若其第31位为1,表示初始化成功,其第30位为1表示是HCSD,为0表示SCSD。 此时2.0卡初始化结束。

    6、步骤4对cmd8无响应,则继续判断卡为1.0或mmc卡。此时同步骤5一样向卡发送cmd55+acmd41指令,如果返回0,则表示1.0卡初始化成功,如果返回错误,则确定卡为mmc卡。 在确定卡为mmc卡后,继续向卡发送cmd1指令,如果返回0,则mmc卡初始化成功,否则失败,判断为错卡!!

    7、初始化成功后,将spi切换为高速模式,我这里用的是4m。


    至此,SD卡初始化过程就结束了,记得几点:在发送cmd函数后,记得补偿时钟;在读寄存器位时,需要select拉低;初始化时,一定要是低速模式并且有超过74个时钟脉冲!


    注:在测试的过程中,也是遇到了些比较蛋疼的问题,我手里有3张卡,2张8ghc,1张2gsc。这两张8g卡在读ocr时,其最高字节一直返回0x80,也就是说从ocr上面判断不出是HC大容量卡,那张2g卡返回也是0x80是正常的。  于是找啊找查啊查,究竟是哪里出问题了。最后实在是差不出来,重新买了个新的HC,还好,果然成功了,ocr最高字节终于为0xc0。 所以说就是提醒大家在测试过程中,多找些,多对比现象。



    展开全文
  • SD卡初始化步骤总结

    千次阅读 2016-12-15 15:56:46
    初始化时,一定要是低速模式并且有超过74个时钟脉冲! 注:在测试的过程中,也是遇到了些比较蛋疼的问题,我手里有3张卡,2张8ghc,1张2gsc。这两张8g卡在读ocr时,其最高字节一直返回0x80,也就是说从ocr...
  • 8.时钟初始化

    2019-09-21 12:18:51
    8.时钟初始化 ARM系统时钟初始化: 这就需要知道什么是时钟脉冲信号,什么是时钟频率,什么是时钟源。 时钟脉冲信号: 时钟脉冲信号:按一定的电压幅度,一定的时间间隔连续发出的脉冲信号。时钟脉冲...
  • FPGA笔记(十)-正确初始化的重要性

    千次阅读 2016-07-14 21:40:02
    寄存器正确初始化——>reg [5:0] addresss=5'd1;//定义寄存器时就赋初值,initial块(用于Testbench)在.v文件是不可综合的 一个仿真的经验——>如果是posedge CLK触发的话,testbench里初始化CLK=1'b0;(这样看得更...
  • 因为程序要应用IAP功能升级,在bootloader程序中和app应用程序中都可能使用到spi flash,于是测试了SPI重复初始化。发现会导致第一次读操作失败,后来试验发现初始化之前DISABLE spi口,就没有这个问题了,具体原因...
  • 8259A的初始化命令字 (1)ICW1的格式和含义 ICW1叫芯片控制初始化命令字,需要写到偶地址端口 D7~D5:可为1也可为0 D4:此位作为ICW1标识位以区分于操作命令字OCW2和OCW3,因为OCW2和OCW3也要求写入偶地址端口,...
  • 文章目录1.LCD与OLED的区别2.LCD原理2.1 颜色如何确定?2.2 LCD如何“行扫描”?2.3 如何跳到下一行进行“行扫描”?2.4 如何进行下一个“场扫描”?...初始化LCD引脚8.LCD控制器初始化8.1 LCDCON18.2...
  • 解决STM32定时器初始化后直接进入中断问题 STM32初始化完毕后第一次启动定时器直接进入中断,原因是定时器的寄存器中断标识没有被清理掉。 如果使用标准库,先用TIM_ClearITPendingBit(TIM1, TIM_IT_Update)清除...
  • 时钟初始化

    千次阅读 2015-08-26 10:04:33
    介绍了时钟相关的概念以及如何初始化时钟
  • 最近在使用 dht11 温湿度传感器的时候遇到了一个问题,就是 dht11 这个...我们知道,基于单总线上的所有传输过程都是以初始化开始的 初始化过程由主机发出的复位脉冲和从机响应的应答脉冲组成 但是通过逻辑分析...
  • PLC:学习笔记(西门子)2

    千次阅读 2019-09-28 12:25:46
    1、plc可靠性高(软件代替复杂线路、抗干扰的CPU、电源采用多级滤波并用集成稳压块稳压、IO采用光电隔离技术)2、丰富IO口(交流、直流、开关量、模拟量、电压、电流、脉冲、电位、强电、弱电都有相应的IO模块和工业...
  • 根据官方历程移植代码,中途遇到很多问题,血氧的测量,相比心率血氧测量难度较大而且精度不算太高,寄存器中文描述可参考此链接 程序设计流程如下 先初始化IIC,再初始化血氧模块SPO2_Init() 检查样本,采样获取红外...
  • 经典蝙蝠算法MATLAB实现

    万次阅读 多人点赞 2019-02-24 21:19:42
    为什么会有这么多基于群智能的算法,蚁群、粒子群、鱼群、烟花、炮竹、猪...该算法是一种基于迭代的优化技术,初始化为一组随机解,然后 通过迭代搜寻最优解,且在最优解周围通过随机飞行产生局部新解,加强了局部搜索。...
  • 利用一个简单的外部电路可以解决这个问题,它将初始短路尖峰电流降至最小,并在200ns到500ns以内消除短路故障(断开电源和短路负载)。 一个典型的+12V、6A的热插拔控制电路(图1)包括门限分别为50mV和200mV的慢速...
  • 为了解决增益窄问题,缩短脉冲宽度,提高峰值功率,达到更好的“冷”加工效果,本文提出一种基于空间光调制器的光谱整形系统,通过加载到空间光调制器上的灰度图,来产生中心凹陷、平顶等特殊光谱形状,使其放大后...
  • 2、初始化编程 3、应用程序设计 例题1 在以 8086构成的最大方式系统中,有一片8254的端口地址分别为301H、303H、305H和307H,给定的外部时钟为512kHz。 要求:、 (1)利用计数器0产生周期为1ms的周期信号,请编写初始化...
  • STM32 串口初始化时的BUG

    千次阅读 2016-06-06 13:19:24
    stm32串口初始化BUG
  • 串口初始化结构体和固件库讲解常用的6个函数,结构体:USART 初始化结构体(USART_InitTypeDef)USART 时钟初始化结构体(USART_ClockInitTypeDef)串口使能函数void USART_Cmd(USART_TypeDef* USARTx, FunctionalState ...
  • 蓝桥杯的单片机和别的单片机不同之处就是在于这个初始化程序的不一样,别的单片机一个IO口控制一个设备或者是有跳线帽能控制,但是蓝桥杯的不一样,它的P0口控制了led灯,数码管,蜂鸣器,等等,所以它的初始化程序...
  • STM32时钟初始化函数SystemInit()详解

    万次阅读 2019-05-20 19:42:04
    初始化时钟用到的RCC寄存器复位值: RCC_CR = 0x0000 xx83; RCC_CFGR = 0x0000 0000;RCC_CIR = 0x0000 0000; RCC_CFGR2 = 0x0000 0000; SystemInit() 在调用 SetSysClock()之前RCC寄存器的值如下(都是一些与...
  • RI的idle state位指示是否完成初始化过程,当R1的idle位为1时,SD卡处于初始化状态,为0完成初始化过程。 ACMD41命令也无需指定CRC。 经过实验发现,在发送ACMD41命令时必须将HCS位置1,如果不置1,初始化过程...
  • TFT LCD 是嵌入式中比较常用的显示器, S3C2440/S3C2410 ...函数尽量增强可扩展型,所以在初始化的过程中可以指定要显示图像的图像模式,同时对不同图像模式对数据的不同要求对帧内存的初始化也做了...
  • 定时/计数器的初始化 初始化程序应完成如下工作: 1). 对TMOD赋值, 以确定T0和T1的工作方式. 2). 计算初值, 并将其写入 TH0, TL0 或者 TH1, TL1. 3). 使用中断方式时, 则对IE赋值, 开放中断. 4). 使 TR0 或 TR1...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,775
精华内容 9,110
关键字:

初始化脉冲