MCU前端设计简单记录

MCU前端设计简单记录第二讲 ARM 架构一 CortexM3 内核概述 CortexM3Vend ARM 介绍 CortexM3 处理器整体架构 CortexM3 处理器内核特性 CortexN3 嵌套向量中断 CortexN3MPU

大家好,欢迎来到IT知识分享网。

第一讲 Cortex-M3介绍及使用场景

一、Cortex-M3介绍

二、Cortex-M3 使用场景

高性能+高代码密度+小硅片面积,3璧合一,使得CM3大面积地成为理想的处理平台,主要应用范围:

  • 低成本单片机:CM3与生俱来就适合做单片机,甚至简单到用于做玩具和小电器的单片机,都能使用CM3作为内核。这里本是8位机和16位机统治最牢固的腹地,但是CM3更便宜,更高性能,更易使用,所以值得开发者们转到这个新生的ARM32位系统中来。
  • 汽车电子:CM3同时拥有非常高的性能和极低的中断延迟,打入实时领域的大门。CM3处理器能支持多达240个外部中断,内建了嵌套向量中断控制器,还可以选择配上一个存储器保护单元(MPU)。所有这些,使它用于高集成度低成本的汽车应用最合适不过了。
  • 数据通信:CM3的低成本+高效率,再加上Thumb-2的强大位操作指令s,使CM3非常理想地适合于很多数据通信应用,尤其是无线数传和Ad-Hoc网络,如ZigBee和蓝牙等。
  • 工业控制:在工控场合,关键的要素在于简洁、快速响应以及可靠。再一次地,CM3处理器的中断处理能力,低中断延迟,强化的故障处理能力(fault-handing),足以让它能昂首挺胸地踏入这片热土。
  • 消费类产品:以往,在许多消费产品中,都必须使用一块甚至好几块高性能的微处理器。别看CM3只是个小处理器,它的高性能和MPU机制可是足以让复杂的软件跑起来的,同时提供健壮的存储器保护。目前在市场上已经有了好多基于Cortex-M3内核的处理器产品,最便宜的还不到1美元,让ARM终于比很多8位机还便宜了。

第二讲 ARM架构

一 、Cortex M3内核概述

  1. Cortex M3 Vendor-ARM介绍
  2. Cortex M3处理器整体架构
  3. Cortex M3处理器内核特性
  4. Cortex N3嵌套向量中断
  5. Cortex N3MPU保护单元
  6. Cortex M3总线接口
  7. Cortex N3低成本调试接口

1. Cortex M3 Vendor-ARM介绍

在这里插入图片描述

  • 摩托罗拉很贵,ARM公司就借助精简指令集,后来和苹果、Acorn和LSI三家公司成立了Advance RSIC Machine公司,不生产芯片!
  • 与X86相比,功耗很低!
  • 用它的时候,要给两次钱,买这个vip时候要付费,流片成功使用的时候要付费!

2. Cortex M3处理器整体架构

在这里插入图片描述
译码控制、向量中断控制
核采用的是指数和数据并行执行,流水操作得以实现
MPU保护单元:做一些地址单元的逻辑保护,防止内存踩踏,黑客就是来搞这个,给跑废


3. Cortex M3处理器内核特性

在这里插入图片描述
两种指令集:Tvmb(16位)和ARM32(32位),Thumb-2都支持这两种指令集
三级流水
指令和数据并发
堆栈隔离
兼容v6




4. Cortex N3嵌套向量中断

在这里插入图片描述
动态优先级改变
摇尾操作!
处理器自动保存


5. Cortex N3MPU保护单元

在这里插入图片描述
8块内存区域,设置,只读

6. Cortex M3总线接口

在这里插入图片描述

7. Cortex N3低成本调试接口

在这里插入图片描述
通过AHB-AP
支持两类调试:SW、JTAG(调试速度快,管脚多)

二 、Cortex M3-CODE

  1. Cortex M3内核架构
  2. Cortex M3处理器内核-寄存器
  3. Cortex M3处理器内核指令预取
  4. Cortex M3处理器内核-流水技术
  5. Cortex M3处理器内核- Interface

1. Cortex M3内核架构

在这里插入图片描述
FETCH:取指单元
DEC:指令译码
EXEU:运行
处理流水由上面三个单独操作



PMU:数据流,可以不要

2. Cortex M3处理器内核-寄存器

在这里插入图片描述

3. Cortex M3处理器内核-指令预取

在这里插入图片描述

4. Cortex M3处理器内核-流水技术

