精华内容
下载资源
问答
  • 每块拥有DMA功能的芯片基本可以通过特定通道来触发DMA。每个通道专门用来管理来自于一个或多个外设对存储器访问请求。(如stm32、2440等芯片)   2. 每个通道对应以下四种模式:              ...

    什么是DMA?

      DMA(Direct Memory Access)即直接存储访问,DMA传输方式无需CPU直接控制传输,通过硬件为RAM、I/O设备开辟一条直接传输数据的通路,能使CPU的效率大为提高。每一种体系结构DMA传输不同,编程接口也不同。



    DMA的触发方式

      1. 每块拥有DMA功能的芯片基本可以通过特定的通道来触发DMA。每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。(如stm32、2440等芯片)

      2. 每个通道对应四种传输模式:
                    内存 —> 内存、内存 —> 外设、外设 —> 内存、外设 —> 外设

      3. 数据传输有两种方式触发:一种软件请求(手动)数据,另一种由硬件异步(自动)传输。

    在第一种情况下,调用的步骤可以概括如下(以read为例):

    1. 在进程调用 read 时,驱动程序的方法分配一个 DMA 缓冲区,随后指示硬件传送它的数据。进程进入睡眠。
    2. 硬件将数据写入 DMA 缓冲区并在完成时产生一个中断。
    3. 中断处理程序获得输入数据,应答中断,最后唤醒进程,该进程现在可以读取数据了。

    第二种情形是在 DMA 被异步使用时发生的。以数据采集设备为例:

    1. 硬件发出中断来通知新的数据已经到达。
    2. 中断处理程序分配一个DMA缓冲区。
    3. 外围设备将数据写入缓冲区,然后在完成时发出另一个中断。
    4. 处理程序利用DMA分发新的数据,唤醒任何相关进程。

      网卡传输也是如此,网卡有一个循环缓冲区(通常叫做 DMA 环形缓冲区)建立在与处理器共享的内存中。每一个输入数据包被放置在环形缓冲区中下一个可用缓冲区,并且发出中断。然后驱动程序将网络数据包传给内核的其它部分处理,并在环形缓冲区中放置一个新的 DMA 缓冲区。驱动程序在初始化时分配DMA缓冲区,并使用它们直到停止运行。



    DMA控制器中的寄存器常用参数配置

      1. DMA控制寄存器 【DCON0】
      2. DMA源地址寄存器 【DISR0】
      3. DMA源控制寄存器 【DISRCC0】
      4. DMA目标地址寄存器 【DIDST0】
      5. DMA目标控制寄存器 【DIDSTC0】
      6. DMA状态寄存器 【DSTAT0】
      7. DMA触发屏蔽寄存器 【DMASKTRIG0】


      以上寄存器包含对DMA的方向、DMA地址、总线宽度、DMA突发长度等等的配置



    DMA与中断的区别

    1. 中断方式是在数据缓冲寄存器满之后发出中断,要求CPU进行中断处理,而DMA方式则是在所要求传送的数据块全部传送结束时要求CPU 进行中断处理。这就大大减少了CPU进行中断处理的次数。【中断次数增多导致数据丢失】
    2. 中断方式的数据传送是在中断处理时由CPU控制完成的,而DMA方式则是在DMA控制器的控制下,不经过CPU控制完成的。这就排除了 CPU因并行设备过多而来不及处理以及因速度不匹配而造成数据丢失等现象。


    参考文章:

    STM32 DMA配置和使用如此简单



    展开全文
  • 其中最令人头疼的就是成百上千的寄存器英文缩写。 在实际学习过程中会发现,很多寄存器会加上三个四个甚至更多的英文缩写字母作为后缀,而其很多时候百度并不一定能查询到全拼!这使得我们在学习过程中对于寄存器的...

    今日在暴啃芯片手册!其中最令人头疼的就是成百上千的寄存器英文缩写

    在实际学习过程中会发现,很多寄存器会加上三个四个甚至更多的英文缩写字母作为后缀,而其很多时候百度并不一定能查询到全拼!这使得我们在学习过程中对于寄存器的“真名”不得而知,也就一定程度上阻碍了对于寄存器真正用途的理解

    今日突然发现一些寄存器缩写命名规律,前来记录并与大家分享!





    1. 最常见的缩写方式

    如下表:

    英文 ( 缩写 ) 描述
    read/ write( rw ) 软件能读写此位
    read-only ( r ) 软件只能读此位
    write-only ( w ) 软件只能写此位,读将返回复位值
    read/clear ( rc_w1 ) 软件可以读此位,也可以通过写’1’清除此位,写’0’对此位无影响
    read / clear ( rc_w0 ) 软件可以读此位,也可以通过写’0’清除此位,写’1’对此位无影响
    read / clear by read ( rc_r ) 软件可以读此位;读此位将自动地清除它为’0’,写’0’对此位无影响
    read / set ( rs ) 软件可以读也可以设置此位,写’0’对此位无影响
    read-only write trigger ( rt_w ) 软件可以读此位;写’0’或’1’触发一个事件但对此位数值没有影响
    toggle ( t ) 软件只能通过写’1’来翻转此位,写’0’对此位无影响
    Reserved ( Res. ) 保留位,必须保持默认值不变

    以上内容可在STM32数据手册内查到




    2. 首字母直接缩写

    这种缩写方式适用于寄存器作用名称有多个单词描述的情况,例如:

    英文缩写 描述
    MMS 主模式选择 (Master Mode Selection)
    CCDS 捕获/比较的DMA选择 (Capture/Compare DMA Selection)
    CCUS 捕获/比较控制更新选择 (Capture/Compare Control Update Selection)
    CCPC CCPC:捕获/比较预装载控制位 (Capture/Compare Preloaded Control)



    联想到芯片手册产自国外,原版多是利用英语编写,而英语这样一种拼音文字,歪果仁对音律颇为敏感,因此我产生了一探究竟的想法,有以下发现:


    3. 辅音缩写方式

    我的音标可以说是从小学过整整三遍。。。一年级、三年级、初一,在此为大家拓展一些音标的基础知识:

    音标

    其中辅音又可分为:

    • 爆破音:[p],[b],[t],[d],[k],[g]

    • 摩擦音:[f],[s],[ʃ] ,[θ] ,[h],[v],[z],[ʒ],[ð],[r]

    • 破擦音:[tʃ],[tr],[ts],[dʒ],[dr],[dz]

    • 鼻音: [m],[n],[ŋ]

    • 舌侧音:[l]

    • 半元音:[w],[j]

    在寄存器的后缀缩写中常常出现提取英文单词辅音字母作为缩写的情况!!!

    分为以下三类:

    A. 辅音字母正好有三个

    例1: source - SRC

    source音标 [sɔːrs]

    摩擦音 [s] 和 [r]

    对应字母S和RC

    正好三个字母,直接提出缩写为SRC

    例2: config register - CFGR

    config音标 [kənˈfɪg]

    爆破音 [k],[g]

    摩擦音 [f]

    对应字母CFG

    正好三个字母,直接提出缩写为CFG

    加上寄存器Register的首字母,为CFGR


    例3: Packet count - PKTCNT

    packet音标 [ˈpækɪt]

    爆破音 [p],[k],[t]

    正好三个字母,直接提出为PKT

    count音标 [kaʊnt]

    爆破音 [k],[t]

    鼻音 [n]

    对应字母CNT,直接提出

    最终合成缩写PKTCNT




    B. 辅音字母小于三个

    这种情况下,一般会拖拽一个跟辅音字母紧邻的、共同影响音节的元音字母上来,凑成三个字母的缩写

    例1: ready - RDY

    ready音标 [ˈredi]

    辅音 [r],[d],取RD,不足三个字母

    dy构成第二个音节,取Y过来

    RDY构成三个字母的缩写


    例2: wide bus mode enable - WIDBUS

    wide音标 [waɪd]

    辅音[w],[d]

    取与辅音相邻的元音字母 i 构成三个音节WID

    构成缩写WIDBUS




    C. 辅音字母大于三个

    这种情况下通常会直接选单词的前三个字母来作为缩写

    例1: command argument - CMDARG

    argument 辅音较多,选取前三个字母ARG


    例2: multiplication - MUL

    multiplication 音标 [ˌmʌltɪplɪˈkeɪʃn]

    选取前三个字母MUL




    补充:英文缩写的一种特殊习惯-X

    例如TX和RX的X是什么意思?答案就是没有意思!

    It’s doesn’t stand for anything.


    The X is used to pad out acronyms to make them more acceptable.Los Angeles International Airport uses the code LAXIn theatre, anything lighting related gets called LX (e.g. PVC electrical tape gets called LX tape).Ethernet at Gigabit speeds, using single mode fibre uses the 1000Base-LX standard (the “L” stands for Long Reach)


    For some reason humans don’t seem to like single letter acronyms, so we pad them out to two letters.


    There are some X acronyms, where the X does mean something: FX (special eFeCTs), MX (Mailbox Exchange), RX (RallyCross), etc




    读一方著作,品一语文化,芯片手册亦不例外。

    未能大面积筛选示例,仅取个别分析,但相信一定存在这方面的原因在里面,如有异议或者意见,请及时与我交流!

    展开全文
  • 常用通用芯片是74HC595,具有8位锁存、串一并移位寄存器和三态输出功能。每路可输出35mA电流(不是恒流)。一般IC厂家都可生产此类芯片。 由于led是电流特性器件,即在饱和导通前提下,其亮度随着电流大小...
  • 上电后,控制器件或主控器把存储在外部存储器中数据送入FPGA器件内,配置完成之后将对器件I/O和寄存器进行初始化。初始化完成后,进入用户模式,开始正常工作。  一旦设计者选定了FPGA系统配置
  • 芯片手册中常见的Die id

    千次阅读 2018-10-09 15:43:36
    今天查看INA3221的芯片手册,偶然间发现有个寄存器名称是DIE ID。DIE ID是个什么东西?死了ID?立马就疑惑了,查询了一些资料,有了一些了解。      ~~~~~&

    什么是Die id?

         ~~~~~今天查看INA3221的芯片手册,偶然间发现有个寄存器名称是DIE ID。DIE ID是个什么东西?死了的ID?立马就疑惑了,查询了一些资料,有了一些了解。
    在这里插入图片描述

         ~~~~~DIE(裸片)ID(标识)是每个芯片的唯一的身份编号,通过DIE ID可以获得芯片的制造厂家,生产日期、产线、在晶圆上的X/Y(横向/纵向)坐标等信息。其中,不同的芯片制造厂家出产的芯片中的DIE ID中包含的信息并不相同,主要体现在,不同的芯片制造厂家出产的芯片中的DIE ID的数据长度不同,并且数据中的每个数据位的定义也不同。
         ~~~~~DIE ID存储在芯片的电可编程熔丝(eFuse,Electrically programmable Fuse)器件,简称熔丝器件中,具有非掉电易失性。所以,当芯片失效时,通过读取芯片的熔丝器件中的DIE ID,可以有效地追溯到芯片在制造厂家信息,生产日期、产线、在晶圆上的X/Y坐标等诸多信息,为芯片的失效原因分析提供有效的线索。
         ~~~~~现有技术中,读取DIE ID的方法为:在CPU(中央处理单元,CentralProcessing Unit)、MCU(微控制单元,Microcontroller Unit)、DSP(数字信号处理器,Digital Signal Processor)或用于执行控制或运算的逻辑电路等处理器的协助下,将DIE ID从熔丝器件读取到逻辑寄存器中,然后再将逻辑寄存器中的DIE ID通过打印或者显示在屏幕上的方式呈现给测试人员。其中所述逻辑电路包括多个逻辑门或晶体管。但是在这种方式下,如果CPU、MCU、DSP或逻辑电路等处理器无法正常工作时,则即使熔丝器件中DIE ID的信息是完整无缺的,也无法进行读取。
         ~~~~~那半导体中名词“wafer”“chip”“die”又是什么呢?
         ~~~~~以硅工艺为例,一般把整片的硅片叫做wafer,通过工艺流程后每一个单元会被划片,封装。在封装前的单个单元的裸片叫做die。chip是对芯片的泛称,有时特指封装好的芯片。

    展开全文
  • 简介,74LS674 是一枚16位并行输入串行输出位移寄存器芯片,有多种封装形式,常见的DIP封装型号为 SN74LS674N,因市面上这个芯片比较难买到,固文章也较少,实际上它跟常见的74HC系列的8bit位移寄存器使用方式是...

    简介,74LS674 是一枚16位并行输入串行输出位移寄存器芯片,有多种封装形式,常见的DIP封装型号为 SN74LS674N,因市面上这个芯片比较难买到,固文章也较少,实际上它跟常见的74HC系列的8bit位移寄存器使用方式是差不多的。直接上代码给大家参考,想更加清楚整个程序,可以下载文章最后的资源:

    顺带一问,谁有更好的16bit位并进串出移寄存器求介绍,求留言。

    SN74LS674N PDF文档:http://www.ti.com.cn/cn/lit/ds/symlink/sn74ls674.pdf

     

    /*
     Name:		ArduinoESP32_74LS674.ino
     Created:	2018/12/26 11:21:29
     Author:	JamieChu
     QQ:        122179494
     WeiXin: 13632370065
     SN74LS674N 16位并行输入串行输出位移寄存器读取例程
     PDF文档:http://www.ti.com.cn/cn/lit/ds/symlink/sn74ls674.pdf
    
     原本使用ESP32的代码改为纯Arduino代码,
     仅供学习参考,删除了多余的判定代码,
     减少学习干扰!
     记得自己结合PDF文档进行实验!
    */
    
    //实验使用的是ESP32,使用其他Arduino板请自行修改引脚编号
    //控制引脚两片74LS674共用
    #define CS 32
    #define CLK 33
    #define RW 25
    #define MODE 26
    
    //第一片74LS674芯片的串行IO,本例连接到ESP32的GPIO27
    #define SER_0 27
    //另一片74LS674芯片的串行IO,本例连接到ESP32的GPIO14
    #define SER_1 14
    
    unsigned long ser0 = 0;
    unsigned long ser1 = 0;
    unsigned long newCode = 0;
    
    // the setup function runs once when you press reset or power the board
    void setup() 
    {
    	//初始化串口
    	Serial.begin(115200);
    	
    	//初始化IO
    	pinMode(CS, OUTPUT);
    	pinMode(CLK, OUTPUT);
    	pinMode(RW, OUTPUT);
    	pinMode(MODE, OUTPUT);
    	pinMode(SER_0, INPUT_PULLDOWN);
    	pinMode(SER_1, INPUT_PULLDOWN);
    
    	digitalWrite(CS,HIGH);
    }
    
    // the loop function runs over and over again until power down or reset
    void loop() 
    {
    	ReadSER();
    	//ReadAllSER();
    	Serial.println(newCode);
    	delay(500);
    }
    
    //单片74LS674读取
    void ReadSER()
    {
    	unsigned char tempCode;
    
    	//还原所有位
    	newCode = 0;
    
    	//根据SN74LS674的文档,CLK的SETUP时间最少需要25ns,对于ESP32在CLK切换之间加1us的延时,
    	//确保674正确识别时钟的变化,否则可能导致位移错误
    	//读取P15;
    	digitalWrite(CS,LOW);
    	digitalWrite(RW, HIGH);
    	digitalWrite(MODE, HIGH);
    	digitalWrite(CLK, HIGH);
    	delayMicroseconds(1);
    	digitalWrite(CLK, LOW);
    	delayMicroseconds(1);
    	tempCode = digitalRead(SER_0);
    	newCode |= tempCode;
    	
    	//读取P14 ~ P0;
    	digitalWrite(MODE, LOW);
    	for (int i = 0; i < 15; i++)
    	{
    		newCode = newCode << 1;
    		digitalWrite(CLK, HIGH);
    		delayMicroseconds(1);
    		digitalWrite(CLK, LOW);
    		delayMicroseconds(1);
    		tempCode = digitalRead(SER_0);
    		newCode |= tempCode;
    	}
    }
    
    //并联两片74LS674读取,CS,RW,MODE,CLK引脚公用
    void ReadAllSER()
    {
    	unsigned char tempCode_0 = 0;
    	unsigned char tempCode_1 = 0;
    
    	//还原
    	ser0 = 0;
    	ser1 = 0;
    
    	//P15
    	digitalWrite(CS, LOW);
    	digitalWrite(RW, HIGH);
    	digitalWrite(MODE, HIGH);
    	digitalWrite(CLK, HIGH);
    	delayMicroseconds(1);
    	digitalWrite(CLK, LOW);
    	delayMicroseconds(1);
    	tempCode_0 = digitalRead(SER_0);
    	tempCode_1 = digitalRead(SER_1);
    	ser0 |= tempCode_0;
    	ser1 |= tempCode_1;
    
    	//读取P14 ~ P0;
    	digitalWrite(MODE, LOW);
    	for (int i = 0; i < 15; i++)
    	{
    		ser0 = ser0 << 1;
    		ser1 = ser1 << 1;
    		digitalWrite(CLK, HIGH);
    		delayMicroseconds(1);
    		digitalWrite(CLK, LOW);
    		delayMicroseconds(1);
    		tempCode_0 = digitalRead(SER_0);
    		tempCode_1 = digitalRead(SER_1);
    		ser0 |= tempCode_0;
    		ser1 |= tempCode_1;
    	}
    
    	//组装数据
    	newCode = ser1 << 16;
    	newCode |= ser0;
    }

    CSDN下载:https://download.csdn.net/download/jamie_chu/10881062

    百度云盘:https://pan.baidu.com/s/1eop6WR9OEQ-kbjyQDfJalA

    展开全文
  • STM32 CRC寄存器

    2019-07-24 15:12:41
    1、CRC计算公式 所有的STM32芯片都内置了一个硬件的CRC计算模块,可应用到通信程序中,这个CRC计算模块使用常见的、在以太网中使用的计算多项式: X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 +X8 + X7 + X5 + ...
  • 常见芯片带操作系统启动过程大致分为四类:裸机、(windows系统机)、liunx机、安卓机 第一类、C51,STM32(裸机) C直接操控底层寄存器实现相关业务。 业务流程型裸机代码 主程序都运行在while(1)、loop...
  • //源自微信公众号 “数字芯片实验室”低功耗是当今大多数芯片的关键要求。 芯片的功耗越大,设备就会越热,运行速度越慢...设计中最常见的存储元件是同步触发器,它的输出会在输入数据和时钟改变时改变。 因此,如果...
  • 串口的使用,通常都是修改波特率,停止位,校验位等这几个常见的参数,所以这些的配置基本是没有什么问题的,不过今天逛论坛的时候发现有些芯片是支持软件反相功能的,目前我发现F0的大多都有这个功能,F1的没有这个...
  • 然而我看一些经典书籍都是这样说”异步电路很难设计,全部使用同步技术进行设计,所有寄存器器使用一个全局时钟驱动“。可在实际项目中,我又发现现代芯片设计中很难只使用一个时钟,时钟分频逻辑、时钟选择多...
  • STM32芯片IO口的配置以及上拉下拉电阻介绍(一)先思考以下几个问题IO口常见的配置方式推挽输出开漏输出 STM32芯片做硬件研发的朋友们都知道。但是还是有很多做硬件的新朋友“只知其然而不知其所然”经常弄不清什么...
  • 第12脚STB,锁存口,当输入数据在传入寄存器后,只有供给一个锁存信号才能将移入数据送QA~QH口输出。 第11脚CLK,时钟口,每一个时钟信号将移入一位数据到寄存器。 第10脚RESET,复位口,只要有复位信号,寄存器...
  • RTL8201网络芯片讲解

    2021-03-10 17:09:09
    目录 01、基础问题 1.1、芯片数据接口 1.2、芯片地址 1.3、时钟源的选择 02、寄存器 ...1.1、芯片数据接口 ...RTL8201E(L)是一种单芯片/单端口快速以太网...①RJ45也就是网口,就是我们常见的网口,如下图: ②ma
  • (点击蓝色“初心梵音”一起做有意思事情)01I/O接口(1)I/O接口概念I/O接口是一电子电路(以IC芯片或接口板形式出现 ),其内有若干专用寄存器和相应控制逻辑电路构成。它是CPU和I/O设备之间交换信息媒介和桥梁。...
  • 芯片验证技能之ESL

    2020-10-27 14:24:10
    ESL是一种芯片仿真器设计方法,常见仿真器有功能仿真、性能仿真、指令仿真,业界也有很多仿真器设计平台和工具,比如:Coware、Carbon、Mentor等。 ESL是一套能够以紧耦合方式开发、优化和验证复杂SoC系统架构和...
  • 逻辑电路 逻辑电路与芯片 逻辑电路 与或非 组合逻辑电路 比较器 加法器 编码器 解码器 多路复用器 时序逻辑电路 组合逻辑电路 ... 寄存器 ... 最常见的半导体有 硅 和 锗...
  • camera 驱动调试常见问题总结

    千次阅读 2018-06-05 17:22:51
    在嵌入式系统,如手机等平台上使用Camera sensor通常是由类似I2C这样总线进行寄存器控制,由CPU端Controller提供所需驱动时序,通常支持YUV和RGB等数据格式。有Sensor需要由CPU进行图像处理工作,有...
  • 在嵌入式系统,如手机等平台上使用Camera sensor通常是由类似I2C这样总线进行寄存器控制,由CPU端Controller提供所需驱动时序,通常支持YUV和RGB等数据格式。有Sensor需要由CPU进行图像处理工作,有...
  • 有些程序模块是寄存器,没有库,我都移植成库滴,因为我学STM32买是原子mini版本学习,对于各硬件模块都很熟,所以搭顺风车。代码基于MDK4.7x版本+3.5库+部分寄存器,因为有些地方用寄存器减少函数,检测...
  •     内存层次指CPU访问的指令或者数据所处的位置,CPU能访问CPU芯片的寄存器和cache,OS无法管理,cache和寄存器速度快,但是容量小,主存容量较大,但掉电后数据或者指令丢失,磁盘容量最大,但速度最慢。...
  • 在嵌入式系统,如手机等平台上使用Camera sensor通常是由类似I2C这样总线进行寄存器控制,由CPU端Controller提供所需驱动时序,通常支持YUV和RGB等数据格式。有 Sensor需要由CPU进行图像处理工作,有...
  • QuartesⅡ时序分析中常见的时间参数: Tclk1:时钟从时钟源端口出发到达源寄存器时钟端口的延迟 Tclk2:时钟从时钟端口出发到达目的寄存器时钟端口的延迟 Tco:时钟上升沿到达寄存器到数据从D端输出到Q端的延迟 T...
  • 常见寄存器驱动过多组合逻辑单元。至于驱动多少逻辑单元算过多,需要根据工艺,后端实现情况以及芯片本身类型来决定。 一般来说如果驱动逻辑大于10K以上,算是比较多了。 2、高扇出有哪些危害? 危害1:...

空空如也

空空如也

1 2 3 4 5
收藏数 100
精华内容 40
关键字:

常见的寄存器芯片