在这里插入图片描述

5. Cortex M3处理器内核-Interface

在这里插入图片描述
注意地址的对应

三、 Cortex-M3 NVIC

  1. Cortex M3 NVIC概述
  2. Cortex M3 中断 Enable与 Clear
  3. Cortex V3 中断 Priority
  4. Cortex N3 中断 Pending与 Depending
  5. Cortex M3 Systick定时器

1. Cortex M3 NVIC概述

在这里插入图片描述
IRQs可以屏蔽的

2. Cortex M3 中断 Enable与 Clear

  • Enable与 Clear独立寄存器控制
  • 每个中断对应一个 Enable和 Clear寄存器
  • 1~240分别映射到8对32bits寄存器
  • Enable和 Clear按照写1清方式完成使能和清除
  • 异常号16+n
  • SETENAS:xEO00E100-0XE00OE11C(1C/4+1)*32=256(与下面之间预留了,为了扩展)
  • CLRENAS: 0XE000E180-OXE000 E19C((1C/4+1)*32=256

3. Cortex V3 中断 Priority

在这里插入图片描述

4. Cortex N3 中断 Pending与 Depending

在这里插入图片描述

5. Cortex M3 Systick定时器

在这里插入图片描述
处理器最少有一个timer

三、Cortex-M3 中断机制

  1. Cortex N3中断响应行为
  2. Cortex M3中断退出行为
  3. Cortex M3中断嵌套
  4. Cortex M3咬尾中断
  5. Cortex M3中断延迟
  6. Cortex M3中断响应的Faut处理

1. Cortex N3中断响应行为

在这里插入图片描述

2. Cortex M3中断退出行为

在这里插入图片描述

3. Cortex M3中断嵌套

在这里插入图片描述

4. Cortex M3咬尾中断

在这里插入图片描述

5. Cortex M3中断延迟

在这里插入图片描述

6. Cortex M3中断响应的Faut处理

在这里插入图片描述

五、MCU Memory Map

  1. Cortex M3 Memory Map Overview
  2. Cortex M3 Memory Region Permissions
  3. Cortex M3 Bit-banding
  4. Cortex M3 ROM Memory Table

1. Cortex M3 Memory Map Overview

在这里插入图片描述

2. Cortex M3 Memory Region Permissions

在这里插入图片描述

3. Cortex M3 Bit-banding

在这里插入图片描述
一个地址对应的是8bit,就是一个byte。加了alias映射后,7bit对应的是2200001c的地址,每一个bit对应一个地址,操作时方便很多,只需要处理映射地址的最低位!
以前修改一个bit,需要先把那个byte全部读出来,然后再屏蔽其他位,再进行写入!

4. Cortex M3 ROM Memory Table

在这里插入图片描述

六、Cortex M3-时钟与复位

  1. Cortex M3 Clocking
  2. Cortex M3 Resets
  3. Cortex M3 Resets Mode
  4. Cortex M3 Reset Diagram
  5. Cortex M3 Power Control

1. Cortex M3 Clocking

在这里插入图片描述
FCLK:要一直存在!

2. Cortex M3 Resets

在这里插入图片描述

3. Cortex M3 Resets Mode

在这里插入图片描述

4. Cortex M3 Reset Diagram

在这里插入图片描述

5. Cortex M3 Power Control

在这里插入图片描述

七、Cortex M3-Debug System

  1. Cortex M3 System Debug Access Overview
  2. Cortex M3 System debug architecture
  3. Cortex M3 FPB
  4. Cortex M3 DWT
  5. Cortex M3 TM
  6. Cortex M3 AHB-AP
  7. Cortex M3 TPIU

1. Cortex M3 System Debug Access Overview

在这里插入图片描述

2. Cortex M3 System debug architecture

在这里插入图片描述
可以挂多个ap,基本上可以访问所有空间,但是dft应该会单独做一个ap

3. Cortex M3 FPB

在这里插入图片描述
代码区:flash存放,
如果flash有坏的,打补丁,映射到RAM

4. Cortex M3 DWT

在这里插入图片描述

5. Cortex M3 TM

在这里插入图片描述

6. Cortex M3 AHB-AP

在这里插入图片描述

7. Cortex M3 TPIU

在这里插入图片描述

第三讲 MCU芯片存储系统

一、MCU芯片存储系统-ROM

1.MCU存储系统ROM概述

在这里插入图片描述
只读存储器,非易失性,不容改变,

2.MCU存储系统ROM基本原理

在这里插入图片描述
简单的rtl就可以完成一个简单的rom
1024×32一般都是基本单元

3.MCU存储系统ROM分类

在这里插入图片描述
东芝1984年发明了flash,工业界用的要么是ROM和flash,前者简单,面积小;重点用的是flash

4.MCU存储系統ROM生成

在这里插入图片描述
两种启动方式,GUI和命令行,其实感觉quartus II也可以生成这些东西!
GUI一次只会生成一个,脚本一次可以生成很多,看需求!
在这里插入图片描述
可以生成需要用的文件,验证的时候做验证模型,综合用的文件等
在这里插入图片描述
在这里插入图片描述





5.MCU存储系统ROM集成

  • Interface
    在这里插入图片描述
    Basic可以配置这ROM,cpu一开始就是来读它的,所以它之前就配置好的
    CEN是片选


  • Basic Function

在这里插入图片描述

  • Test Function
    在这里插入图片描述
  • EMA
    在这里插入图片描述
  • Power Gating
    在这里插入图片描述

二、MCU芯片存储系统-Flash

1.MCU存储系统 Flash基本原理

在这里插入图片描述
非易失性:掉电也不会影响

2.MCU存储系统flash种类

在这里插入图片描述
NAND 按块进行访问的,NOR按位进行访问的

3.MCU存储系统Flash时序(复用和非复用)

  • Flash时序(NOR)
    在这里插入图片描述
    一般集成在MCU中,只有几十K,MCU中地址与数据分离的作用不大!
    在这里插入图片描述


三、MCU芯片存储系统-SRAM

1.MCU存储系统- SRAM Concept

在这里插入图片描述
只要有电,就存下来了,由于面积比较大,内部用的就是这个,速度比较快
FIFO比较大的话就用sram

2.MCU存储系统- SRAM Orgnization

在这里插入图片描述
典型的sram使用6个晶体管构成,来寄存一个bit的数据!
1024X4,可能会摆成512×8的阵列,把形状尽量做成正方形,便于后端摆放

3.MCU存储系统- SRAM Type

在这里插入图片描述
SP单端读写端口:不能同时读写,不会有读写冲突,尽量不要有先读后写,或者先初始化,防止出错!
DP双端读写端口:速度快,MCU中很少用,用两个SRAM做乒乓操作

一般是通过地址查找内容,但是也有通过内容查找地址,如路由器(CAM)!

4.MCU存储系统- SRAM Interface

在这里插入图片描述

5.MCU存储系统- SRAM Timing

在这里插入图片描述
一个时钟周期

6.MCU存储系统- SRAM Generation

在这里插入图片描述

第四讲 AMBA总线

一、AMBA总线-APB

1.MCU总线系统APB2.0总线协议

在这里插入图片描述
在这里插入图片描述

PSELx是选择UART、Keypad、Timer等的,采用广播方式,访问地址是统一排放的!

  • write transfer
    在这里插入图片描述
    PSEL为低时,应该保持的,减少翻转

  • Read transfer
    在这里插入图片描述
    其实读的时候可以一拍完成?
    在这里插入图片描述
    在这里插入图片描述



2.MCU总线系统APB3.0总线协议

与2.0相比,增加了PREADY和PSLVERR两个信号!

在这里插入图片描述
如果ready为高,和2.0一样也是两拍完成!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述






3.MCU总线系统APB私有扩展

二、AMBA总线-AHB

burst就是连续访问的16个byte(0、4、8、C、10、14、18、1C、、、),连续触发!提出这个burst但是没怎么用!

三、MCU总线系统-AHB2APB总线桥

1.MCU总线系统AHB2APB总线桥作用

在这里插入图片描述

2.MCU总线系统AHB2APB总线桥实现状态机

在这里插入图片描述

3.MCU总线系统AHB2APB总线桥RTL代码实现解析

//cmsdk_ahb_to_apb.v module cmsdk_ahb_to_apb #( // Parameter to define address width // 16 = 2^16 = 64KB APB address space parameter ADDRWIDTH = 16, parameter REGISTER_RDATA = 1, parameter REGISTER_WDATA = 0) ( // -------------------------------------------------------------------------- // Port Definitions // -------------------------------------------------------------------------- input wire HCLK, // Clock input wire HRESETn, // Reset input wire PCLKEN, // APB clock enable signal input wire HSEL, // Device select input wire [ADDRWIDTH-1:0] HADDR, // Address input wire [1:0] HTRANS, // Transfer control input wire [2:0] HSIZE, // Transfer size input wire [3:0] HPROT, // Protection control input wire HWRITE, // Write control input wire HREADY, // Transfer phase done input wire [31:0] HWDATA, // Write data output reg HREADYOUT, // Device ready output wire [31:0] HRDATA, // Read data output output wire HRESP, // Device response // APB Output output wire [ADDRWIDTH-1:0] PADDR, // APB Address output wire PENABLE, // APB Enable output wire PWRITE, // APB Write output wire [3:0] PSTRB, // APB Byte Strobe output wire [2:0] PPROT, // APB Prot output wire [31:0] PWDATA, // APB write data output wire PSEL, // APB Select output wire APBACTIVE, // APB bus is active, for clock gating // of APB bus // APB Input input wire [31:0] PRDATA, // Read data for each APB slave input wire PREADY, // Ready for each APB slave input wire PSLVERR); // Error state for each APB slave // -------------------------------------------------------------------------- // Internal wires // -------------------------------------------------------------------------- reg [ADDRWIDTH-3:0] addr_reg; // Address sample register reg wr_reg; // Write control sample register reg [2:0] state_reg; // State for finite state machine reg [3:0] pstrb_reg; // Byte lane strobe register wire [3:0] pstrb_nxt; // Byte lane strobe next state reg [1:0] pprot_reg; // PPROT register wire [1:0] pprot_nxt; // PPROT register next state wire apb_select; // APB bridge is selected wire apb_tran_end; // Transfer is completed on APB reg [2:0] next_state; // Next state for finite state machine reg [31:0] rwdata_reg; // Read/Write data sample register wire reg_rdata_cfg; // REGISTER_RDATA paramater wire reg_wdata_cfg; // REGISTER_WDATA paramater reg sample_wdata_reg; // Control signal to sample HWDATA // ------------------------------------------------------------------------- // State machine // ------------------------------------------------------------------------- localparam ST_BITS = 3; localparam [ST_BITS-1:0] ST_IDLE = 3'b000; // Idle waiting for transaction localparam [ST_BITS-1:0] ST_APB_WAIT = 3'b001; // Wait APB transfer localparam [ST_BITS-1:0] ST_APB_TRNF = 3'b010; // Start APB transfer localparam [ST_BITS-1:0] ST_APB_TRNF2 = 3'b011; // Second APB transfer cycle localparam [ST_BITS-1:0] ST_APB_ENDOK = 3'b100; // Ending cycle for OKAY localparam [ST_BITS-1:0] ST_APB_ERR1 = 3'b101; // First cycle for Error response localparam [ST_BITS-1:0] ST_APB_ERR2 = 3'b110; // Second cycle for Error response localparam [ST_BITS-1:0] ST_ILLEGAL = 3'b111; // Illegal state // -------------------------------------------------------------------------- // Start of main code // -------------------------------------------------------------------------- // Configuration signal assign reg_rdata_cfg = (REGISTER_RDATA==0) ? 1'b0 : 1'b1; assign reg_wdata_cfg = (REGISTER_WDATA==0) ? 1'b0 : 1'b1; // Generate APB bridge select assign apb_select = HSEL & HTRANS[1] & HREADY; // Generate APB transfer ended assign apb_tran_end = (state_reg==3'b011) & PREADY; assign pprot_nxt[0] = HPROT[1]; // (0) Normal, (1) Privileged assign pprot_nxt[1] = ~HPROT[0]; // (0) Data, (1) Instruction // Byte strobe generation // - Only enable for write operations // - For word write transfers (HSIZE[1]=1), all byte strobes are 1 // - For hword write transfers (HSIZE[0]=1), check HADDR[1] // - For byte write transfers, check HADDR[1:0] assign pstrb_nxt[0] = HWRITE & ((HSIZE[1])|((HSIZE[0])&(~HADDR[1]))|(HADDR[1:0]==2'b00)); assign pstrb_nxt[1] = HWRITE & ((HSIZE[1])|((HSIZE[0])&(~HADDR[1]))|(HADDR[1:0]==2'b01)); assign pstrb_nxt[2] = HWRITE & ((HSIZE[1])|((HSIZE[0])&( HADDR[1]))|(HADDR[1:0]==2'b10)); assign pstrb_nxt[3] = HWRITE & ((HSIZE[1])|((HSIZE[0])&( HADDR[1]))|(HADDR[1:0]==2'b11)); // Sample control signals always @(posedge HCLK or negedge HRESETn) begin if (~HRESETn) begin addr_reg <= { 
   (ADDRWIDTH-2){ 
   1'b0}}; wr_reg <= 1'b0; pprot_reg <= { 
   2{ 
   1'b0}}; pstrb_reg <= { 
   4{ 
   1'b0}}; end else if (apb_select) // Capture transfer information at the end of AHB address phase begin addr_reg <= HADDR[ADDRWIDTH-1:2]; wr_reg <= HWRITE; pprot_reg <= pprot_nxt; pstrb_reg <= pstrb_nxt; end end // Sample write data control signal // Assert after write address phase, deassert after PCLKEN=1 wire sample_wdata_set = apb_select & HWRITE & reg_wdata_cfg; wire sample_wdata_clr = sample_wdata_reg & PCLKEN; always @(posedge HCLK or negedge HRESETn) begin if (~HRESETn) sample_wdata_reg <= 1'b0; else if (sample_wdata_set | sample_wdata_clr) sample_wdata_reg <= sample_wdata_set; end // Generate next state for FSM // Note : case 3'b111 is not used. The design has been checked that // this illegal state cannot be entered using formal verification. always @(state_reg or PREADY or PSLVERR or apb_select or reg_rdata_cfg or PCLKEN or reg_wdata_cfg or HWRITE) begin case (state_reg) // Idle ST_IDLE : begin if (PCLKEN & apb_select & ~(reg_wdata_cfg & HWRITE)) next_state = ST_APB_TRNF; // Start APB transfer in next cycle else if (apb_select) next_state = ST_APB_WAIT; // Wait for start of APB transfer at PCLKEN high else next_state = ST_IDLE; // Remain idle end // Transfer announced on AHB, but PCLKEN was low, so waiting ST_APB_WAIT : begin if (PCLKEN) next_state = ST_APB_TRNF; // Start APB transfer in next cycle else next_state = ST_APB_WAIT; // Wait for start of APB transfer at PCLKEN high end // First APB transfer cycle ST_APB_TRNF : begin if (PCLKEN) next_state = ST_APB_TRNF2; // Change to second cycle of APB transfer else next_state = ST_APB_TRNF; // Change to state-2 end // Second APB transfer cycle ST_APB_TRNF2 : begin if (PREADY & PSLVERR & PCLKEN) // Error received - Generate two cycle // Error response on AHB by next_state = ST_APB_ERR1; // Changing to state-5 and 6 else if (PREADY & (~PSLVERR) & PCLKEN) // Okay received begin if (reg_rdata_cfg) // Registered version next_state = ST_APB_ENDOK; // Generate okay response in state 4 else // Non-registered version next_state = { 
   2'b00, apb_select}; // Terminate transfer end else // Slave not ready next_state = ST_APB_TRNF2; // Unchange end // Ending cycle for OKAY (registered response) ST_APB_ENDOK : begin if (PCLKEN & apb_select & ~(reg_wdata_cfg & HWRITE)) next_state = ST_APB_TRNF; // Start APB transfer in next cycle else if (apb_select) next_state = ST_APB_WAIT; // Wait for start of APB transfer at PCLKEN high else next_state = ST_IDLE; // Remain idle end // First cycle for Error response ST_APB_ERR1 : next_state = ST_APB_ERR2; // Goto 2nd cycle of error response // Second cycle for Error response ST_APB_ERR2 : begin if (PCLKEN & apb_select & ~(reg_wdata_cfg & HWRITE)) next_state = ST_APB_TRNF; // Start APB transfer in next cycle else if (apb_select) next_state = ST_APB_WAIT; // Wait for start of APB transfer at PCLKEN high else next_state = ST_IDLE; // Remain idle end default : // Not used next_state = 3'bxxx; // X-Propagation endcase end // Registering state machine always @(posedge HCLK or negedge HRESETn) begin if (~HRESETn) state_reg <= 3'b000; else state_reg <= next_state; end // Sample PRDATA or HWDATA always @(posedge HCLK or negedge HRESETn) begin if (~HRESETn) rwdata_reg <= { 
   32{ 
   1'b0}}; else if (sample_wdata_reg & reg_wdata_cfg & PCLKEN) rwdata_reg <= HWDATA; else if (apb_tran_end & reg_rdata_cfg & PCLKEN) rwdata_reg <= PRDATA; end // Connect outputs to top level assign PADDR = { 
   addr_reg, 2'b00}; // from sample register assign PWRITE = wr_reg; // from sample register // From sample register or from HWDATA directly assign PWDATA = (reg_wdata_cfg) ? rwdata_reg : HWDATA; assign PSEL = (state_reg==ST_APB_TRNF) | (state_reg==ST_APB_TRNF2); assign PENABLE = (state_reg==ST_APB_TRNF2); assign PPROT = { 
   pprot_reg[1], 1'b0, pprot_reg[0]}; assign PSTRB = pstrb_reg[3:0]; // Generate HREADYOUT always @(state_reg or reg_rdata_cfg or PREADY or PSLVERR or PCLKEN) begin case (state_reg) ST_IDLE : HREADYOUT = 1'b1; // Idle ST_APB_WAIT : HREADYOUT = 1'b0; // Transfer announced on AHB, but PCLKEN was low, so waiting ST_APB_TRNF : HREADYOUT = 1'b0; // First APB transfer cycle // Second APB transfer cycle: // if Non-registered feedback version, and APB transfer completed without error // Then response with ready immediately. If registered feedback version, // wait until state_reg==ST_APB_ENDOK ST_APB_TRNF2 : HREADYOUT = (~reg_rdata_cfg) & PREADY & (~PSLVERR) & PCLKEN; ST_APB_ENDOK : HREADYOUT = reg_rdata_cfg; // Ending cycle for OKAY (registered response only) ST_APB_ERR1 : HREADYOUT = 1'b0; // First cycle for Error response ST_APB_ERR2 : HREADYOUT = 1'b1; // Second cycle for Error response default: HREADYOUT = 1'bx; // x propagation (note :3'b111 is illegal state) endcase end // From sample register or from PRDATA directly assign HRDATA = (reg_rdata_cfg) ? rwdata_reg : PRDATA; assign HRESP = (state_reg==ST_APB_ERR1) | (state_reg==ST_APB_ERR2); assign APBACTIVE = (HSEL & HTRANS[1]) | (|state_reg); endmodule 

第五讲 MCU外设系统-IO

一、MCU典型外设-UART应用和作用

  1. UART Concept
  2. UART Data Framing
  3. UART Receiver
  4. UART transmitter
  5. UART special transceiver conditions

1. UART Concept

在这里插入图片描述
全双工,点对点传输,一个master对应一个slave

2. UART Data Framing

在这里插入图片描述

3. UART Receiver

在这里插入图片描述

4. UART transmitter

在这里插入图片描述

5. UART special transceiver conditions

在这里插入图片描述

二、MCU典型外设-UART电路设计

  1. UART architecture
  2. UART register configuration
  3. UART Receiver
  4. UART transmitter
  5. UART special transceiver conditions

1. UART architecture

在这里插入图片描述

2. UART register configuration

在这里插入图片描述

3. UART Receiver

4. UART transmitter

5. UART special transceiver conditions

三、MCU典型外设-UART RTL代码编写

四、MCU典型外设-I2C应用和作用

  1. 12C Concept
  2. 12C Application
  3. 12C Revision
  4. 12C Design
  5. 12C Message protocols
  6. Timing

1. 12C Concept

飞利浦->NXP,现在也四分五裂了

2. 12C Application

在这里插入图片描述
cpu外围低速度设备控制

3. 12C Revision

在这里插入图片描述

4. 12C Design

在这里插入图片描述

5. 12C Message protocols

在这里插入图片描述

6. Timing

在这里插入图片描述

五、MCU典型外设-I2C电路设计

  1. I2C设计架构
  2. 12C设计PAD
  3. I2C寄存器配置

1. I2C设计架构

在这里插入图片描述

2. 12C设计PAD

在这里插入图片描述
双向pad

3. I2C寄存器配置

在这里插入图片描述
在这里插入图片描述

  • control register
    在这里插入图片描述
  • Transmitter
    在这里插入图片描述
  • receiver
    在这里插入图片描述
  • status
    在这里插入图片描述

六、MCU典型外设-I2C RTL代码编写

略,如有需要,再来补充学习!

七、MCU典型外设-SPI应用和作用

  1. Spl Concept
  2. SPI Interface
  3. SPI Clock Polarity and Phase
  4. SPI Topology Independent slave configuration
  5. SPI Advantages
  6. SPI Disadvantages
  7. SPI Variant

1. Spl Concept

  • A synchronous serial communication interface
  • Used for short distance communication, primarily in embedded systems
  • Developed by Motorola in the mid 1980s
  • Communicate in full duplex mode using a single master multiple slave architecture
  • The master originates the frame for reading and writing
  • Multiple slave devices are supported through individual slave select(SS)lines

2. SPI Interface

在这里插入图片描述

3. SPI Clock Polarity and Phase

在这里插入图片描述

4. SPI Topology Independent slave configuration

在这里插入图片描述

5. SPI Advantages

在这里插入图片描述

6. SPI Disadvantages

  • Requires more pins on IC packages than PC, even in the three-wire variant
  • No in-band addressing; out-of-band chip select signals are required on shared buses
  • No hardware flow control by the slave
  • No hardware slave acknowledgment
  • Typically supports only one master device
  • No error-checking protocol is defined
  • Only handles short distances compared to RS-232, RS-485, or Can-bus
  • Many existing variations

7. SPI Variant

Three wire serial bus

  • Uses single bidirectional data line(SSO)instead of two lines(Mosl and MISO)
  • Restricted to a half duplex mode
  • Used for lower performance parts such as small EEPROMS sensors and Microwire

Dual SPI: A half-duplex configuration to send two bits per clock cycle

  • The Mosl line becomes SIO0 and carries even bits
  • The MISO line becomes Slo1 and carries odd bits
  • Data is still transmitted msbit-first
    Slo1 carries bits 7, 5, 3 and 1 of each byte

八、MCU典型外设-SPI电路设计

  1. SPI架构
  2. SPI寄存器

1. SPI架构

在这里插入图片描述
SPCR、SPER、SPSR是寄存器,写寄存器用来配置内部,读内存器是用来了解内部工作状态

2. SPI寄存器

  • 配置寄存器
    在这里插入图片描述
  • 控制寄存器
    在这里插入图片描述
  • 状态寄存器
    在这里插入图片描述
  • 数据寄存器
    在这里插入图片描述
  • SPI寄存器
    在这里插入图片描述

九、MCU典型外设-SPI RTL代码编写

先略,如有需要,再来补充学习!

第六讲 外设系统-内部控制单元

一、MCU典型外设-WDT应用和作用

  1. WDT Concept
  2. WDT Restart
  3. WDT Reset

1. WDT Concept

2. WDT Restart

3. WDT Reset

在这里插入图片描述

二、 MCU典型外设-WDT电路设计

  1. WDT 架构
  2. WDT 寄存器

1. WDT 架构

在这里插入图片描述
Free Running Countering,自动减一

2. WDT 寄存器

在这里插入图片描述
如果复位值太小,就会不断的复位!

  • WDT Load & Control
    在这里插入图片描述
  • WDT INT
    在这里插入图片描述
    原始中断raw watching interrupt
    上报中断watching interrupt


中断一般包括三部分:中断使能/mask、原始中断、中断上报

三、 MCU典型外设- WDT RTL编码

先略,如有需要,再来补充学习!

四、 MCU典型外设- Timer应用和作用

  1. Timer Concept
  2. Timer Application

1. Timer Concept

在这里插入图片描述
特别的时间间隔,记住的是相对时间,不是绝对时间
加1的、减1的

有硬件的、有软件的timer,软件的计数不精准,硬件计数特别精准,硬件不会耗费cpu指令

2. Timer Application

  • Time slot for OS
  • WDT
  • Counter for software

与WDT相似,有减1的计数器,计数完成,产生中断

五、 MCU典型外设- Timer电路设计

  1. Timer设计
  2. Timer寄存器

1. Timer架构设计

在这里插入图片描述

2. Timer寄存器

  • Timer Configuration
    在这里插入图片描述

六、 MCU典型外设- Timer RTL编码

七、 MCU典型外设-RTC应用和作用

  1. RTC Concept
  2. RTC Application

1. RTC Concept

2. RTC Application

  • RTC Purpose
    在这里插入图片描述
  • RTC Power Source在这里插入图片描述
    独立供电
  • RTC Timing
    在这里插入图片描述

八、 MCU型外设-RTC电路设计

在这里插入图片描述

九、 MCU类型外设- RIC RTL编码

先略,如有需要,再来补充学习!

第七讲 ARM M3总线接口

一、总线接口-AHB2SRAM设计文档编写

1. 功能特性

  • 32位 AHB Slave interface
  • 支持8位、16位和32位的SRAM据读写操作
  • 支持低功耗工作(8位/16位操作)

2.架构框图

3. 接口描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

还可以描述的更详细

4.接口时序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

5.模块详细电路设计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

尽可能做到一个图产生一个信号!

二、总线接口-AHB2SRAM RTL电路编码

//锁存对应的电路?不是锁存器吧! always@(posedge hclk or negedge hrst_n)begin if(hrst_n == 1'b0) begin hsize_lat <= { 
   1{ 
   1'b0}}; haddr_lat <= { 
   HADDR_WIDTH{ 
   1'b0}}; end else if(ahb_access == 1'b1)begin hsize_lat <= hsize; haddr_lat <= haddr; end end 

三、总线接口-AHB2SRAM 实践练习

参考原来的文章:AHB-SRAM简单设计之架构图解

第八讲 ARM M3 TOP设计

一、MCU CRG设计-时钟设计

  1. 时钟设计需求
  2. 时钟设计要点
  3. 时钟设计电硌结构

1. 时钟设计需求

  1. 生成AHB时钟,APB时钟,RTC时钟
  2. AHB最高时钟频率为98MHz
  3. APB时钟为AHB同步时钟,且可以配置AHB时钟的1/2,1/4,1/8
  4. RTC时钟单独控制时钟,时钟频率1KHz
  5. 各外设时钟可以单独门控,满足低功耗要求

2. 时钟设计要点

  1. DFT可控,在DFT模式,可有DFT工程师插入DFT时钟
  2. DFT隔离,在DFT模式,SCAN描述不影响时钟的稳定产生
  3. DFT观测,内部时钟可输出
  4. 上电工作外部参考时钟,PLL稳定后,时钟自动切换
  5. 低功耗要求,在系统不工作时,时钟自动关闭
  6. 低功耗要求,各个外设时钟均能门控

3. 时钟设计电路结构

在这里插入图片描述
PLL锁相环,倍频

二、MCU CRG设计-时钟设计代码

先略,如有需要,再来补充学习!

三、MCU CRG设计-复位设计

  1. 复位需求
  2. 复位设计要点
  3. 复位设计电路结构

1. 复位需求

  1. 生成AHB时钟,APB时钟,RTC时钟于对应异步复位同步撤离时钟
  2. 根据WDT的中断,能够自动复位CPU(如果没有喂狗,cpu就会被reset)
  3. 根据系统中断,能够自动复位CPU
  4. 每个外设具有单独软复位
  5. 满足DFT可控要求

2. 复位设计要点

  1. 输入复位需要滤毛刺
  2. DFT可控,在DFT模式,可有DFT工程师插入DFT复位
  3. DFT隔离,在DFT模式,SCAN描述不影响复位的稳定产生
  4. 与时钟同步进行撇离
  5. WDT,系统控制中断自动复位启动和撤离
  6. 实现软复位

3. 复位设计电路结构

在这里插入图片描述
滤波、同步、软复位
DFT隔离

四、MCU CRG设计-复位设计代码

先略,如有需要,再来补充学习!

第九讲 ARM M3 TOP-系统控制器

一、MCU系统控制器设计

  1. 系统控制器作用
  2. 系统控制器-寄存器类型
  3. 系统控制器寄存器电路设计

1. 系统控制器作用

在这里插入图片描述
挂在apb下面

2. 系统控制器-寄存器类型

  1. RW可读可写
  2. RO只读
  3. RC读清
  4. WC写清

在这里插入图片描述

3. 系统控制器寄存器电路设计

  • 系统控制器-寄存器电路设计RW
    在这里插入图片描述
  • 系统控制器-寄存器电路设计WC
    在这里插入图片描述
  • 系统控制器-寄存器电路设计RC
    在这里插入图片描述
  • 系统控制器-寄存器电路设计RO
    在这里插入图片描述

二、MCU系统控制器设计代码

先略,如有需要,再来补充学习!

第十讲 ARM M3 TOP集成

一、MCU系列培训-PAD介绍

  1. PAD时序参数
  2. PAD类型

1. PAD时序参数

  • Transition Time(Rise/Fall)
    在这里插入图片描述

2. PAD类型

  • PAD-PBSxRN
    在这里插入图片描述
  • PAD-PBCDxRN
    在这里插入图片描述
  • PAD-PBCUxRN
    在这里插入图片描述
  • PAD-PBSUxRN
    在这里插入图片描述
  • PAD-PISDRN
    在这里插入图片描述
  • PAD-PICDRN
    在这里插入图片描述
  • PAD-PISRN
    在这里插入图片描述
  • PAD-PISURN
    在这里插入图片描述
  • PAD-PICURN
    在这里插入图片描述
    可配上拉、下拉;施密特、非施密特;

  • PAD-PXxRN
    在这里插入图片描述

二、MCU IO复用及代码讲解

先略,如有需要,再来补充学习!

后记

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/110529.html

(0)
上一篇 2026-01-30 22:16
下一篇 2026-01-30 22:27

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信