SEED TI C2000 培训教材
第一部分:介绍
什么是数字信号处理器 ? Microprocessor (µP): 一个多IC处理系统的核心器件 2种基本的结构: „Von Neumann“- 冯.诺依曼 „Harvard“ – 哈弗 „Von Neumann“: 数据、代码共享内存空间 数据、代码共享内存总线 Example: Intel‘s x86 Pentium Processor family „Harvard“: 数据、代码独立存储空间 数据、代码独立存储总线
SOC-微控制器 (µC) 用来实现实时控制的核以及输入输出接口都集成在片上 确保在嵌入式应用中的高的性价比 几乎能满足各类电子产品对运算能力和外设的要求 2种 µP – 结构 (Von Neumann 和Harvard) 广泛应用于 Microcontrollers
DSP-数字信号处理器 类似于微处理器 (µp..), 一个计算系统的核 额外的用来加速复杂运算的外设: 硬件乘法器(MPY) 算术运算单元(ALU) 多总线访问机制 实现 2n 次乘法/加法运算的硬件移位寄存器 额外的用来加速复杂运算的外设
典型的DSP算法
乘加运算的实现- µP 使用PC、通用的C代码编译器例如Visual.Studio.Net实现 代码实例: #include <stdio.h> int data[4]={1,2,3,4}; int coeff[4]={8,6,4,2}; int main(void) { int i; int result =0; for (i=0;i<4;i++) result += data[i]*coeff[i]; printf("%i",result); return 0; } 使用PC、通用的C代码编译器例如Visual.Studio.Net实现
6个基本操作 读data[i] 到内核 读coeff[i] 到内核 MPY data[i]*coeff[i] 做加法运算 修改指针1 CPU将要执行的操作? 设置指针1指向 data[0] 设置指针2指向 coeff[0] 读data[i] 到内核 读coeff[i] 到内核 MPY data[i]*coeff[i] 做加法运算 修改指针1 修改指针2 自增; 如果 i<3 , 返回第三步重复执行 3到8 被称作“6 Basic Operations of a DSP” DSP能够单周期执行完这6个基本操作
µP的执行过程-机器/汇编码 Address M-Code Assembly - Instruction 10: for (i=0;i<4;i++) 00411960 C7 45 FC 00 00 00 00 mov dword ptr [i],0 00411967 EB 09 jmp main+22h 00411969 8B 45 FC mov eax,dword ptr [i] 0041196C 83 C0 01 add eax,1 0041196F 89 45 FC mov dword ptr [i],eax 00411972 83 7D FC 04 cmp dword ptr [i],4 00411976 7D 1F jge main+47h 11: result += data[i]*coeff[i]; 00411978 8B 45 FC mov eax,dword ptr [i] 0041197B 8B 4D FC mov ecx,dword ptr [i] 0041197E 8B 14 85 40 5B 42 00 mov edx,dword ptr[eax*4+425B40h] 00411985 0F AF 14 8D 50 5B 42 00 imul edx,dword ptr[ecx*4+425B50h] 0041198D 8B 45 F8 mov eax,dword ptr [result] 00411990 03 C2 add eax,edx 00411992 89 45 F8 mov dword ptr [result],eax 00411995 EB D2 jmp main+19h (411969h) Imul 乘法 、X86 jge 》跳转
乘加运算的实现-DSP 使用DSP硬件平台以及Ti的C编译器来实现 代码实例: int data[4]={1,2,3,4}; int coeff[4]={8,6,4,2}; int main(void) { int i; int result =0; for (i=0;i<4;i++) result += data[i]*coeff[i]; printf("%i",result); return 0; }
DSP的执行过程-机器/汇编码 Example: Texas Instruments TMS320F2812 Address MCode Assembly Instruction 0x8000 FF69 SPM 0 0x8001 8D04 0000R MOVL XAR1,#data 0x8003 76C0 0000R MOVL XAR7,#coeff 0x8005 5633 ZAPA 0x8006 F601 RPT #1 0x8007 564B 8781 ||DMAC ACC:P, *XAR1++,*XAR7++ 0x8009 10AC ADDL ACC,P<<PM 0x800A 8D04 0000R MOVL XAR1,#y 0x800B 1E81 MOVL *XAR1,ACC Example: Texas Instruments TMS320F2812 Space : 12 Code Memory ; 9 Data Memory Execution Cycles : 10 @ 150MHz = 66 ns
数字信号控制器 (DSC) µC:带有一个微处理器(µP)作为运算单元的单芯片微型计算机 DSC:带有一个数字信号处理器(DSP)作为运算单元的单芯片微型计算机 结合DSP优越的运算能力以及独立数据、程序存储结构和外设,得到最高效的海量运算嵌入式实时控制解决方案 DSC –Example: Ti C2000系列DSP 结合DSP优越的运算能力以及独立数据、程序存储结构和外设,得到最高效的海量运算嵌入式实时控制解决方案
第二部分:C2000结构
C281x Block Diagram Event Manager A Program Bus Event Manager B Sectored Flash RAM Boot ROM 12-bit ADC Watchdog 22 A(18-0) 32 McBSP 32 D(15-0) 32 CAN2.0B PIE Interrupt Manager 32-bit Auxiliary Registers 32x32 bit Multiplier R-M-W Atomic ALU SCI-A SCI-B 128K flash/18Kram 3 32 bit Timers SPI Realtime JTAG Register Bus CPU GPIO Data Bus
C28x CPU Core 32-bit 定点DSP 32 x 32 bit MAC 2次单周期16 x 16 MAC (DMAC) Program Bus 32-bit 定点DSP 32 x 32 bit MAC 2次单周期16 x 16 MAC (DMAC) 快速中断响应机制 单周期读、写、修改指令 8级流水线,完全避免硬件流水 线冲突 向上代码兼容性 PIE Interrupt Manager 32-bit Auxiliary Registers 32x32 bit Multiplier R-M-W Atomic ALU 3 32 bit Timers Register Bus Realtime JTAG CPU Data Bus
C28x Internal Bus Structure Program Program Address Bus (22) Program (4M* 16) PC Program-read Data Bus (32) Decoder Data-read Address Bus (32) Data (4G * 16) Data-read Data Bus (32) Memory Registers Execution Debug ARAU MPY32x32 Real-Time Emulation & Test Engine SP R-M-W Atomic ALU ALU Standard Peripherals External Interfaces DP @X JTAG XT This is a top level architecture of the C28x. The instruction set example is used to introduce the architecture. Use the animation to tell the story. Here is an example how I would teach this slide: The C28x was design to address the need of an effective uni-processor architecture that supports the needs describe in previous slides before. There are 4 major block to the architecture: Program block, Register block, Execution block, and Test & Emulation block. To introduce the data flow we shall take examples from the instruction set. click - ADD: Here we show a stack relative addressing as a single source operand instruction with the Accumulator as the destination. As the students leading question as you introduce the architecture flow. Here is an example how I may use to teach: -Q: How does the processor get this instruction? -A: Instruction fetch …, -Q: The instruction address is generate by...? -A: Program Counter …; -click: now talk about the animated flow. Instruction is fetch from the memory and interpreted by the decoder (some processor call this the Instruction Register IR). This is the brain of the processor which generates all the control signals through out the processor based on the instructions coming in. -Q: After the instruction is decoded what does the CPU needs to get? -A: Data operand …; -click: There are several addressing methods which the programmers can specified for the CPU to use: stack relative, indirect, direct, immediate, and register addressing jut to name a few. We sill cover the addressing modes in details later. -click: what is important is the data flow comes back to the processor, the programmer can also specified the destination either to the register block or the execution block. Although this is a Harvard architecture, the C environment see memory as a unified memory space with “functions and variables”. The Harvard architecture helps improve in performance. The large address space allow different physical spaces to map as a single unified logical space. (Instructor note: void using references to Program memory and Data memory in the traditional TI DSP. This helps us and the students to think easier in the C environment. -click: The CPU also supports single cycle dual operand instruction. This requires 2 operands read simultaneously. The processor make use of the program and data buses to archive the high throughput. We will cover more in a later chapter. Internally the data flow back in forth between the Execution and Register blocks using the Register Bus. This tightly couple register block with execution block allow the C28x to be more flexible than the traditional DSP architecture. The multiple on chip buses allow the C28x to be superior than the traditional CISC and RISC architectures. -click: The C28x also supports various atomic instructions which enable this processor to run a multitask OS efficiently in an embedded environment. -click: In a complex embedded environment, real time debugging is becoming more important. The C28x is designed with hardware debugging capability built in. This debugger block non intrusively query all internal bus activities and selectively reports the CPU status via the JTAG interface. Instructors note: This is an example how we can make use of questioning techniques to teach this slide. Hopefully this example would trigger how you could develop your method to teach this slide as well as all the slides the workshop. XAR0 to XAR7 P ACC Register Bus / Result Bus Data/Program-write Data Bus (32) Data-write Address Bus (32)
C28x Multiplier and ALU / Shifters Program Bus Data Bus 32 操作码 数据存储区 操作数1 XT (32) or T/TL 16/32 16 8/16/32 MULTIPLIER 32 x 32 or Dual 16 x 16 32 Shift R/L (0-16) 操作数2 来至于寄存器 P (32) or PH/PL 乘法器结果 32 8/16 32 32 Shift R/L (0-16) 32 32 ALU (32) 32 ACC (32) AH (16) AL (16) AH.MSB AH.LSB AL.MSB AL.LSB • 32 Shift R/L (0-16) 32 Data Bus
C28x Pointer, DP and Memory Data Bus DP(16bit) 访问65536个数据页 4M以上的数据存储区DP不能访问 Program Bus 6 LSB from IR XAR0 XAR1 XAR2 XAR3 XAR4 XAR5 XAR6 XAR7 DP (16) 22 32 MUX MUX ARAU Data Memory 可以用作地址指针指向存储器或者作为通用目的寄存器来使用,AR只能作为XAR的的一部分来读取 XAR31-16 XAR15-0 =AR7-0
8-stage pipeline C28x Pipeline A B C D E & G Access E same address F G F1 F2 D1 D2 R1 R2 E W A B C F1 F2 D1 D2 R1 R2 E F1 F2 D1 D2 R1 R2 E F1 F2 D1 D2 R1 R2 E F1 F2 D1 D2 R1 R2 X D E F G E & G Access same address R1 R2 E W D2 R1 R2 E W H Show the C28x pipe is deeper by breaking into smaller stages. Show how these smaller stages helps speed up the processor throughput. Then show how the protected pipe automatically resolve pipeline conflict. This is how I may teach this slide: -click: -Q: What phase in the pipeline does the CPU doing the intended work? -A: The “real” intended work done by CPU is in the execution phase. This is when the data flows through the execution “math” channel. Its limitation is the speed of light, how fast can electrons charged move through the silicon. The speed of light is the upper limit that the CPU throughput can archive. The memory devices are slower than the CPU execution speed. Thus the faster the architecture can constantly provide data to the execution phase, the faster the throughput, hence the faster the device. -click: Looking at the C28x pipeline, all the F, D, R phases are overhead - what it takes to get the data to the execution phase. If one of these phases is slow, the CPU throughput is limited by the slowest pipeline phase. Breaking these phases into smaller function allows them to keep up with the execution phase speed. Thus improve the pipeline efficiency. -Q: what happen to write phase? Which hardware resources does write phase uses? -A: write data bus: -click: In general most write are hidden from the pipeline delay as long as there is no immediate read from the written address. Write hold off until there is a free cycle in the operand memory read phase. This is when there is an instruction operates on only registers. Data memory bus is free to perform a write. Multiple write can be queue up in a 3 deep FIFO. -click: -Q: what happen when read to the same address of a queue up write? -A: Pipeline automatically stalled so the operand order are preserved. -click: The main point in the pipeline stall is the software does not need to manage the pipeline. A protected pipeline make ease of programming use, debugging, and maintaining. F1: 取指令地址 F2: 取指令内容 D1: 32/16判断边界 D2: 取指译码 R1: 操作数地址 R2: 取操作数 E: 指令执行 W: 写内容回存储单元 流水线自动保护机制
TMS320F2812 Memory Map MO SARAM (1K) M1 SARAM (1K) LO SARAM (4K) L1 SARAM (4K) HO SARAM (8K) Boot ROM (4K) MP/MC=0 BROM vector (32) MP/MC=0 ENPIE=0 OTP (1K) FLASH (128K) reserved PF 0 (2K) PF 1 (4K) PF 2 (4K) PIE vector (256) ENPIE=1 XINT Zone 0 (8K) XINT Zone 1 (8K) XINT Zone 2 (0.5M) XINT Zone 6 (0.5M) XINT Zone 7 (16K) MP/MC=1 XINT Vector-RAM (32) MP/MC=1 ENPIE=0 Data | Program 0x00 0000 0x00 0400 0x00 0800 0x00 0D00 0x00 1000 0x00 6000 0x00 7000 0x00 8000 0x00 9000 0x00 A000 0x3D 7800 0x3D 8000 0x3F 8000 0x3F A000 0x3F F000 0x3F FFC0 0x3F C000 0x18 0000 0x10 0000 0x08 0000 0x00 4000 0x00 2000 CSM: LO, L1 OTP, FLASH 3FF000~3FFCC0:数学表和功能 3FFCC0~3FFFC0:引导装载功能 3FFFC0~3FFFFF:复位向量以及CPU向量表 唯一能从内部引导ROM操作向量的是位于3FFFC0的复位向量,他是厂家编程的,指向初始化引导函数(InitBoot),该函数用于启动引导操作 3FF000~3FFCC0:数学表和功能 3FFCC0~3FFFC0:引导装载功能 3FFFC0~3FFFFF:复位向量以及CPU向量表 唯一能从内部引导ROM操作向量的是位于3FFFC0的复位向量,他是厂家编程的,指向初始化引导函数(InitBoot),该函数用于启动引导操作 reserved 0x3D 7C00 128-Bit Password
Code Security Module 保护知识产权 用户自定义密码128bit 128-bits = 2128 = 3.4 x 1038 LO SARAM (4K) L1 SARAM (4K) OTP (1K) FLASH (128K) reserved 0x00 8000 0x00 9000 0x00 A000 0x3D 7800 0x3D 8000 128-Bit Password 0x3D 7C00 0x3F 7FF8 - 0x3F 7FFF CSM Password Locations (PWL) 用户自定义密码128bit 映射到存储空间:0x00 0AE0 – 0x00 0AE7 寄存器受到EALLOW保护 128-bits = 2128 = 3.4 x 1038 1次/2cycle 猜测所有的密码需要1.4*10E23 年
C28x Fast Interrupt Response Manager 支持96个独立的中断 直接访问专用RAM(向量表) 自动标志更新 自动现场保护 软件激发(INTR/TRAP) 可屏蔽中断-顺序执行 非屏蔽中断/软立即执行 28x CPU Interrupt logic 28x CPU INTM IFR IER 96 Peripheral Interrupts 12x8 = 96 12 interrupts INT1 to INT12 PIE Register Map PIE module For 96 interrupts T ST0 AH AL PH PL AR1 (L) AR0 (L) DP ST1 DBSTAT IER PC(msw) PC(lsw) Auto Context Save We make claim that this enable faster interrupt response. We want to introduce this notion in chapter 1. Rather than making claim with out reasoning to back up the claim, I have decide to show some technical detail on mechanism that supports this claim. Here is how I would teach this slide: We will have a chapter dedicated to understanding the interrupts structure. The intention of this slide is to give you a quick glimpse into what is available that supports a faster interrupt response. -Q: When you get an interrupt, how quickly do you want to response? How much jitter, and how much response delayed can you tolerate? -A: It depends on what kind of interrupt. -click: The CPU supports 256 vector locations allowing multiple interrupts vectors to be directly services without a software look up table. The intention is to allow quickly service the interrupts without software overhead and time delay via branch instructions. -Q: When the interrupt is serviced, software or hardware manages the flags and context saved & restored? Can these be done with no performance degradation? -A: …. -click: Along with minimizing software overhead, the CPU also automatically manages the flags and context saved while the interrupt ISR instruction filling up the pipeline. We will go into the interrupt structure and its hardware assisted support in a later chapter.
C28x / C24x Modes Mode Type Mode Bits Compiler Option C2xLP Mode 1 1 OBJMODE AMODE C2xLP Mode 1 1 C28x Mode 1 0 C27X (default) 0 0 Reserved 0 1 -v28 -m20 -v28 -v27 1.1.1 Compatibility with other Fixed-Point TMS320 Cores: The C28x DSP features compatibility modes that minimize the migration effort from the C27x and C2xLP cores. The operating mode of the device is determined by a combination of the OBJMODE and AMODE bits in status register 1 (ST1) as shown in Table 1-1. The OBJMODE bit allows you to select between code compiled for a C28x (OBJMODE == 1) and code compiled for a C27x (OBJMODE == 0). The AMODE bit allows you to select between C28x/C27x instruction addressing modes (AMODE == 0) and C2xLP compatible instruction addressing modes (AMODE == 1). OBJMODE AMODE C28x Mode 1 0 C2xLP Source-Compatible Mode 1 1 C27x Object-Compatible Mode+ 0 0 + The C28x is in C27x compatible mode at reset. * C28x Mode: In C28x mode you can take advantage of all the C28x native features, addressing modes and instructions. To operate in C28x mode from reset, your code must first set the OBJMODE bit by using the "C28OBJ" (or "SETC OBJMODE") instruction. This book assumes you are operating in C28x mode unless stated otherwise. * C2xLP Source-Compatible Mode: C2xLP source-compatible mode allows you to run C2xLP source code which has been reassembled using the C28x code generation tools. For more information on operating in this mode and migration from a C2xLP core, refer to Appendices C, D and E. * C27x Object-Compatible Mode: At reset, the C28x core operates in C27x object-compatible mode. In this mode, the C28x is 100% object-code and cycle-count compatible with the C27x core. For detailed information on operating in C27x object-compatible mode and migrating from the C27x, see Appendix F. 1.1.2 Switching to C28x Mode From Reset At reset, the C28x core is in C27x Object-Compatible Mode (OBJMODE == 0, AMODE == 0) and is 100% compatible with the C27x core. To take advantage of the enhanced C28x instruction set, you must instead operate the device in C28x mode. To do this, after a reset your code must first set the OBJMODE bit in ST1 by using the "C28OBJ" (or "SETC OBJMODE") instruction. C24x source-compatible mode: 允许运行C24的代码(重新编译过的) 使用C28代码产生工具 C28x mode: 可以使用C28的所有特征编译手段 如果用户从外存引导就必须是28模式或者C2xLP
Reset – Bootloader Reset Bootloader sets OBJMODE=0 AMODE=0 ENPIE=0 VMAP=1 Bootloader sets OBJMODE = 1 AMODE = 0 XMPNMC=0 (microcomputer mode) Reset vector fetched from boot ROM 0x3F FFC0 Boot determined by state of GPIO pins OBJMODE:选择28、27模式,置位清空流水线 AMODE:寻址模式位,跟PAGE0联合(决定是直接寻址还是堆栈间接寻址) VMAP:向量影响位,决定CPU向量表被映射倒程序存储器的最低还是最高位置:地位0~3fh,高位fffc0~3ffff ENPIE:中断使能,disable(禁止PIE),The reset vector is never fetched from the PIE, even when it is enabled. This vector isalways fetched from boot ROM or XINTF Zone 7 depending on the state of the XMPNMC input signal. Execution Entry Point H0 SARAM
第三部分:C2000 Interrupt
C28x 中断源 C28x CORE 2个不可屏蔽中断 14个可屏蔽中断 (INT1 – INT14) RS NMI INT1 INT2
C28X 复位中断 C28x Core Watchdog Timer RS RS pin active To RS pin 结合看门狗、系统稳定性解释 To RS pin
Reset – Boot Loader Reset Reset vector fetched from XINTF zone 7 Reset vector fetched from boot ROM 0x3F FFC0 XMPNMC=1 (microprocessor mode) Reset OBJMODE=0 AMODE=0 ENPIE=0 VMAP=1 M0M1MAP=1 Reset vector fetched from XINTF zone 7 0x3F FFC0 XMPNMC=0 (microcomputer mode) Boot determined by state of GPIO pins 唯一能从内部引导的ROM种操作的向量是0x3fffc0向量,由厂家编程、指向初始化函数(initboot),所以不管是仿真还是BOOTROM,都需要从0x3fffc0取复位向量 VMAP复位始终为0,复位之后可由软件修改。 XMPNMC外部获取,(2812内部拉低)。在复位时,XMPNMC输入信号被所存(XINTCN2)寄存器的状态位,可由软件修改。 OBJMODE=0 AMODE=0:默认模式,C27X兼容模式 ENPIE:禁止PIE中断 M0M1MAP:复位1,0(厂家测试用),正常操作为1,=1的时候指向M0 SRAM(用户可以在对MO编写分支指令来从引导ROM种获取任何向量,当映射其他向量表的时候MO/M1作为SRMA使用 Execution Bootloading Entry Point Routines FLASH SPI H0 SARAM SCI-A OTP Parallel load Notes: F2810 XMPNMC tied low internal to device XMPNMC refers to input signal MP/MC is status bit in XINTFCNF2 register XMPNMC only sampled at reset
Bootloader 模式 GPIO pins F4 F12 F3 F2 1 x x x flash 0x3F 7FF6,用户必须已经编写了分支指令重定位程序执行 * 0 0 1 0 H0 SARAM 0x3F 8000* 0 0 0 1 OTP 0x3D 7800* 0 1 x x 从外部EEPROM调用SPL_Boot 0 0 1 1 从SCI-A调用SCI-Boot 0 0 0 0 从GPIO B口调用Parallel_Boot * Boot ROM software configures the device for C28x mode before jump
Reset 引导过程 0x3D 7800 OTP (2K) 0x3D 8000 FLASH (128K) 0x3F 8000 0x3F 7FF6 0x3F 8000 H0 SARAM (8K) Execution Entry Point Determined By GPIO Pins 0x3F F000 Boot ROM (4K) XMPNMC=0(BOOTROM)/1(XINTF7),指向3FFFC0取指向Initboot的分支指令(3ffc00),执行bootcode(用户自己编写)根据GPIO方式来确定集中引导模式 Boot Code 0x3F FC00 BROM vector (32) RESET 0x3F FFC0 0x3F FC00 Bootloading Routines (SPI, SCI-A, Parallel Load)
C28X 中断源 内部中断源 C28x CORE 外部中断源 TINT2 TINT1 RS TINT0 NMI EV and Non-EV • EV and Non-EV Peripherals (EV, ADC, SPI, SCI, McBSP, CAN) PIE (Peripheral Interrupt Expansion) 外部中断源 XINT1 XINT2 PDPINTx RS XNMI_XINT13
可屏蔽中断处理过程 C28x Core (IFR) “Latch” Core Interrupt (INTM) 1 (IFR) “Latch” INT1 INT2 INT14 Core Interrupt C28x Core (INTM) “Global Switch” (IER) “Switch” IFR中断标志寄存器 中断使能寄存器(INTM以及IER被使能了才能响应)
中断标志寄存器 (IFR) 中断确定 : IFR Bit = 1 中断未确定 : IFR Bit = 0 RTOSINT DLOGINT INT14 INT13 INT12 INT11 INT10 INT9 8 9 10 11 12 13 14 15 INT8 INT7 INT6 INT5 INT4 INT3 INT2 INT1 1 2 3 4 5 6 7 中断确定 : IFR Bit = 1 中断未确定 : IFR Bit = 0 /*** Manual setting/clearing IFR ***/ extern cregister volatile unsigned int IFR; IFR |= 0x0008; //set INT4 in IFR IFR &= 0xFFF7; //clear INT4 in IFR DINT/EINT,禁止中断 写IFR时产生中断,中断具有优先级 CPU识别中断之后IFR由CPU复位 复位状态为0
中断使能寄存器 (IER) 使能: Set IER Bit = 1 禁止: Clear IER Bit = 0 RTOSINT DLOGINT INT14 INT13 INT12 INT11 INT10 INT9 8 9 10 11 12 13 14 15 INT8 INT7 INT6 INT5 INT4 INT3 INT2 INT1 1 2 3 4 5 6 7 使能: Set IER Bit = 1 禁止: Clear IER Bit = 0 /*** Interrupt Enable Register ***/ extern cregister volatile unsigned int IER; IER |= 0x0008; //enable INT4 in IER IER &= 0xFFF7; //disable INT4 in IER DINT/EINT,禁止中断 复位清零
中断全局使能 INTM ST1 /*** Global Interrupts ***/ Bit 0 INTM用来做全局的使能/禁止中断: 使能: INTM = 0 禁止: INTM = 1 (reset value) INTM只能被汇编语言修改: /*** Global Interrupts ***/ asm(“ CLRC INTM”); //enable global interrupts asm(“ SETC INTM”); //disable global interrupts 由于C2000没有专用的C语言来清除INTM,所有用嵌入式汇编
Peripheral Interrupt Expansion - PIE PIE module for 96 Interrupts INT1.x interrupt group INT2.x interrupt group INT3.x interrupt group INT4.x interrupt group INT5.x interrupt group INT6.x interrupt group INT7.x interrupt group INT8.x interrupt group INT9.x interrupt group INT10.x interrupt group INT11.x interrupt group INT12.x interrupt group INT1.1 INT1.2 INT1.8 1 • INT1 PIEIFR1 PIEIER1 Interrupt Group 1 Peripheral Interrupts 12x8 = 96 96 IFR IER INTM 28x Core 28x Core Interrupt logic INT1 – INT 12 12 Interrupts INT13 (TINT1 / XINT13) INT14 (TINT2) NMI
PIE 寄存器 PIEIFRx register (x = 1 to 12) PIEIERx register (x = 1 to 12) INTx.2 INTx.3 INTx.4 INTx.5 INTx.6 INTx.7 INTx.8 INTx.1 1 2 3 4 5 6 7 15 - 8 reserved PIEIFRx register (x = 1 to 12) INTx.2 INTx.3 INTx.4 INTx.5 INTx.6 INTx.7 INTx.8 INTx.1 1 2 3 4 5 6 7 15 - 8 reserved PIEIERx register (x = 1 to 12) reserved PIEACKx PIE Interrupt Acknowledge Register (PIEACK) 1 2 4 3 5 6 7 8 9 10 11 15 - 12 ENPIE PIEVECT PIECTRL register 15 - 1 需要实现编写DSP28_Device.h(见文档SPRA097) #include “DSP28_Device.h” PieCtrlRegs.PIEIFR1.bit.INTx4 = 1; //manually set IFR for XINT1 in PIE group 1 PieCtrlRegs.PIEIER3.bit.INTx5 = 1; //enable CAPINT1 in PIE group 3 PieCtrlRegs.PIEACK.all = 0x0004; //acknowledge the PIE group 3 PieCtrlRegs.PIECTRL.bit.ENPIE = 1; //enable the PIE
PIE vector generated by config Tool Used to initialize PIE vectors 复位时默认中断向量表 Prio Vector Offset 1 Reset 00 Default Vector Table Remapped when ENPIE = 1 Int 1 Int 2 Int 3 Int 4 Int 5 Int 6 Int 7 Int 8 Int 9 Int 10 Int 11 Int 12 Int 13 Int 14 02 04 06 08 0A 0C 0E 10 12 14 16 18 1A 1C 1E 20 22 24 26 28-3E 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Memory PIE Vectors 256 W 0x00 0D00 BROM Vectors 64 W 0x3F FFC0 4 2 3 DlogInt RtosInt EmuInt NMI 0x3F FFFF PIE vector generated by config Tool Used to initialize PIE vectors - Illegal User 1-12
PIE Vector Mapping (ENPIE = 1) PIE vector address PIE vector Description Not used 0x00 0D00 Reset Vector Never Fetched Here Vector name INT1 0x00 0D02 INT1 re-mapped below …… …… …… re-mapped below INT12 0x00 0D18 INT12 re-mapped below INT13 0x00 0D1A XINT1 Interrupt Vector INT14 0x00 0D1C Timer2 – RTOS Vector Datalog 0x00 0D1D Data logging vector …… …… …… USER11 0x00 0D3E User defined TRAP INT1.1 0x00 0D40 PIEINT1.1 interrupt vector …… …… …… INT12.1 0x00 0DF0 PIEINT12.1 interrupt vector INT1.8 0x00 0D4E PIEINT1.8 interrupt vector INT12.8 0x00 0DFE PIEINT12.8 interrupt vector INT1~INT14:优先级5~16,组内优先级从.1~.9 PIE向量表中的所有位置都受EALLOW保护,配置需要使用EALLOW指令;DSP/BIOS使用向量ID;复位向量总是取自BOOT ROM 或者XINTF7区的OX3fffc位置 PIE vector space - 0x00 0D00 – 256 Word memory in Data space RESET and INT1-INT12 vector locations are Re-mapped CPU vectors are remapped to 0x00 0D00 in Data space
F2812/10 PIE Interrupt Assignment Table INTx.8 INTx.7 INTx.6 INTx.5 INTx.4 INTx.3 INTx.2 INTx.1 INT1 WAKEINT TINT0 ADCINT XINT2 XINT1 PDPINTB PDPINTA INT2 T1OFINT T1UFINT T1CINT T1PINT CMP3INT CMP2INT CMP1INT INT3 CAPINT3 CAPINT2 CAPINT1 T2OFINT T2UFINT T2CINT T2PINT INT4 T3OFINT T3UFINT T3CINT T3PINT CMP6INT CMP5INT CMP4INT INT5 CAPINT6 CAPINT5 CAPINT4 T4OFINT T4UFINT T4CINT T4PINT INT6 MXINT MRINT SPITXINTA SPIRXINTA INT7 INT8 INT9 SCITXINTB SCIRXINTB SCITXINTA SCIRXINTA ECAN1INT ECAN0INT INT10 INT11 INT12
Device Vector Mapping - Summary RESET Reset Vector <0x3F FFCO> = Boot-ROM Code Flash Entry Point <0x3F 7FF6 > = LB _c_int00 User Code Start < _c_int00 > MPNMC = 0 (on-chip ROM memory) Reset Vector <0x3F FFCO> = _c_int00 User Code Start < _c_int00> MPNMC = 1 (external memory XINTF) _c_int00: . . . CALL main() Initialization ( ) { EALLOW Load PIE Vectors Enable the PIEIER Enable PIECTRL Enable Core IER Enable INTM EDIS } 1、MPNMC=0/1,最后都需要指向INTI BOOT(INT00)起始地址 2、PIE Vector、PIEIER、PIECTRL、Core IER、INTH都受EALLOW保护 main() { initialization(); . . . } PIE Vector Table 256 Word RAM 0x00 0D00 – 0DFF
中断响应过程 CPU 动作 描述 寄存器PUSH 堆栈 14 个寄存器被自动保存(..) 0 ® IFR (bit) 请IFR位 0 ® IER (bit) 清IER位 1 ® INTM/DBGM 禁止全局中断/Debug 事件 Vector ® PC 加载中断向量表给PC指针 Clear other status bits 清 LOOP, EALLOW, IDLESTAT LOOP: Use in LOOPZ and LOOPNZ instructions. This bit is set when the instruction is still active. EALLOW: Emulation allow. This bit is set to allow retime debugger feature. IDLESTAT: Another bit use in emulation. 外部中断相应时间:16 CYCLE 内部中断响应时间:14 CYCLE T ST0 AH AL PH PL AR1 AR0 DP ST1 DBSTAT IER PC(msw) PC(lsw)
第四部分:C2000 内存映射/BOOTROM
TMS320F2812 内存映射 MO SARAM (1K) M1 SARAM (1K) LO SARAM (4K) 数据 | 程序 数据 | 程序 0x00 0000 MO SARAM (1K) M1 SARAM (1K) reserved 0x00 0400 0x00 0800 reserved PF 0 (2K) PF 1 (4K) PF 2 (4K) PIE vector (256) ENPIE=1 0x00 0D00 XINT Zone 0 (8K) 0x00 2000 0x00 1000 XINT Zone 1 (8K) 0x00 4000 0x00 6000 0x00 7000 0x00 8000 LO SARAM (4K) L1 SARAM (4K) reserved 0x00 9000 0x08 0000 XINT Zone 2 (0.5M) XINT Zone 6 (0.5M) 0x00 A000 reserved 0x10 0000 0x3D 7800 OTP (1K) FLASH (128K) 0x3F FFC0 2种映射方式、HO引导(DEC2812),PIE向量的获取(除B ROM) Zone0、Zone1共用XZCS0ANDCS1,采用不同的内部地址.0:20000~3ffff;1:40000~5ffff Zone2/Zone6共享外部地址总线,访问首地址,地址总线为00000,末地址,地址总线fffff,区别在于片选信号不同.2:xzcs2;6:ZXCX6ANDCS7 Zone6、Zone7共用XZCX6ANDCS7,Zone7影响Zone6的高16K 每个区都用不同的等待状态、建立、保持事件来编程 0x18 0000 0x3D 7C00 reserved 0x3D 8000 reserved 128-Bit Password 0x3F 8000 HO SARAM (8K) 0x3F A000 reserved XINT Zone 7 (16K) MP/MC=1 XINT Vector-RAM (32) MP/MC=1 ENPIE=0 0x3F C000 0x3F F000 Boot ROM (4K) MP/MC=0 0x3F FFC0 MP/MC=0 ENPIE=0 BROM vector (32)
TMS320F2812片内ROM MAP 段地址 程序数据空间 0x3F F000 – 0x3F F501 0x3F F834 – 0x3F F9E7 0x3F F9E8 – 0x3F FB4F 0x3F FB50 – 0x3F FBFF 0x3F FC00 – 0x3F FFBF 0x3F FFC0 – 0x3F FFC1 0x3F FFC2 – 0x3F FFFF 程序数据空间 正弦/余弦; 641 x 32(Q30) 规格化翻转; 264 x 32(Q29) 规格化平方根;145 x32(Q30) 规格化ACTAN; 218 x32(Q30) 圆整和饱和度. 180 x 32(Q30) 保留 2812片内4Krom由厂家编入了引导装载程序和 引导装载函数;版本号、发布的函数及检验信息;复位向量;CPU向量表(为了测试);数学表 引导装载功能,ROM版本… 复位向量表; 2 x 16 初始化向量; 62 x 16
C28x 初始化引导汇编程序 Init Boot RESET 初始化器件: OBJMODE = 1 AMODE = 0 M0M1MAP = 1 DP = 0 OVM = 0 SPM = 0 SP = 0x00 0400 Dummy Read CSM passwords Call BootModeSelect 复位后第一个调用的程序是初始化汇编引导程序(initboot),这个程序把器件初始化未C28的操作模式。下一步进行代码安全模块CSM的一次假读。如果该密码被清除(FFFF),则影响CSM的解锁,否则则假读无效。如果有一个器件想要进行引导装载,那么上述操作时是有效的。 在假读完CSM密码后,初始化引导程序调用引导模式选择函数。这个函数决定将使用何种引导模式,而引导模式由GPIO引导的状态决定。一旦引导操作完成,引导模式选择函数将入口地址(Flash:3F7FF6;HO:0X3F8000;OTP:3D7800传递给初始化引导函数。初始化引导函数调用推出引导函数 ExitBoot
Flash 的启动顺序 C – start routine 0x3D 8000 _c_int00 Boot.asm FLASH (128K) “rts2800_ml.lib” 4 0x3F 7FF6 LB _c_int00 Passwords (8) 5 0x3F 8000 H0 SARAM (8K) 3 “user” code sections main ( ) 0x3F F000 Boot ROM (4K) { 1、取位于BOOT ROM/XINTF7的复位向量 2、复位向量(0X3FFFC0)含有分支指令InitBoot(0X3FFC00) 3、 (0X3FFC00)位于片内Bootroom内、引导装载函数 4、扫描GPIO确定何种引导模式 5、跳转到Flash-0X3F7FF6(具有跳转指令LB重新定位指令执行) 0x3f7ff8 flash pass 6、转入用户执行程序 Boot Code …… 0x3F FC00 return; {SCAN GPIO} 2 } BROM vector (32) 0x3F FFC0 0x3F FC00 1 RESET
F2812 Flash Memory Map 0x3D 8000 – 0x3D 9FFF Sector J ; 8K x 16 Address Range 0x3D 8000 – 0x3D 9FFF 0x3D A000 – 0x3D BFFF 0x3D C000 – 0x3D FFFF 0x3E 0000 – 0x3E 3FFF 0x3E 4000 – 0x3E 7FFF 0x3E 8000 – 0x3E BFFF 0x3E C000 – 0x3E FFFF 0x3F 0000 – 0x3F 3FFF 0x3F 4000 – 0x3F 5FFF 0x3F 6000 – 0x3F 7F7F 0x3F 7F80 – 0x3F 7FF5 0x3F 7FF6 – 0x3F 7FF7 0x3F 7FF8 – 0x3F 7FFF Data & Program Space Sector J ; 8K x 16 Sector I ; 8K x 16 Sector H : 16K x 16 Sector G ; 16K x 16 Sector F ; 16K x 16 Sector E ; 16K x 16 Sector D; 16K x 16 Sector C ; 16K x 16 Sector B ; 8K x16 0x3F 7FF6 – 0x3F 7FF7 :LB、INTOO,有分支跳转指令 For code security operation, all addresses between 0x3F7F80 and 0x3F7FF5 cannot be used as program code or data, but must be programmed to 0x0000 when the Code Security Password is programmed. If security is not a concern, then these addresses may be used for code or data. Sector A ; (8K-128) x16 Program to 0x0000 when using Code Security Mode ! Flash Entry Point ; 2 x 16 Security Password ; 8 x 16
2-level deep fetch buffer 加速 Flash 执行速度-流水线 16 or 32 dispatched 16 64 Aligned 64-bit fetch 2-level deep fetch buffer C28x Core decoder unit Flash Pipeline Enable 0 = disable (default) 1 = enable ENPIPE reserved 15 1 FOPT @ 0x00 0A80 FOPT寄存器中的ENPIPE控制FLASH流水线模式,该模式独立于CPU流水线。在该模式下面使用了预取机制,减少了Flash等待状态对整个代码执行过程的影响,使用该技术能够大大加快Flash执行效率 1、150M是指运行在RAM中的速度 2、预取指令队列为2级64bit深度buffer(可以理解为FIFO) 3、取16bit(4次)/32(2次)进行指令打包(针对大部分C28指令16bit,需要4条指令一起取) 4、在执行其中一级buffer的时候,Buffer仅可能进行另一层的指令预取 5、在PC不连续的会被中断(CALL/LANCH/LOOP/BANZ)
CCS编程插件
Code Security Module (CSM) 受CSM保护的存储区:L0、L1、OTP、Flash 在受保护区域里面运行的程序才能读写限制区的数据 任何其他的数据读写都被拒绝: JTAG 调试, ROM 引导, 运行在片外或者片内非保护区的程序 LO SARAM (4K) L1 SARAM (4K) OTP (1K) FLASH (128K) reserved 0x00 8000 0x00 9000 0x3D 7800 0x3D 8000 0x00 A000 0x3D 7C00
CSM Registers Key Registers(EALLOW protected) Address Name Reset Value Description 0x00 0AE0 KEY0 0xFFFF 128位KEY寄存器的低位字 0x00 0AE1 KEY1 0xFFFF 128位KEY寄存器的第二个字 0x00 0AE2 KEY2 0xFFFF 。。 0x00 0AE3 KEY3 0xFFFF 。。 0x00 0AE4 KEY4 0xFFFF 。。 0x00 0AE5 KEY5 0xFFFF 。。 0x00 0AE6 KEY6 0xFFFF 。。 0x00 0AE7 KEY7 0xFFFF 128位KEY寄存器的高位字 0x00 0AEF CSMSCR 0xFFFF CSM 状态与控制寄存器 Key Registers(EALLOW protected) Address Name Reset Value Description 0x3F 7FF8 PWL0 user defined 128位密码的低位字 0x3F 7FF9 PWL1 user defined 。。 0x3F 7FFA PWL2 user defined 。。 0x3F 7FFB PWL3 user defined 。。 0x3F 7FFC PWL4 user defined 。。 0x3F 7FFD PWL5 user defined 。。 0x3F 7FFE PWL6 user defined 。。 0x3F 7FFF PWL7 user defined 128位密码的高位字 PWL in memory – reserved for passwords only CSMSCR的bit.15为控制位FORCESEC,bit.0状态位SECURE。当FROCESCE=1,将会复位KEY寄存器和CSM内部逻辑,这样密码匹配流被执行,使器件不受保护。芯片复位会使器件重新受保护。 PMF的执行被需在读写对安全存储器操作之前。 1、带代码安全的器件:带代码安全的器件有一个预先确定的密码保存在PWL中,它在存储器中的位置为0x3F7FF8-0X3F7FFF. 执行对PWL的哑读 想KEY0~KEY7写入密码 2、不带代码安全的器件:在PWL保存的数值为FFFFFFFFFFFFFFFFFFFFFFFFF
CSM的安全解锁 上电或者复位的时候CSM被锁的 CSM的解锁: 新的Flash器件 (PWL 都是 0xFFFF): 往8个KEY寄存器写入正确的密码 新的Flash器件 (PWL 都是 0xFFFF): 对PWL进行一次读写,使得器件工作在非锁定模式 volatile int *CSM=0x000AE0; volatile int *PWL=0x3F7FF8; volatile int tmp; Int I; //哑读密码位置8次 For (i=0;i<8;i++) tmp=PWL++; //让KEY寄存器写密码 Asm(“ EALLOW”) *CSM++=PAWWWORD0; …… *CSM++=PAWWWORD7; Asm (“EDIS”) 新的Flash器件 (PWL 都是 0xFFFF):对PWL进行一次读写,使得器件工作在非锁定模式
C28x SCI 引导函数 RS 232 e.g. Texas C28x MAX232 SCI-A Host/ e.g. PC‘s COM1 TxD RxD 3 2 代码从SCIA或者XINTF传输到内部 仅支持8位的输入数据流 SCI自动波特率特性 较低波特率(防止自锁) 1、
C28x 并行引导函数 C28x GPIO Host/ e.g. PC‘s COM1 1 2 3 4 5 6 GPIO-D6 16 GPIO-B0..B15 GPIO-D5 1: GPIO6拉低表示准备好接受数据 2: 主机拉低GPIO5拉低通知DSP数据准备好,DSP的Bootloader等待主机将数据发送到GPIOB 3: DSP拉高GPIO6通知主机完成读操作 4: DSP等待主机拉高GPIO5确认DSP操作 5: DSP拉低GPIO6指示传送更多的数据 1、从GPIO B口/XINTF接受数据,8/16bit,如果接受的是8bit,则2次8bit数据打包,先读取LSB,再读取MSB 2、通过GPIO D5/D6与主机通信,按照协议传输 GPIO-D6 GPIO-D5 1 2 3 4 5 6
C28x SPI Boot Loader Function Serial EEPROM DIN DOUT CLK /CS C28x SPI SPI - MOSI SPI - SOMI SPI - CLK GPIO – F3 ST M95080 – see Module 7 1、支持8bit宽度,不支持16bit宽度 2、Boot ROM的数据必须被放在0地址
第五部分:F2812事件管理器(EVA/B)
EV Control Registers / Logic 事件管理器功能框图 (EVA) Reset PIE 2 TCLKINA / TDIRA / EV Control Registers / Logic ADC Start Output Logic GP Timer 1 Compare GP Timer 1 GP Timer 2 Compare GP Timer 2 T1PWM_T1CMP PWM1 Compare Unit 1 Compare Unit 2 Compare Unit 3 PWM Circuits Output Logic PWM2 PWM3 Data Bus PWM4 PWM5 PWM6 Output Logic 2个GP定时器;3个比较单元;3个捕捉单元;3个QEP通道;外部定时器输入(定时器方向TDIRA、外部时钟TCLINA);ADCSOC触发输出; GP1定时器能可以为所有的比较和PWM电路提供时基,这些比较单元通过可编程死区电路可以差生6个比较输出或者PWM波形输出,6个输出种的任何一个输出状态都可单独设置。比较单元的比较寄存器是双缓冲的,允许可编程的变换比较/PWM脉冲宽度;GP1和GP2可以步骤电路与正交脉冲计数提供时基;双缓冲的周期和比较寄存器允许可编程的变化定时器(PWM)的周期,从而得到PWM的宽度(2路);QEP:当一个时钟用于QEP电路时,QEP电路将产生定时器始终和计数方向(不能被GP的Prescale定标,通常为1,是每个QEP输入通道的4倍 T2PWM_T2CMP QEP Circuit CLK DIR MUX Capture Units • CAP1/QEP1 CAP2/QEP2 CAP3/QEPI1 • •
通用定时器GP的功能框图 Compare Register Clock Prescaler 16 - Bit Timer Counter Internal (HSPCLK) TxCMPR . 15 - 0 TPS 2-0 TxCON . 10 - 8 Compare Register Shadowed Clock Prescaler TxCNT . 15 - 0 GPTCONA M U X 16 - Bit Timer Counter Compare Logic Output Logic TxPWM_ TxCMP External (1/4) QEP TCLKS 1-0 TxCON . 5 - 4 External:TCLKINA/B,最大频率为器件自身时钟的1/4;带有方向的输入TDIRA/B,用于GP定时器的增/减计数模式 QEP:当一个始终用于QEP电路时,QEP电路将产生定时器始终和计数方向 MUX:驱动ADC SOC输出 TxCON:配置使用外部时钟还是内部时钟(TCLKS);配置8种预定标因子的那一种(TPS);定时器重载之后进入那种状态;定时器禁止以及使能;周期定时器采用GP1、GP2还是自身周期寄存器(EVA) GPTCONA/B:在不同的定时器事件中完成操作的定时器,并且确定GP定时器的计数方向 GP的比较寄存器:不断与TxCNT比较,一旦发生匹配产生以下情况(1、与比较输出相关的引脚产生一个变化,取决于GPTCONA/B-TxCMPOE位是否比较输出)2、相应的中断标志位置位(通过PIE管理) GP周期寄存器:决定定时器的周期,当定时器的值在周期寄存器和定时器计数器匹配时,GP定时器复位为0还是相反方向计数取决与定时器处于那种模式 定时器的双缓冲比较和周期寄存器:TxPR和TxCMPR都是带有阴影的,一个周期的任何时刻都可以向它写入,同时会写入相关的阴影寄存器。对于比较寄存器,只有TxCON指定的事件发生时,阴影寄存器才被写入工作寄存器。对于周期寄存器,只要TxCON为0才被写入。双缓冲功能在一个周期内的任何时刻为周期和比较寄存器提供应用代码,这样可以在一个周期已经开始的情况下改变定时器的周期和PWM脉冲的宽度。如果在产生PWM的运行当中改变定时器的周期值也就是实时改变PWM的CARRIER频率。 GP定时器的输出:由GPTCONA/B的TxPN位决定高/低电平(强制) Period Register Shadowed Note: x = 1 or 2 TxPR . 15 - 0
(Used for Asymmetric PWM Waveforms) GP 连续增计数模式 (Used for Asymmetric PWM Waveforms) This example: TxCON.3-2 = 00 (下溢时 TxCMPR重载) TxPR = 3 TxCMPR = 1 (initially) Prescale = 1 无延迟计数 计数值= TxPR+1 CPU writes a 2 to compare reg. buffer anytime here TxCMPR=2 3 3 3 2 1 1 该模式下面GPTCONA/B中的计数方向位为1,在很多马达和运动控制系统中,GP的连续计算模式适用于产生异步PWM波形和采样周期。 TxPWM/TxCMP:驱动引脚输出 TxPR:驱动计数的最大值 TxCON:设定TxCMPR的输出间隔 匹配延迟一个周期后产生输出 TxCNT Reg. TxPWM/TxCMP (active high) CPUCLK
(Used for Symmetric PWM Waveforms) GP 连续增/减计数模式 (Used for Symmetric PWM Waveforms) This example: TxCON.3-2 = 01 (==00/PR.reg) TxPR = 3 TxCMPR = 1 (initially) Prescale = 1 无延迟增减 增减计数周期 is 2*TxPR TxCMPR =1 TxCMPR =2 TxCMPR =1 PR.reg 3 PR.reg 3 2 2 2 2 1 1 1 1 匹配产生一个周期后 00 TxCNT Reg. 00 TxPWM/TxCMP (active high) CPUCLK
PWM比较输出和中断 2T T T T PR。reg= Comp1 PR。reg= Comp2 定时器计数值 PWM周期 #2 新周期自动加载 PR。reg= Comp1 PR。reg= Comp2 TxCON.3-2= 00 PR=Comp1 2T PWM周期 #1 定时器计数值 T T T Comp2 Comp1 TxCMP/TxPWM (active high) TxCMP/TxPWM (active low) 初始值:TxCON.3-2=00、PR.reg=comp1 t-=4T:PR.reg=comp2(过0加载),注意第三周期的波形 第四个周期:PR=2T, PR.reg=comp2,注意波形 下溢中断出现在过0,周期中断出现在过周期寄存器设置的数值;比较中断出现比较寄存器时刻 ACTIVE HIGH:TxPIN设置位高电平运行 ACTIVE LOW: TxPIN设置位低电平运行 比较中断 周期中断 下溢中断
GP 定时器寄存器 EVA EVB Register Address Description GPTCONA 0x007400 GP 控制寄存器A T1CNT 0x007401 定时器1计数寄存器 T1CMPR 0x007402 定时器1比较寄存器 T1PR 0x007403 定时器1周期寄存器 T1CON 0x007404 定时器1控制寄存器 T2CNT 0x007405 定时器2计数寄存器 T2CMPR 0x007406 定时器2比较寄存器 T2PR 0x007407 定时器2比较寄存器 T2CON 0x007408 定时器2控制寄存器 GPTCONB 0x007500 GP 控制寄存器B T3CNT 0x007501 定时器3计数寄存器 T3CMPR 0x007502 定时器3比较寄存器 T3PR 0x007503 定时器3周期寄存器 T3CON 0x007504 寄存器3控制寄存器 T4CNT 0x007505 定时器4计数寄存器 T4CMPR 0x007506 定时器4比较寄存器 T4PR 0x007507 定时器4周期寄存器 T4CON 0x007508 定时器4控制寄存器 EVA EVB EXTCONA 0x007409 / EXTCONB 0x007509 ;外部控制寄存器
EV Control Registers / Logic EVA全比较单元 Reset PIE 2 / TCLKINA / TDIRA EV Control Registers / Logic ADC Start Output Logic GP Timer 1 Compare T1PWM_T1CMP GP Timer 1 • PWM1 Compare Unit 1 Compare Unit 2 Compare Unit 3 PWM Circuits Output Logic PWM2 PWM Circuits PWM3 Data Bus Output Logic PWM4 PWM Circuits Output Logic PWM5 PWM6 Output Logic GP Timer 2 Compare GP Timer 2 T2PWM_T2CMP CLK QEP Circuit MUX DIR Capture Units • CAP1/QEP1 • CAP2/QEP2 • CAP3/QEPI1
什么是PWM ? PWM (脉宽幅度调制) PAM(脉冲幅度调制) 固定的载波频率 固定的放大系数 脉冲宽度正比于瞬时放大系数 能量损失趋于0 PAM(脉冲幅度调制) 固定的宽度,变化的幅值
PWM 信号调制 t Original Signal same areas (energy) T t PWM PAM T t
? PWM Motor控制的优势 Unknown Gate Signal Gate Signal Known with PWM 功率转换器件是晶体管 在线性区难以控制 在饱和区容易控制 PWM是数字信号,容易在DSP实现 DC Supply DC Supply ? PWM Desired signal to motor phase PWM approx. of desired signal Unknown Gate Signal Gate Signal Known with PWM
非对称 PWM 波形 Tpwm / Tcmp Pin (active high) Period Compare Counter 非对称方式可以由连续增计数实现 Caused by Period match (toggle output in Asym mode only) Caused by Compare match
对称PWM 波形 Period Compare Counter Period Compare Counter TPWM TPWM /TCMP Pin (active high) Interrupts Period Compare Counter General Purpose Timer TPWM/TCMP Pin Full Compare Units PWM1 PWM2 PWM3 PWM4 PWM5 PWM6
电源逆变器 + - 串联的2个器件不能同时 被关闭,不能有重叠区 PWM信号的输入 DC 电容 三相输出作为控制信号 功率器件
死区的产生 supply rail 互补的PWM开关信号 to motor phase 晶体管导通比截止快 同时导通的瞬间-短路
可编程死区模块 (EVA) 非对称PWM Prescaler Clock PHx PHx edge detect 4-bit Counter DT 死区 Clock DTPHx 非对称PWM DTPHx_ HSPCLK DBTCONA . 4 - 2 PHx edge detect ENA 4-bit Counter reset comparator DT 输入:PHX(X=1、2、3)来自比较单元的非对称波形发生器 输出:DPHX/DPHX_,与PHX对应 对应每个输入信号PHX,都会产生2个输出信号DTPHX和DTPHX_。当比单元和他们相关的输出的死区被禁止时,这2个信号是一样的。当比较单元被使能时,2个信号的边沿变化被称作死区的事件间隔分隔开。 4-bit period DBTCONA . 11 - 8 DTPHx DTPHx_
死区定时器控制器 (EVA) DBTCONA @ 0x007415 dead time = DB period * DB prescaler * CPUCLK period DB Timer Period 15 14 13 12 11 10 9 8 reserved reserved reserved reserved DBT3 DBT2 DBT1 DBT0 7 6 5 4 3 2 1 EDBT3 EDBT2 EDBT1 DBTPS2 DBTPS1 DBTPS0 reserved reserved DB Timer Period:定义了3个4位的减法寄存器周期值 DB Timer Enable:死区定时器使能位 DB Timer Prescaler 000 = 1 100 = 16 001 = 2 101 = 32 010 = 4 110 = 32 011 = 8 111 = 32 DB Timer Enable 0 = disable 1 = enable
EV Control Registers / Logic 捕获单元功能模块 (EVA) Reset PIE 2 / TCLKINA / TDIRA EV Control Registers / Logic ADC Start Output Logic GP Timer 1 Compare GP Timer 1 T1PWM_T1CMP • PWM1 Compare Unit 1 Compare Unit 2 Compare Unit 3 PWM Circuits Output Logic PWM2 PWM3 Data Bus PWM4 PWM5 PWM6 Output Logic GP Timer 2 Compare GP Timer 2 介绍捕获单元的作用:AD采样、FFT频率锁定、脉宽测量等等 T2PWM_T2CMP CLK QEP Circuit MUX DIR Capture Units • CAP1/QEP1 • CAP2/QEP2 • CAP3/QEPI1
. 捕获单元功能框图 (EVA) Can latch on: rising edge falling edge both GP Timer 1 Counter T1CNT . 15 - 0 GP Timer 2 Counter T2CNT . 15 - 0 Can latch on: rising edge falling edge both CAPCONA . 14 -12 CAPCONA . 10 - 9 MUX CAP3TOADC Enable CAPCONA . 8 . ADC Start (CAP 3) Edge Detect 3 TTL Signal min. valid width: 2 CPUCLK lo 2 CPUCLK hi / CAP1,2,3 EVA:捕获单元3有跟1、2不同的时基,使得在同一时刻,Unit 3使用一个时基,Unit2、1使用另外一个定时器时基 捕捉设置 1、初始化CAPFIFOX并清楚相应的操作位 2、把选用的定时器设定为某种操作模式 3、如果需要,设置相关的定时器比较寄存器或定时器周期寄存器 4、相应的设置CAPCONA或CAPCONB 第一次捕捉假定FIFO空,把计数器的当前计数值写入FIFO上层,相应状态位为01,如果在另一次捕捉前读取FIFO,则01-》00 第二次捕捉:新的计值被送入底层,01-》10,如果在下一次写入前读取fifo值,则10-》01,第二次写入的值被移到上层 第三次捕捉:如果前面2次的捕捉还没有读,则上层溢出,底层被推入到上层,状态为11 2-Level Deep Edge Select RS FIFO CAPCONA . 7 - 2 CAPRESET CAPxFIFO Status CAPCONA . 15 CAPFIFOA . 13 - 8
什么是正交编码器? /4 相位差 间隔空隙 /4 LED Ch. A Ch. B shaft rotation Incremental Optical Encoder Quadrature Output from Photo Sensors
EV Control Registers / Logic 正交编码单元功能框图 (EVA) Reset PIE 2 / TCLKINA / TDIRA EV Control Registers / Logic ADC Start Output Logic GP Timer 1 Compare GP Timer 1 T1PWM_T1CMP • PWM1 Compare Unit 1 Compare Unit 2 Compare Unit 3 PWM Circuits Output Logic PWM2 PWM3 Data Bus PWM4 PWM5 PWM6 Output Logic GP Timer 2 Compare GP Timer 2 T2PWM_T2CMP CLK QEP Circuit MUX DIR Capture Units • CAP1/QEP1 • CAP2/QEP2 • CAP3/QEPI1
如何通过正交信号来决定位置? Position resolution is /4 degrees. increment counter decrement counter (00) (11) (A,B) = 00 01 11 10 (10) (01) Quadrature Decoder State Machine Ch. A 正交编码脉冲电路是具有90度固定相移和可变频率的2个脉冲序列。当光编码器和电机转轴产生AEP时,通过检测2个脉冲的先后顺序可以确定电机的旋转方向,通过检测脉冲个数和频率恶意确定旋转角度 Ch. B
. . 正向编码连接 (EVA) QEP decoder logic GP Timer 2 Ch. A Ch. B CAP1/QEP1 Index CLK DIR CAP3/QEPI GP Timer 2 selected as pulse counter Timer Prescaler bypassed (i.e. Prescale always 1) QEPIQUAL 定时器2位EVA的AEP电路提供时基。定时器必须处于单增/减计数模式并使用QEP电路作为时钟源。 QEPIE GP Timer 2
第五部分:F2812模/数转换器(ADC)
ADC模块的特点 12位的分辨率,内置双采样-保持器(S/H) 16路模拟输入 (0~3V) 2个模拟输入复选器 每通道8路模拟输入 2个采样/保持单元 (每路一个) 串行、并行2种采样工作模式 自动序列化 – 在单一时间段内提供16通道的自动AD转换 2个独立的8通道序列化 “双序列化模式” “级联模式” 16个独立的结果转换寄存器(分别设定地址)保存转换结构 多触发源启动序列转换(SOC): 外部触发、软件直接启动、事件管理器A/B、外部引脚
ADC功能框图 (级联模式) . . . ... 12-bit A/D Converter Auto sequencer 模拟 MUX Result Select Result MUX RESULT0 . . . RESULT1 RESULT2 RESULT15 CHSEL00 (state 0) CHSEL01 (state 1) CHSEL02 (state 2) CHSEL03 (state 3) CHSEL15 (state 15) ... MAX_CONV1 Auto sequencer Start Sequence Trigger SOC EOC Software EVA EVB Ext Pin (ADCSOC) 模拟 MUX MUX A ADCINA0 ADCINA1 ADCINA7 B ADCINB0 ADCINB1 ADCINB7 S/H AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x3;. AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x2; CONV00~CONV15 在序列采样模式下面,CONVnn的4位MSB定义输入引脚,低3位定义了偏移量。并发采样模式下,MSB舍弃。 每个序列转换选择的模拟输入通道由CONVnn定义,他们位于ADC输入通道选择序列寄存器(ADCCHSELSEQn)内。CONVnn是一个4位的域,对用于转换的16通道中任何一个通道进行说明。当使用级联方式时,最大转换通道数为16. CONVnn的数值是跟Result对应的,例如 如果conv00=3,conv01=2,那么转换完后result0/1是否存放着3/2通道的值 (CONVxx 表示先后,CONV数值表示通道) 如果conv00=4,conv01=3,则result种存放4/3通道的值,先转换通道4、再转换通道3 第一个结果放在result0,第二个结果放在result1
ADC功能框图 (双序列模式) . . . ... 12-bit A/D Converter SEQ1 SEQ2 Software EVA Ext Pin (ADCSOC) Result Select Result MUX RESULT0 . . . RESULT1 RESULT7 RESULT8 RESULT9 RESULT15 CHSEL00 (state 0) CHSEL01 (state 1) CHSEL02 (state 2) CHSEL07 (state 7) ... MAX_CONV1 Auto sequencer Start Sequence Trigger SOC1/ EOC1 SEQ1 CHSEL08 (state 8) CHSEL09 (state 9) CHSEL10 (state 10) CHSEL15 (state 15) MAX_CONV2 SEQ2 Sequencer Arbiter SOC2/ EOC2 EVB Analog MUX MUX A ADCINA0 ADCINA1 ADCINA7 B ADCINB0 ADCINB1 ADCINB7 S/H SEQ1:CONV00~CONV01 SEQ2:CONV08~CONV15 SEQ:CONV00~CONV15
ADC 示例 AdcRegs.ADCTRL3.bit.SMODE_SEL=1;设置并发模式 AdcRegs.ADCMAXCONV.all = 0x0001; 双重序列发生器2*4=8 ADCCHSELSEQ1.bit.CONV00=0x4;设置ADCINA4和ADCINB4的转换次序(第一) ADCCHSELSEQ1.bit.CONV01=0x0;设置ADCINA0和ADCINB0的转换次序(第二) 。。。 ADCCHSELSEQ3.bit.CONV10=0x6;设置ADCINA6和ADCINB6的转换次序(第11) ADCCHSELSEQ3.bit.CONV11=0x7;设置ADCINA7和ADCINB7的转换次序(第11) Result结果 ADCINA4-》ADCRESULT0 ADCINB4-》ADCRESULT1 。。。。 ADCINA7-》ADCRESULT14 ADCINB7-》ADCRESULT15
F2812 ADC 时钟电路 ADCCLKmax=25 MHz! CLKIN (30 MHz) PLLCR DIV bits HISPCP HSPCLK bits 000b SYSCLKOUT (150 MHz) HSPCLK (150 MHz) To CPU PCLKCR.ADCENCLK = 1 ADCCLKPS bits ADCTRL3 0011b CPS bit ADCTRL1 0b FCLK (25 MHz) ADCCLK (25 MHz) To ADC pipeline ACQ_PS bits ADCTRL1 0111b 外部时钟通过PLLCR倍频之后i出来150M的时钟,一部分驱动CPU,一部分输入HISPCP ADCTRL3寄存器的ADCCLPS3`0位对外设时钟HSPCLK分频 通过扩展采样周期,ADC可以适应有源阻抗的变化。由ADCCTRL1寄存器中的ACQ_PS3~0位来控制,这些位不会印象S/H和转换过程,但是通过扩展SOC脉冲,扩展了采样部分的时间长度。 HISPCP=高速外设适中定标器 sampling window FCLK = HSPCLK/(2*ADCCLKPS) ADCCLK = FCLK/(CPS+1) ADCCLKmax=25 MHz! sampling window = (ACQ_PS + 1)*(1/ADCCLK)
ADC输入通道选择序列控制寄存器 设置转换序列的通道以及先后顺序 Bits 15-12 Bits 11-8 Bits 7-4 Bits 3-0 0x007103 CONV03 CONV02 CONV01 CONV00 ADCCHSELSEQ1 0x007104 CONV07 CONV06 CONV05 CONV04 ADCCHSELSEQ2 0x007105 CONV11 CONV10 CONV09 CONV08 ADCCHSELSEQ3 0x007106 CONV15 CONV14 CONV13 CONV12 ADCCHSELSEQ4 设置转换序列的通道以及先后顺序
EVA SOC 停止/启动方式 前提: EVA下溢启动3个ADC I1/I2/I3; 定时器周期SOC3个ADC V1/V2/V3 Timer 1 PWM 前提: EVA下溢启动3个ADC I1/I2/I3; 定时器周期SOC3个ADC V1/V2/V3
EVA SOC 停止/启动方式 MAX_CONV1 =2(bit.3舍弃),转换顺序设置如下: Bits 15-12 11-8 7-4 3-0 0x007103 V1 I3 I2 I1 ADCCHSELSEQ1 0x007104 x x V3 V2 ADCCHSELSEQ2 复位和初始化之后,等待SOC 触发 第一次触发(2: CONV00 (I1), CONV01 (I2), CONV02 (I3) SEQ1 等待第二次触发 第二次触发执行: CONV03 (V1), CONV04 (V2), CONV05 (V3) 第二次触发结束, ADC Results(在连续模式,为了避免数据重写,必须确保 在下一个转换序列开始前,读取寄存器: RESULT0 I1 RESULT3 V1 RESULT1 I2 RESULT4 V2 RESULT2 I3 RESULT5 V3 用户可以通过软件复位 SEQ1 到状态 CONV00 SEQ1 保持当前状态等待另外一次触发
ADC 转换结果寄存器 ADCRESULT0 @ 0x007108 ;ADCRESULT15 @ 0x007117 14 13 12 11 10 9 8 7 6 5 4 3 2 1 MSB LSB 模拟输入0V~3V: analog volts converted value RESULTx 3.0 FFFh 1111|1111|1111|0000 1.5 7FFh 0111|1111|1111|0000 0.00073 1h 0000|0000|0001|0000 0 0h 0000|0000|0000|0000
ADC转换结果的读取 Integer format x x x RESULTx 15 bit shift right x x x ACC x x x Data Mem Example: read RESULT0 register #include "DSP281x_Device.h" void main(void) { Uint16 value; // unsigned value = AdcRegs.ADCRESULT0 >> 4; }
ADC的低功耗方式 1、给ADC模拟电路的其他部分家电前,给参考电路和带隙 电路加电 电源级别 ADCRFDN ADCBGND ADCPWDN ADC加电 1 1 1 ADC掉电 1 0 0 ADC关闭 0 0 0 保留 1 0 x 保留 0 1 x 1、给ADC模拟电路的其他部分家电前,给参考电路和带隙 电路加电 2、ADC完全加电后,需要等待20s,才能进行第一次抓换。 3、ADC掉电,3位被同时清除。通过软件设置。
第五部分:F2812数字通信接口(SPI/SCI)
SPI 模块特点 4个外部引脚:SPISOMI/SPISIMO/SPISTESPICLK 2种工作模式:主工作模式、从工作模式 波特率:125种不同的可编程速率 16级发送和接受FIFO 4种时钟配置方法(由时钟极性和时钟相位控制) 不带相位延迟的下降沿:SPI在SPICLK高有效,SPI在SPICLK下降沿发送数据,上升沿接受数据 带有相位延迟的下降沿:SPICLD高有效,SPI在SPICLK的下降沿的前半周期发送数据,下降沿接受 不带相位延迟的上升沿:SPICLK低有效,SPI在SPICLK的上升沿发送数据,下降沿接受数据 带有相位延迟的上升沿:SPICLK低有效,SPI在SPICLK的下降沿的前半周期发送数据,下降沿接受数据 能够使用的最小波特率收到I/O缓冲器最小速度的限制,这些缓冲器是使用在SPI引脚上的I/O缓冲器。
串行外围接口SPI的工作流程 数据同步传输和接受 SPI主设备提供时钟 SPI Device #1 - Master SPI Device #2 - Slave SPI Shift Register SPI Shift Register shift shift SPI有16位的发送和接受功能,带有双缓冲发送和双缓冲接受。所有的数据寄存器都是16位字宽。在从模式中,SPI不再限定在最大的LSPCLK/8的发送速率。主模式和从模式中最大的发送速率是LSPCLK/4 clock
SPI 功能框图 C28x - SPI 主模式 SPISIMO RX FIFO_0 RX FIFO_15 SPIRXBUF.15-0 MSB LSB SPIDAT.15-0 SPISOMI SPITXBUF.15-0 MASTER/SLAVE=1 SPI通过SPICLK引脚为整个通信网络提供串行时钟。数据从SPIIMO引脚输出,从SPISOMI紧要输入。SPIBRR寄存器决定整个网络种发送和接受的位传输速率-126种不同的频率。 写入SPIDAT-串行数据接收器或者SPITXBUF的数据启动SPISIMO的数据发送,首先是MSB,同时接收到数据通过SPISOMI引脚移入SPIDAT的最低有效位。当所选择的位全部发送结束时,接受的数据被传输到SPIRXBUF以便CPU读取。数据在SPIRXBUF是右对齐 当规定了一定数据的数据位通过SPIDAT进行转移时将发生:1、SPIDAT的内容传输到SPIRXBUF 2、SPIINTFLAG置位 3、如果SPITXBUF有数据,该情况由SPISTS种的TXBUF FTLL 位表示出来,这个数据被传输到SPIDAT并且发送;另外所有数据位移出SPIDAT后,SPICLK时钟停止。 4、如果SPIIINT ENA被置位,可以确定中断 引脚SPISTE对于从属的SPI设备可以作为芯片的使能引脚-在发送主设备数据到从设备之前,要将从选择引脚置低,并且要在发送完主设备数据后降该引脚重新置高。 TX FIFO_0 TX FIFO_15 LSPCLK baud rate clock polarity clock phase SPICLK
SPI 功能框图 C28x - SPI 从模式 SPISIMO RX FIFO_0 RX FIFO_15 SPIRXBUF.15-0 LSB MSB SPIDAT.15-0 SPISOMI SPITXBUF.15-0 MASTER/SLAVE=0,数据在SPISOMI移出并且在引脚SPISIMO移入 引脚SPICLK被用作串行移位时钟输入,SPICLK的输入频率应不大于CLKOUT的4分频 当接收到SPICLK信号的上升/下降沿,写入SPIDAT或者SPITXBUF的数据被发送网络。党要发送的所有字符都移出SPIDAT后,写入SPITXBUF寄存器的数据被传输到SPIDAT寄存器。SPITXBUF被写入时,如果当前没有发送字符,数据会被立刻传送到SPIDAT。对于户接受数据,SPI等待网络主设备送来的SPICLK信号,接着将数据通过SPIIMO移位到SPIDAT。如果从设备要同时发送数据且SPITXBUF没有被预置时,数据被需在SSPICLK信号的开始前被写入SPITXBUF或者SPIDAT。 如果TALK位(SPICTL.1)被清除,则数据发送被机制别输出线(SPISOMI)被置于高阻状态。如果这发送SPI荏苒能正确的接受输入数据,但同时只能有个从设备驱动APISOMI线。 TX FIFO_0 TX FIFO_15 clock phase SPICLK
SPI 数据格式的调整 可编程数据长度1~16 发送数据少于16位时需要左调整 MSB 先发送 11001001XXXXXXXX 接受数据少于16位时需要右 调整 用户程序屏蔽MSB SPIDAT - Processor #1 11001001XXXXXXXX SPIDAT - Processor #2 mask-off XXXXXXXX11001001
SPI-A 寄存器 Address Register Name 0x007040 SPICCR SPI-A 配置控制寄存器 0x007041 SPICTL SPI-A 工作控制寄存器 0x007042 SPISTS SPI-A 状态寄存器 0x007044 SPIBRR SPI-A 波特率寄存器 0x007046 SPIEMU SPI-A 仿真缓冲寄存器 0x007047 SPIRXBUF SPI-A 串行接受寄存器 0x007048 SPITXBUF SPI-A 串行发送寄存器 0x007049 SPIDAT SPI-A 串行数据寄存器 0x00704A SPIFFTX SPI-A FIFO 发送寄存器 0x00704B SPIFFRX SPI-A FIFO 接受寄存器 0x00704C SPIFFCT SPI-A FIFO 控制寄存器 0x00704F SPIPRI SPI-A 极性控制寄存器
SPI-A 控制寄存器 SPICCR @ 0x007040 SPI CHAR.3-0 字长控制位 15-8 7 6 5-4 3 2 1 reserved reserved SPI CHAR.3-0 字长控制位 e.g. 0000b Þ length = 1 1111b Þ length = 16 CLOCK POLARITY 0 = 上升沿输出/下降沿输入 1 = 下降沿输入/上升沿输出 SPI SW RESET:在改变配置前清除刺位 在重新操作开始前设置此位 0 = SPI flags reset 1 = normal operation
SPI-A 工作控制寄存器 SPICTL @ 0x007041 OVERRUN INT ENABLE 0 = 禁止接受溢出中断(SPISTS.7) 1 = 使能接受溢出中断(SPISTS.7) MASTER/SLAVE 0 = slave 1 = master SPI INT ENABLE 0 = disabled 1 = enabled 15-5 4 3 2 1 reserved CLOCK PHASE 0 = no CLK delay 1 = CLK delayed 1/2 cycle TALK 0 = transmission disabled, output pin hi-Z’d 1 = transmission enabled
SPI-A 波特率寄存器 SPIBRR @ 0x007044 SPICLK signal = LSPCLK (SPIBRR + 1) 15-7 6-0 reserved SPI BIT RATE LSPCLK (SPIBRR + 1) , SPIBRR = 3 to 127 只在MASTER模式下面需要设置 SPICLK signal = LSPCLK 4 , SPIBRR = 0, 1, or 2
SPI-A 状态寄存器 SPISTS @ 0x007042 TX BUF FULL (read only) 写 SPITXBUF置位 15-8 7 6 5 4-0 reserved reserved TX BUF FULL (read only) 写 SPITXBUF置位 载入 SPIDAT 清零 SPI INT FLAG (read only) 传输完成置1 如果 SPI INT ENA设置(SPICTL.0) 则置位 读 SPIBRXUF清零 RECEIVE OVERRUN FLAG (read/clear only) 在SPIRXBUF被读取之前下一次接受完成则1 如果 OVERRUN INT ENA 被设置 (SPICTL.4)则中断请求 写1置0
SPI-A FIFO 发送寄存器 SPIFFTX @ 0x00704A SPI FIFO Enhancements 0 = disable 1 = enable TX FIFO Status (read-only) 00000 TX FIFO empty 00001 TX FIFO has 1 word 00010 TX FIFO has 2 words 00011 TX FIFO has 3 words 10000 TX FIFO has 16 words . TX FIFO Reset 0 = reset (pointer to 0) 1 = enable operation SPI RESET 0=复位 1=无影响 TXFFIL2 SPIFFENA TXFFST0 TXFFST3 TXFFIENA 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 TXFFIL0 TXFFIL1 TXFFIL4 TXFFIL3 TXFFST1 TXFFINT CLR TXFFST2 TXFFST4 TXFIFO SPIRST TXFFIL4~TXFFIL0:接受FIFO中断级位,当TXFFST4~TXFFST0与级位匹配时产生中断 TXFFIENA:0-禁止基于TXFFILVL匹配(小于或者等于)的TXFIFO中断、 1-使能 TX FIFO Interrupt Flag (read-only) 0 = not occurred 1 = occurred TX FIFO Interrupt Flag Clear 0 = no effect 1 = clear .7 TX FIFO Interrupt (on match) Enable 0 = disable 1 = enable TX FIFO Interrupt Level Interrupt when TXFFST4-0 and TXFFIL4-0 match
SPI-A FIFO 接受寄存器 SPIFFRX @ 0x00704B RX FIFO Status (read-only) 00000 RX FIFO empty 00001 RX FIFO has 1 word 00010 RX FIFO has 2 words 00011 RX FIFO has 3 words 10000 RX FIFO has 16 words . RX FIFO Overflow Flag (read-only) 0 = no overflow 1 = overflow RX FIFO Overflow Flag Clear 0 = no effect 1 = clear RX FIFO Reset 0 = reset (pointer to 0) 1 = enable operation RXFFIL2 RXFF- OVF CLR RXFFST0 RXFFST3 RXFFIEN 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 RXFFIL0 RXFFIL1 RXFFIL4 RXFFIL3 RXFFST1 RXFFINT CLR RXFFST2 RXFFST4 RXFIFO RESET OVF RX FIFO Interrupt Flag (read-only) 0 = not occurred 1 = occurred RX FIFO Interrupt Flag Clear 0 = no effect 1 = clear RX FIFO Interrupt (on match) Enable 0 = disable 1 = enable RX FIFO Interrupt Level Interrupt when RXFFST4-0 and RXFFIL4-0 match
F2812 SPI 模块功能总结 2种传输方式 可编程MASTER/SLAVE 可编程数据位长度 1~16bit 125种可编程波特率长度 2线制度工作方式 (半工) 3线制工作方式(全双工) 可编程MASTER/SLAVE 工作在MASTER提供主时钟 可编程数据位长度 1~16bit 125种可编程波特率长度
第五部分:F2812的串行通信接口(SCI)
F2812 SCI 模块特点 2个外部引脚:SCITXD/SCIRXD 2种工作模式:全双工、半双工 波特率:可编程达到64K不同的速率 双缓冲接受发送模式 16级发送接受 FIFO(发送8bit、接受16bit) 自动波特率检测硬件逻辑 2个唤醒多处理器模式 空闲线 地址位 能够使用的最小波特率收到I/O缓冲器最小速度的限制,这些缓冲器是使用在SPI引脚上的I/O缓冲器。
F2812 SCI 通信模块 SCITXBUF SCITXBUF TXSHF TXSHF RXSHF RXSHF SCIRXBUF TX FIFO_0 TX FIFO_15 TX FIFO_0 TX FIFO_15 全双工 SCITXBUF SCITXBUF 8 8 SCITXD SCITXD TXSHF TXSHF RXSHF SCIRXD SCIRXD RXSHF SCITXBUF:发送数据缓冲器。包括由CPU加载、要发送出去的数据 TXSHF寄存器:发送器移位寄存器。接受来自SCITBUF寄存器的数据并逐位将数据移到SCITD引脚上 RXSHF寄存器:接收器一味寄存器。逐位接受来自SCIRXD的数据并移入 SCIRXBUF:接收器数据缓冲寄存器。包括CPU要读的数据。来自远程处理器的数据加载到寄存器RXSHF,继而加载到SCIRXBUF和SCIRXEMU 8 8 SCIRXBUF SCIRXBUF RX FIFO_0 RX FIFO_15 RX FIFO_0 RX FIFO_15 SCI Device #1 SCI Device #2
SCI-A 可编程数据格式 NRZ (nonreturn to zero) format LSB of Data Start Bit Addr/ Data Stop 1 Stop 2 Start LSB 2 3 4 5 6 7 MSB Parity 只在地址模式种有效 多数表决 SCICLK (Internal) 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 当接收到一个无效的起始位,开始进行接受工作。一个无效的起始位是通过4个连续的SCICLK周期之内4个0.如果没有连续的4个0,处理的启动工作接受,开始寻找另一个启动位 对于起始位之后的其他位,处理器通过在这些位之间作3个抽样来决定他们的值。这些抽样产生在4、5、6个SCICLK周期,而且基于多数的基础上(2/3)来表决。 SCIRXD Start Bit LSB of Data Note: 8 SCICLK/每个数据位 Falling Edge Detected
多处理器唤醒方式 允许一个处理器在同一个串行线上有效的向其他处理器发送数据块 2种模式:地址线空闲;地址位 操作顺序 设置 SLEEP = 1, 当地址被检测的时候处理器才能被中断,软件清零 所有的传输都是以地址帧开始 接收到的地址帧临时唤醒所有BUS上的处理器 处理器比较收到的SCI地址与本身的SCI地址(匹配) 只有当地址匹配的时候处理器才开始接受数据
空闲线多处理器方式 帧内块的空闲块 在SCIRXD 变高10个位(或更多)之后, 接收器在下降沿之后被唤醒 2种发送快启动信号 前一数据块的最后一帧的发送与下一数据块的地址帧的发送之间时间延长,能产生一段10bit或更长的空闲时间 设置TXWAKE(SCICTL1.3)=1,产生11bit的空闲时间 空闲周期<10 帧内块 1、向TXWAKE位写入1 2、相SCITBUF寄存器种写入一个数据字(该数据字的内容并不重要)以发送一个块启动信号(当块启动信号发送出去时,所写入的第一个数据字被阻止,之后该字被或略)。当TXSHF空闲时,SCITXBUF的内容移入TXSHF,TXWAKE的值移入WUF,之后TXWAKE清0.由于位TXWAKE置1,前一帧的最后一个结束位之后锁发送的11bit的空闲周期就取代了开始位、数据位以及极性位 3、相SCITXBUF写入一个新的地址。一个内容并不十分重要的数据字首先被写入SCITXBUF寄存器,以至于TXWAKE位的值可以移入WUT。之后该数据字移入TXSHF寄存器,在此写入SCITXBUF(或者TXWAKE,如果需要的话),因为TXSHF和WUF都是双缓冲的。 SCIRXD/ SCITXD Last Data SP ST Addr SP ST Data SP ST Last Data SP ST Addr SP =10;>10 的空闲周期 地址帧 跟随10bit或 更多位空闲周期后 第一个数据帧 =10;>10 的空闲周期
地址位唤醒方式 所有帧都包含一个额外的地址位,判决地址/数据 当地址位被检测到的时候唤醒 只要在SCITXBUF写入地址前置位TXWAKE=1,自动设置帧内数据/地址的设定 Block of Frames SCIRXD/ SCITXD Last Data SP ST Addr 1 SP ST Data SP ST Last Data SP SP ST Addr 1 位TXWAKE的值被置于地址位中。在发送过程中,当SCITXBUF寄存器和TXWAKE分别被加载到TXSHF寄存器和WUT时,TXWAKE复位为0,WUT编程当前帧中地址位的值,因此,发送一个地址要经过这样的过程 1、位TXWAKE置1,将确切的地址值写入SCITXBUF寄存器。当地址值传送到TXSHF寄存器后并移出时,该地址位置1这表明在串行连接上的其他处理器在读地址 2、TXSHF和WUF被加载后,降地址写入SCITXBUF和TXWAE(因为TXSHF和WUF是双缓冲的,所以可以及时写入) 3、降位TXWAKE置0,以发送该块的其他非地址帧 块中首个帧 是地址位 地址位=1 第一个数据帧 在停止位前无额外 的空闲位 空闲周期 无特别限制
SCI-A 寄存器 Address Register Name 0x007050 SCICCR SCI-A 通信控制寄存器 0x007051 SCICTL1 SCI-A 控制寄存器1 0x007052 SCIHBAUD SCI-A 波特率寄存器,高位 0x007053 SCILBAUD SCI-A 波特率寄存器,低位 0x007054 SCICTL2 SCI-A 控制寄存器2 0x007055 SCIRXST SCI-A 接受状态寄存器 0x007056 SCIRXEMU SCI-A 接受仿真数据寄存器 0x007057 SCIRXBUF SCI-A 接受数据寄存器 0x007059 SCITXBUF SCI-A 发送数据寄存器 0x00705A SCIFFTX SCI-A FIFO 发送寄存器 0x00705B SCIFFRX SCI-A FIFO 接受寄存器 0x00705C SCIFFCT SCI-A FIFO 控制寄存器 0x00705F SCIPRI SCI-A 极性控制 寄存器
SCI-A 通信控制寄存器 SCICCR@0x007050 6 5 4 3 2 1 STOP BITS EVEN/ODD PARITY PARITY ENABLE LOOP BACK ENABLE ADDR/IDLE MODE SCI CHAR2 SCI CHAR1 SCI CHAR0 0 = 1 Stop bit 1 = 2 Stop bits 0 = Disabled 1 = Enabled 0 = Idle-line mode 1 = Addr-bit mode # of data bits = (binary + 1) e.g. 110b gives 7 data bits 0 = Odd 1 = Even 0 = Disabled 1 = Enabled [SCI-B Communications Control Register (SCICCR) – 0x007750]
SCI-A 控制寄存器 1 SCICTL1@ 0x007051 7 6 5 4 3 2 1 0 = receiver disabled RX ERR INT ENA SW RESET reserved reserved TXWAKE SLEEP TXENA RXENA 0 = receiver disabled 1 = receiver enabled 0 = transmitter disabled 1 = transmitter enabled 0 = sleep mode disabled 1 = sleep mode enabled SW RESET:低有效。复位到SCI状态机和操作标志符初始状态。所有受影响的逻辑操作在特定的复位状态种保持原有状态,直到将1写入改为。因此系统复位后,写1可以重新启动SCI。 TXWAKE:该位对数据发送的特征进行控制,依赖于在ADDR/IDLE MODE(SCICCR.3)位种锁指定的发送模式(ADDR/IDLE)。 1:所选择的发送特征依赖与模式 0:发送特征部被选择在IDEL种:相TXWAKE写入1,数据邪恶如SCITXBUF以产生11个数据位的 IDEL周期。在地址位模式种:相TXWAKE写入1,数据写入SCITXBUF以将该帧种的地址为置1.清除TXWAE位不是铜鼓SW RESET ,而是铜鼓哦系统复位或者是在TXWAE发送到WUT Transmitter wakeup method select 1 = wakeup mode depends on SCICCR.3 0 = no wakeup mode Write 0 = Reset SCI Write 1 = release from Reset 0 = Receive Error Interrupt disabled 1 = Receive Error Interrupt enabled
SCI-A 波特率寄存器 SCI baud rate = LSPCLK (BRR + 1) x 8 16 , BRR = 1 to 65535 , BRR = 0 BAUD15 (MSB) BAUD14 Baud-Select MSbyte Register (SCIHBAUD) – 0x007052 7 6 5 4 3 2 1 BAUD13 BAUD12 BAUD11 BAUD10 BAUD9 BAUD8 BAUD6 Baud-Select LSbyte Register (SCILBAUD) – 0x007053 BAUD5 BAUD4 BAUD3 BAUD2 BAUD1 BAUD7 BAUD0 (LSB) [SCI-B Baud-Select MSbyte Register (SCIHBAUD) – 0x007752] [SCI-B Baud-Select LSbyte Register (SCILBAUD) – 0x007753]
SCI-A 控制寄存器 2 SCICTL2 @ 0x007054 15 - 8 7 6 5 - 2 1 SCI RX/BK INT ENA TXRDY TX EMPTY RX/BK INT ENA TX INT ENA reserved reserved SCI RX/BK INT ENA 0 = Disable RXRDY/BRKDT interrupt 1 = Enable RXRDY/BRKDT interrupt SCI TX READY:表示发送器缓冲寄存器就绪标志,表明SCITXBUF准备接受下一个字符,接受之后该位自动清零 SCIC TX EMPTY:SCITXBUF、TXSHF的内容,一个有效的SW RESET或一个系统复位,可将该位置1.该位不会产生中断 SCI TX EMPTY 0 = TXBUF or shift register are loaded with data 1 = Transmit buffer and shift register both empty SCI TX READY 0 = SCITXBUF is full 1 = SCITXBUF is empty SCI TX INT ENA 0 = Disable TXRDY interrupt 1 = Enable TXRDY interrupt [SCI-B Control Register 2(SCICTL2) – 0x007754]
SCI-A 接受状态寄存器 SCIRXST @ 0x007055 6 5 4 3 2 1 RX ERROR RXRDY BRKDT FE OE PE RXWAKE reserved 1 = Receiver wakeup condition detected 1 = Parity Error detected 1 = Overrun Error detected 1 = Framing Error detected RX ERROR如果位RX ERR INT ENA bit(SCIDTL1.6)=1,则该位用于中断服务程序过程中的快速错误条件检测。(中断检测、帧错误、移除和极性错误) RXRDY:SCI接收器就绪标志。当从SCIRXBUF寄存器中读一个新的字符时,接受器将该位置1,此时,如果RX/BK INT ENA(SCICTL2.1),将产生一个接受戚中断。通过读SCIRXBUF寄存器,或者有效的SW RESET或者系统复位可使RXRDY清零。 BRKDT:SCI中断检测标志。当中断条件产生时,中断条件就产生,在一个丢失的第一个结束位后开始 FE:SCI帧错误标志。当锁期望的结束位没有出现时SCI置位。在一个结束位检测,丢失的结束位表明起始位的同步已经丢失以及被错误的组成一个帧 PE:极性检测。当检测到1的个数与它的极性位不一致的时候置位 RXWAKE:接收器唤醒检测标志。如果RXWAKE=1,表明检测到接收器唤醒条件。在地址位多处理器模式种,RXWAKE发宁了SCIRXBUF种的字符的地址位 的值。在空闲线多处理器模式种,如果SCIRXD数据线检测为空,则RXWAE置1.清零方式:将地址字节后的第一个字节传送到SCIRXBUF;对SCIRXBUF进行读操作;系统复位;有效的SW RESET 1 = Break condition occurred 0 = no break condition 0 = no new character in SCIRXBUF 1 = new character in SCIRXBUF 0 = No error flags set 1 = Error flag(s) set [SCI-B Receiver Status Register (SCIRXST) – 0x007755]
SCI-A FIFO 发送寄存器 SCIFFTX @ 0x00705A SCI FIFO Enhancements 0 = disable 1 = enable TX FIFO Status (read-only) 00000 TX FIFO empty 00001 TX FIFO has 1 word 00010 TX FIFO has 2 words 00011 TX FIFO has 3 words 10000 TX FIFO has 16 words . TX FIFO Reset 0 = reset (pointer to 0) 1 = enable operation SCI Reset 0 = reset 1 = enable operation 15 14 13 12 11 10 9 8 SCIRST SCIFFENA TXFIFO RESET TXFFST4 TXFFST3 TXFFST2 TXFFST1 TXFFST0 7 6 5 4 3 2 1 TXFFINT TXFFINT CLR TXFFIENA TXFFIL4 TXFFIL3 TXFFIL2 TXFFIL1 TXFFIL0 SCIRST:写0复位SCI发送和接受通道。SCI FIFO寄存器配置不受影响 TXFFIL4~TXFFIL0:接受中断极位。当FIFO状态位(TXFFST4~TXFFST0)和FIFO级位(TXFFIL4~TXFFIL0)匹配时,发送FIFO中断发生。这些位复位后默认值是0000 TX FIFO Interrupt Flag (read-only) 0 = not occurred 1 = occurred TX FIFO Interrupt Flag Clear 0 = no effect 1 = clear TX FIFO Interrupt (on match) Enable 0 = disable 1 = enable TX FIFO Interrupt Level Interrupt when TXFFST4-0 and TXFFIL4-0 match
SCI-A FIFO 接受寄存器 SCIFFRX @ 0x00705B RX FIFO Status (read-only) 00000 RX FIFO empty 00001 RX FIFO has 1 word 00010 RX FIFO has 2 words 00011 RX FIFO has 3 words 10000 RX FIFO has 16 words . RX FIFO Overflow Flag (read-only) 0 = no overflow 1 = overflow RX FIFO Overflow Flag Clear 0 = no effect 1 = clear RX FIFO Reset 0 = reset (pointer to 0) 1 = enable operation RXFFIL2 RXFF- OVF CLR RXFFST0 RXFFST3 RXFFIEN 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 RXFFIL0 RXFFIL1 RXFFIL4 RXFFIL3 RXFFST1 RXFFINT CLR RXFFST2 RXFFST4 RXFIFO RESET OVF RX FIFO Interrupt Flag (read-only) 0 = not occurred 1 = occurred RX FIFO Interrupt Flag Clear 0 = no effect 1 = clear RX FIFO Interrupt (on match) Enable 0 = disable 1 = enable RX FIFO Interrupt Level Interrupt when RXFFST4-0 and RXFFIL4-0 match
SCI-A FIFO 控制寄存器 SCIFFCT @ 0x00705C Auto Baud detection Flag (read-only) 0 = not complete 1 = complete Auto Baud detection Flag Clear 0 = no effect 1 = clear CDC calibrate ‘A’ 0 = disabled auto-baud alignment 1 = enables auto-baud alignment 15 14 13 12 11 10 9 8 ABD ABD CLR CDC reserved 7 6 5 4 3 2 1 ABD:0未完成,A/a字符没有成功的接收到;1完成 CDC:校准自动检测位 FFTXDLY7~FFTXDLY0:规定从FIFO到移位寄存器之间的延时。0波特~256波特 FFTXDLY Time delay between every transfer from FIFO to transmit shift register in number of SCI baud clock cycles ( 0 to 255 )
第五部分:F2812增强型区域网络控制器(CAN)
CAN的特征 多主机总线访问 带冲突避免的随机访问(CSMA) 短帧结构,0~8个字节的数据长度 传输速度从 100KBPS 到 1MBPS 远传输距离 自动重发机制 优化的EMC抗电子干扰干扰特性 可靠的错误处理和检错机制 在CAN总线上发送的每一条报文都具有唯一的一个11位或29位数字的ID。CAN总线状态取决于二进制数‘0’而不是‘1’,所以ID号越小,则该报文拥有越高的优先权。因此一个为全‘0’标志符的报文具有总线上的最高级优先权。可用另外的方法来解释:在消息冲突的位置,第一个节点发送0而另外的节点发送1,那么发送0的节点将取得总线的控制权,并且能够成功的发送出它的信息。 CAN能够使用多种物理介质,例如双绞线、光纤等。最常用的就是双绞线。信号使用差分电压传送,两条信号线被称为“CAN_H”和“CAN_L”,静态时均是2.5V左右,此时状态表示为逻辑“1”,也可以叫做“隐性”。用CAN_H比CAN_L高表示逻辑“0”,称为“显形”,此时,通常电压值为:CAN_H = 3.5V 和CAN_L = 1.5V 。
CAN的实现以及分类 Communication is identical for all implementations of CAN. However, there are two principal hardware implementations and two additional versions of data formats :
BASIC-CAN、FULL-CAN 一个发送缓冲器 2个接受缓冲器 一个消息接受过滤器 软件路由选择 提供一个消息服务器 扩展的消息接受过滤器 可编程邮箱 高级错误检测
CAN的数据格式 CAN-Version 2.0A 11位标识符 CAN-Version 2.0B 29位表示符
CAN的数据帧 DATA-Frame CAN 2.0A ( 11-bit-identifier ) 扩展格式里,基本ID 首先发送,其次是IDE 位和SRR 位。扩展ID 的发送位于SRR 位之后。 SRR 是一隐性位。它在扩展格式的标准帧RTR 位位置,因此代替标准帧的RTR 位。 IDE 的全称是“识别符扩展位(Identifier Extension Bit)” IDE 位属于: - 扩展格式的仲裁场 - 标准格式的控制场 RTR:远程传输要求,在数据帧里面为显性,在远程帧里面是隐性 IDE:表示符扩展 帧起始、仲裁场、控制场、数据场、CRC 场、应答场、帧结尾。数据场的长度可以为0 仲裁:标识符+标准帧格式RTR位。 11位标识符+RTR 29位标识符+SRR+IDE(R1 partB中为IDE) 控制场(6bit):包括数据长度代码和两个将来作为扩展用的保留(R0/R1) DLC:数据长度 0~8位 CRC:冗余校验位 16位 ACK:应答位 2位(包含应答间隙(ACK SLOT)和应答界定符(ACK DELIMITER) 过载帧包括两个位场:过载标志和过载界定符。 有两种过载条件都会导致过载标志的传送: 1. 接收器的内部条件(此接收器对于下一数据帧或远程帧需要有一延时)。 2. 间歇场期间检测到一“显性”位。 DATA-Frame CAN 2.0B ( 29-bit-identifier )
CAN 数据帧结构 帧起始:标志数据帧和远程帧的起始,仅由一个“显性”位组成 仲裁场 : 标准帧CAN 2.0A :11 标识符RTR 位组成。识别符位由ID-28…ID-18 扩展帧CAN 2.0B:29 标识符,、SRR 位、IDE 位、RTR 位。其识别符由ID-28... ID-0。 控制场: 标准格式:帧包括数据长度代码、IDE 位(为显性位,见上文)、及保留位r0 扩展格式:的帧包括数据长度代码和两个保留位:r1 和r0。其保留位必须发送为显性,但是接收器认可“显性”和“隐性”位的组合。 数据场 :最大8个字节的消息 ;0字节数据也被允许 CRC 场:CRC冗余检查 :包含一个由 CRC多项式产生的校验和 应答场:应答间隙(ACK SLOT)和应答界定符(ACK DELIMITER)。当接收器正确地接收到有效的报文,接收器就会在应答间隙(ACK SLOT)期间(发送ACK 信号)向发送器发送一“显性”位以示应答。 帧结尾:包含应答 , 错误信息, 消息结束
CAN 帧格式 开始位 (1 bit): 只在总线空闲时才允许站开始发送(信号)。所有的站必须同步于首先开始发送信息的站的帧起始前沿 标识符 标识消息名称和优先级 ;数值越低优先级越高。11bit(ID28-ID18);18bit(ID17-ID0)+11bit RTR (1 bit) : 远程请求发送 ; if RTR=1 (隐性) 帧内无有效数据 – 请求接收端发送数据 (数据帧显性,远程帧隐性) IDE (1 bit) : 扩展标识符 ; if IDE=1 ,扩展帧 r0 (1 bit) :保留 CDL (4 bit) : 数据长度编码 0~8 data (0..8 byte ) : 数据场 CRC (15 bit ) : 冗余校验 ; 只检测错误无校正 ; 海明距离 6 ACK (2 bit) : 应答; 每个接收到无错信息的接受者 ( CRC !) 必须先在应答间隔(ACK SLOT)传输一个应答位 EOF (7 bit = 1,隐性) : 帧结束 ; 5个隐位之后自动一个填充位 IFS ( 3 bit = 1 隐性 ) : 帧间空间 ; 用于把数据帧或远程帧与当前帧分离 SRR (1 bit = 隐性) : 替代远程帧 ; 它在扩展格式的标准帧RTR 位位置,因此代替标准帧的RTR r1 (1 bit ): 保留 用CAN_H 比CAN_L 高表示的逻辑0 被称为显形位而用CAN_L 比CAN_H 高表示的逻辑1 叫做隐性位 CAN总线状态取决于二进制数‘0’而不是‘1’,所以ID号越小,则该报文拥有越高的优先权。因此一个为全‘0’标志符的报文具有总线上的最高级优先权。 海明码:是一种可以纠正一比特错的高效率线性分组码。基本思想:将待传信息码元分成许多长度k的组,其后附加r个监督码元(也称校验比特),构成长为n=k+r比特的分组码。分组码中每个校验比特和某几个特定的信息比特构成偶检验关系。校验比特数r必须满足:2r>=n+1,即2r>=k+r+1。 海明距离是指两个码字间的距离,决定了能纠错的位数。 海明码主要用于信息论、计算机网络中。 扩展格式里,基本ID 首先发送,其次是IDE 位和SRR 位。扩展ID 的发送位于SRR 位之后。
远程帧 错误帧 过载帧 远程帧:帧起始、仲裁场、控制场、CRC 场、应答场、帧结尾 错误帧 过载帧 2个位场:过载标志和过载界定符 RTR隐性 没有数据场,数据长度代码的数值是不受制约(0-8任何值) 错误帧 2个不同的场组成:不同站提供的错误标志(ERROR FLAG)和错误界定符 2类错误标志:主动错误标志(6个连续显性)和被动错误标志(6个连续隐性) 过载帧 2个位场:过载标志和过载界定符 3个条件: 接收器的内部情况(此接收器对于下一数据帧或远程帧需要有一延时) 在间歇的第一和第二字节检测到一个“显性”位。 如果CAN 节点在错误界定符或过载界定符的第8 位(最后一位)采样到一个显性位,节点会发送一个过载帧(不是错误帧)。错误计数器不会增加。 检测到错误条件的“错误激活”的站通过发送主动错误标志指示错误。错误标志的形式破坏了从帧起 始到CRC 界定符的位填充的规则(参见“编码”),或者破坏了ACK 场或帧结尾场的固定形式。所有其 他的站由此检测到错误条件并与此同时开始发送错误标志。因此,“显性”位(此“显性”位可以在总线 上监视)的序列导致一个结果,这个结果就是把个别站发送的不同的错误标志叠加在一起。这个序列的总 长度最小为6 个位,最大为12 个位。 检测到错误条件的“错误被动”的站试图通过发送被动错误标志指示错误。“错误被动”的站等待6 个相同极性的连续位(这6 个位处于被动错误标志的开始)。当这6 个相同的位被检测到时,被动错误标 志的发送就完成了。
CAN 数据帧控制场 A-B
DLC 数据长度编码 D显性 R隐性
CAN 的标准 The ISO-Standards : CAN是开放式的系统 CAN标准来至于 ISO-OSI 开放互联系统的7层 在汽车通信网络中实现了1、2和7层(对象层、传输层、物理层) 物理层没有被标准化 The ISO-Standards : CAN : ISO 11519 - 2 : layer 2 , layer 1 (top) CAN : ISO 11898 : layer 1 (bottom) VAN : ISO 11519 - 3 : layer 2 , layer 1 J1850 : ISO 11519 - 4 : layer 2 , layer 1 物理层的作用是在不同节点之间根据所有的电气属性进行位信息的实际传输。当然,同一网络内,物 理层对于所有的节点必须是相同的。尽管如此,在选择物理层方面还是很自由的。
ISO-OSI开放互联协议 Open Systems Interconnection (OSI): Layer 1 : 物理层 规定通讯介质的物理特性。如:电气特性和信号交换的解释 Layer 2 : 数据链路层 消息格式以及传输链路 CSMA/CA 访问协议 Layer 7 : 应用层 用户、软件、网络终端
CAN 节点的层结构 数据链路层 物理层 逻辑链路控制子层(LLC) 媒体访问控制子层(MAC) 为远程数据请求以及数据传输提供服务。 确定由实际要使用的LLC 子层接收哪一个报文。 为恢复管理和过载通知提供手段。 媒体访问控制子层(MAC) 控制帧结构、执行仲裁、错误检测、出错标定、故障界定 总线上什么时候开始发送新报文及什么时候开始接收报文 位定时 物理层 不同节点之间根据所有的电气属性进行位的实际传输。 同一网络的物理层对于所有的节点当然是相同的。 在前版本的CAN 规范中,数据链路层的LLC 子层和MAC 子层的服务及功能分别被解释为“对象层”和“传输层”
总线访问程序 The “Ethernet” : CSMA / CD CSMA /CD: Carrier Sense Multiple Access with Collision Detection CSMA/CD是“载波侦听多路访问/冲突检测”(Carrier Sense Multiple Access with Collision Detect)的缩写。 Note : This Procedure is NOT used for CAN ! Why ?
CAN BUS CSMA/CD CSMA/ CA = 带冲突避免的载波侦听多路访问 如果有冲突则赢者占用总线 高优先级的消息不延时 越低的标识符优先级越高 发送监控电平一致优先级高,不一致退出 非破坏性的位判断控制访问
CSMA/CA (cont.) CSMA / CA = 如果在仲裁长有冲突则低优先级取消发送 高优先级的节点可以继续发送数据 同时多个节点发送“线与”仲裁
CAN 物理层 CAN - High - Speed ( ISO 11898 ) :
CAN 高速节点 CAN Transceiver CAN BUS DSP with on-chip CAN module Rxd Txd CAN Transceiver SN65HVD23X CAN_H TI transceiver: SN75LBC031 - interfaces the single ended CAN controller with the differential CAN bus. - transmission rate up to 1Mbit/s 2 states on the bus: recessive: CAN_H = CAN_L = 2.5V dominant: CAN_H = 3.5V and CAN_L = 1.5V CAN_L CAN BUS
CAN 错误检测 Bit-Error 所发送的位值与所监视的位值不相符合( 仲裁和应答间隙除外 ) Bit-Stuff-Error 如果在使用位填充法进行编码的信息中,出现了第6 个连续相同的位电平时,将检测到一个填充错误。( 结束帧除外 ) CRC-Error 接收到的CRC校验和不匹配 Form-Error 当一个固定形式的位场含有1 个或多个非法位,则检测到一个形式错误。(备注:接收器的帧末尾最后一位期间的显性位不被当作帧错误) Acknowledgement-Error 在应答间隙发送器没有收到显性位: 消息没有被任何节点节接受 当接收器正确地接收到有效的报文,接收器就会在应答间隙(ACK SLOT)期间(发送ACK 信号)向 发送器发送一“显性”位以示应答。 CRC 界定符(标准格式以及扩展格式) CRC 序列之后是CRC 界定符,它包含一个单独的“隐性”位 。
CAN 错误处理 在一个节点检测到一个错误之后, 所有其他的站由此检测到错误条件并与此同时开始发送错误标志。因此,“显性”位的序列导致一个结果,这个结果就是把个别站发送的不同的错误标志叠加在一起。这个序列的总长度最小为6 个位,最大为12 个位。 错误管理 : 错误检测 检测到错误条件的节点都发送错误帧 最后收到的消息将被所有节点丢弃 错误计数器加1 原始的报文重新发送
CAN 错误状态 * 目的: 为了避免错误引起的长期干扰,需要关闭错误的节点 * 错误的三个状态 : * 目的: 为了避免错误引起的长期干扰,需要关闭错误的节点 * 错误的三个状态 : 主动错误 : “错误主动”的单元可以正常地参与总线通讯并在错误被检测到时发出主动错误标志。 被动错误 : “错误被动”的单元不允许发送主动错误标志。“错误被动”的单元参与总线通讯,在错误被检测到 总线关闭 : 这个节点独立于CAN , 发送和接受都被禁止, 节点不能够发送错误帧,只能通过reset才能脱离总线关闭状态
CAN 错误计算器 State - Diagram : 2个错误状态计数器 : 接受错误计算器 (REC) 发送错误计数器 (TEC) Possible situations : a) 发送位发送一错误标志: TEC:=TEC + 8 b) 接收器检测到一个错误 : REC:=REC + 1 c) 在发送一个错误标志之后接受器接受到一个错误: REC:=REC + 8 d) 再发送一个错误帧期间节点检测一个错误: TEC:=TEC+ 1 e) 成功发送:TEC:=TEC - 1 f) 接受成功 : REC:=REC - 1
F281X CAN 特征 完全兼容CAN2.0B 支持高达1Mbps的传输速率 32个可编程邮箱 总线活动的可编程唤醒 自测试模式 可配置为发送和接受 可用标准或者扩展的标识符配置 可编程的接受顾虑屏蔽 支持数据帧和远程帧 支持0~8字节的数据 在接受和发送的消息种使用一个32位的时间标志 使用具有2个中断级别的可编程中断方案 对发送和接受的超时现象使用一种可编程的中断操作 总线活动的可编程唤醒 自测试模式
. F281X CAN中断模块 CPK 信息控制器 地址 数据 32 32 32 32 CAN Bus 存储器管理单元 信息邮箱 eCAN0INT eCAN1INT 32 信息邮箱 (512 Bytes) 32个信息邮箱 of 4 x 32-Bit Words 存储器管理单元 CPU接口 接受控制单元 定时器管理单元 (512 Bytes) 控制和状态寄存器 32 32 信息控制器 32 接受缓冲区 发送缓冲区 控制缓冲区 状态缓冲区 CPK:协议内核 消息管理器: 存储器管理单元(MMU),包括CPU接口和接受控制单元(接受过滤器)、定时器管理单元 允许存储32个消息的邮箱 控制和状态寄存器 在CPK接收到一个有效的消息之后,消息控制器中的接受控制单元决定是否把接受的消息存储到邮箱RAM32个消息对象种的某一个中。接受控制单元要检验状态、标识符和消息对象的屏蔽来决定适当的邮箱定位。接受的消息被存储到经过接受过滤后的第一个邮箱中。如果接受控制单元不能找到任何一个存储接受消息的邮箱,则消息将被丢弃。 一个消息有11或29位标识符,一个控制区最多有8个字节的数据组成。当要发送一个消息时,消息控制器把这个消息发送到CPK的发送缓冲器中,以便在下一个总线空闲状态时发送消息。当多于一个消息要被发送时,具有最高优先级的消息将被消息控制器发送到CPK中。如果2个邮箱具有相同的优先级,则较大序列号的邮箱首先发送消息。 定时器管理类单元包含一个事件标志计数器,所有的接受和发送的消息都要放置事件标志。在允许的事件间隔内(超时值),如果某个消息没有被接受或者发送出去,则将产生一个中断。事件标志特性仅仅存在于ECAN模式中 为了初始化数据的传输,必须在相应的控制寄存器中设置发送请求位。这样的整个发送过程和可能的错误处理过程将独立进行而不需要CPU的任何参与。如果一个邮箱设置位要接受消息,则CPU使用杜指令可以轻松的读取它的数据寄存器。在成功的发送和接受每一个消息后,可以设置邮箱以产生中断。 CPK SN65HVD23x 3.3-V CAN 发送接收器 . CAN Bus
F281X 存储区映射 数据空间 CAN CANME CANMD CANTRS CANTRR CANTA CANAA CANRMP CANRML CANRFP CANGAM CANMC CANBTC CANES CANTEC CANREC CANGIF0 31 CANGIM CANGIF1 CANMIM CANMIL CANOPC CANTIOC CANRIOC CANLNT CANTOC CANTOS reserved 0x00 0000 控制/状态 寄存器 6040 局部接受掩码 32*32 6080 消息对象时戳 32*32 0x00 6000 CAN 0x00 61FF 60C0 消息对象超时 32*32 6100 0x 3F FFFF 邮箱 0 ECAN模块的2种不同的地址段映射方式。 1、被用于访问控制寄存器、状态寄存器、接受屏蔽、事件标志和消息对象的超时寄存器。对控制和状态寄存器的访问被限制位32位宽度的存取。本地的接受屏蔽、事件标志寄存器和超时寄存器可以存取8位、16位、32位宽度的数据 2、用于访问邮箱,这个区域也可以存取8位、16位、32位宽度的数据。 这2个存储块都使用了512byte的地址空间。 通常使用RAM来存储消息,她可以由CAN控制器或CPU寻址。通过改变RAM种不同的邮箱或者某些寄存器的取指,CPU可以控制CAN控制器。不同的存储单元的内容被用于实现接受过滤、消息发送和中断处理的不同功能。 MSGID: 6108 消息标识符MSGID.32b 消息控制MSGCTRL.32b 消息数据低位MDL.4Byte 消息数据高位MDH.4Byte 邮箱 1 16BYTE*32=512 邮箱31 61FF
消息对象(邮箱)结构 消息标识符 标识符扩展位,IDE(MSGID.31) 接受屏蔽使能位,AME(MSGID.30) 29bit用于扩展标识符 11bit用于标准标识符 标识符扩展位,IDE(MSGID.31) 接受屏蔽使能位,AME(MSGID.30) 自动应答模式位,AAM(MSGID.29) 发送优先级,TPL(MSGCTRL.12-8) 远端发送请求位,RTR(MSGCTRL.4) 数据长度代码,DLC(MSGCTRL.3-0) 最多8个字节的数据区 发送邮箱: CPU把要发送的的数据存储在被配置位发送邮箱的某个邮箱中。假设这个邮箱通过设置对应的ME.n位已被使能,那么在将数据和标识符写到RAM以后,如果对应的TRS.n位已被置位,则邮箱中的消息将被发送出去。 如果有多个邮箱被设置位发送邮箱和多个对应的TRS.n被置位,则会按照邮箱优先级的高低,一次发送对应的消息。 在SCC兼容模式,发送邮箱的优先级取决于邮箱的号码。最大的邮箱好.15代表最高的发送优先级。 在ECAN种,发送优邮箱的优先级取决于消息控制寄存器(MSGCTRL)的TPL位。TPL中最大的邮箱首先发送。当2个邮箱的TPL中的值向同时,将发送具有较大邮箱号的邮箱中的数据。 如果由于缺少仲裁或者错误使发送失败,则将重新尝试发送。在重新发送之前,CAN模块要检验是否有其他的发送请求,然后以最高的优先级来发送原来的消息。 接受邮箱 通过使用合适的屏蔽,每个接受消息的标识符都要和接受偶邮箱中的标识符进行比较。如果相等,则接受到的标识符、控制位和数据字节将被写入到对应的RAM区域。同时,相应的接受消息未决位RMP.n(RMP.31-0)要被置位,并且将产生一个接受中断(如果已经被使能)。如果标识符不相符,则消息不被存储。 当一个消息被接受时,邮箱控制器从具有最高邮箱好的邮箱开始寻找匹配的标志。在SCC兼容模式中,15号邮箱具有最高的接受优先级;而在eCAN种,31号邮箱具有最高的接受优先级。 一个邮箱在读取数据后,RMP.n(RMP31-0)位必须由CPU复位。如果同意邮箱又接收到第二个消息,而此时接受消息位居位已经被置位,则相应的接受消息丢失位(RML.n(RML31-0))将被置位。此时,如果覆盖保护为OPC.n(OPC31-0)被清零,则以前存储的消息将新的消息覆盖,否则,将检测下一个邮箱。 如果一个邮箱被设置成了接受邮箱,并且置位了RTR位,则该邮箱可以发送一个远程帧。当一个远程帧被发送以后,邮箱的TRS位将被CAN模块清零。
CAN 控制/状态寄存器 31 31 6000 CANME-邮箱使能 CANMD-邮箱指向 CANTRS-发送请求设置 31 6000 CANME-邮箱使能 CANMD-邮箱指向 CANTRS-发送请求设置 CANTRR-发送请求复位 CANTA-发送相应 CANAA-失败相应 CANRMP-接受消息未决 CANRML-接受消息丢帧 CANRFP-远程帧未决 CANGAM-全局接受屏蔽 CANMC-主控方控制 CANBTC-位定时设置 CANES-错误和状态 CANTEC-接受错误计数 CANREC-发送错误计数 CANGIF0-全局中断标志0 6020 CANGIM-全局中断屏蔽 CANGIF1-全局中断标志1 CANMIM-全局中断屏蔽 CANMIL-邮箱中断级别 CANOPC-覆盖保护控制 CANTIOC-发送I/O控制 CANRIOC-接受I/O控制 CANTSC-接受标志计数器 CANTOC-超时控制 CANTOS-超时状态 reserved 6002 6022 6004 6024 6006 6026 6008 6028 600A 602A 600C 602C 600E 602E 6010 6030 6012 6032 6014 6034 发送邮箱: CPU把要发送的的数据存储在被配置位发送邮箱的某个邮箱中。假设这个邮箱通过设置对应的ME.n位已被使能,那么在将数据和标识符写到RAM以后,如果对应的TRS.n位已被置位,则邮箱中的消息将被发送出去。 CANME:邮箱使能 CANMD:邮箱指向(发送接受) CANTRS:发送请求设置 CANTRR:发送请求复位 CANTA:发送相应 CANAA:失败相应 CANRMP:接受消息未决 CANRML:接受消息丢失 CANRFP:远程帧未决 CANGAM:全局接受屏蔽 CANMC:主控方控制 CANBTC:位定时设置 CANES错误和状态 CANREC:接受错误计数 CANGIF0:全局中断标志0 CANGIM:全局中断屏蔽 CANGIF1:全局中断标志1 CANMIM:邮箱中断屏蔽 CANMIL:邮箱终端级别 CANOPC:覆盖保护控制 CANTIOC:发送I/O控制 CANRIOC:接受I/O控制 CANTSC:时间标志计算器(在SCC模式中被保留) CANTOC:超时控制(在SCC模式中被保留) CANTOS:超时状态(在SCC模式中被保留) 以发送举例 6016 6036 6018 6038 601A 603A 601C 603C 601E 603E
CAN 邮箱使能寄存器 (CANME) – 0x006000 CAN 邮箱指向寄存器 (CANMD) – 0x006002 31 16 CANME[31:16] 15 CANME[15:0] 0 = 邮箱RAM被禁止,可以被CPU作为普通RAM使用 1 = 邮箱被使能。对任何标识符区域写操作前,邮箱必须被禁止 CAN 邮箱指向寄存器 (CANMD) – 0x006002 31 16 CANMD[31:16] 0 = corresponding mailbox is defined as a transmit mailbox. 1 = corresponding mailbox is defined as a receive mailbox. 15 CANMD[15:0] 0 = 对应的邮箱被定义成发送邮箱 1 = 对应的邮箱被定义成接受邮箱
CAN 发送请求置位寄存器 (CANTRS) – 0x006004 CAN 发送请求复位寄存器 (CANTRR) – 0x006006 31 16 CANTRS[31:16] 15 CANTRS[15:0] 当邮箱准备发送时,CPU设置TRS.n位为1开始发送 0 = 无操作。注意:在发送成功后,该位将被CAN模块清零 1 =置位该位发送对应邮箱的消息。可以同时置位多个bit以同时发送多个消息 用户软件置位或者在远程发送请求种由CAN模块置位 CAN 发送请求复位寄存器 (CANTRR) – 0x006006 31 16 CANTRR[31:16] Mailbox Transmission Reset Request Bits (TRR) 0 = no operation. 1 = setting TRRn cancels a transmission request, if not currently being processed. 15 CANTRR[15:0] 当消息发送成功或失败时被置位。只能通过CPU或者内部逻辑来置位 0 = 无操作。 1 = 取消一次发送请求(如果当前消息没有被处理率)
CAN 失败相应寄存器 (CANAA) – 0x00600A CAN 发送相应寄存器 (CANTA) – 0x006008 31 16 CANTA[31:16] 15 CANTA[15:0] 发送成功则置位 0 = 消息没有被发送 1 = 如果信箱N中的消息被发送成功,则该基础拿起的比特为N被置位 注意:软件写1复位TA CAN 失败相应寄存器 (CANAA) – 0x00600A 31 16 CANAA[31:16] Mailbox Abort Acknowledge Bits (AA) 0 = The transmission is not aborted. 1 = The transmission of mailbox n is aborted. Note: To reset a AA bit by software: write a ‘1’ into it!! 15 CANAA[15:0] 如果邮箱N中的消息发送失败,则AA.n位和AAIF(GIF.14)置位,同时也产生中断 0 = 发送没有失败 1 = 邮箱N的发送失败 注意:通过软件写1编程复位一个AA位
CAN 消息接受未决寄存器 (CANRMP) – 0x00600C CAN 接受消息丢失寄存器 (CANRML) – 0x00600E 31 16 CANRMP[31:16] 15 CANRMP[15:0] 如果邮箱N中有消息,则由CPU或内部逻辑置位 0 = 邮箱没有消息 1 = 邮箱有一个有效消息 Note: 软件写1复位 A RMP CAN 接受消息丢失寄存器 (CANRML) – 0x00600E 31 16 CANRML[31:16] Mailbox Receive Message Lost Bits (RML) 0 = no message was lost. 1 = an old unread message has been overwritten by a new one in that mailbox. Note: To reset a RML bit by software: write a ‘1’ into it!! 15 CANRML[15:0] 如果邮箱N种原有的消息被复位则置位 0 = 无消息被覆盖 1 = 一个旧的消息被新消息覆盖 Note: 软件写1复位 A RML
CAN 远程帧未决寄存器 (CANRFP) – 0x006010 31 16 CANRFP[31:16] 15 CANRFP[15:0] CAN接收到远程帧就置位(如果一个远程帧已经被存储在一个邮箱中 则不置位) 0 = 没有接受到远程帧 1 = 接受到一个远程帧 Note: 想对应的TRR位写1来复位RFP位 Mailbox Remote Frame Pending Bits (RFP) 0 = no remote frame request was received. 1 = a remote frame request was received by the CAN module. Note: To reset a RFP bit by software: write a ‘1’ into the corresponding TRR bit!!
CAN 全局接受屏蔽寄存器 (CANGAM) – 0x006012 31 30-29 28 16 AMI reserved CANGAM[28:16] 15 CANGAM[15:0] Note : 全局接受屏蔽用于SCC模式。如果相应的邮箱的AME(MID.30)被置位,则全局接受 屏蔽用于6-15号邮箱。接收到的消息只存储到第一个具有匹配标识符的邮箱中 接收屏蔽标识符扩展位 (AMI) 0 = 消息邮箱的标识符扩展位决定那个消息被接受,接受邮箱的IDE决定比较的比特位的数目,此时不 用过滤器 1 = 可以接受标准和扩展帧. 如果是扩展帧,标识符的29个比特位都要存储到邮箱中,并且全局接受屏蔽 寄存器的所有29位都被用于过滤。如果是标准帧,则只使用标识符的首个11位(28-18)和全局接受屏蔽。 Note: 接受邮箱的IDE位值为1,并且会被所发送消息覆盖 Note : This Register is used in SCC mode only for mailboxes 6 to 15, if the AME bit (MID.30) of the corresponding mailbox is set. It is a “don’t care” for HECC – Mode! 全局接受屏蔽寄存位 (GAM):允许屏蔽输入消息的任何标识符位 0 = 所接受的消息标识位必须与MID寄存器相对应位匹配 1 = 所接受的消息标识符don’t care Note: To reset a RFP bit by software: write a ‘1’ into the corresponding TRR bit!!
CAN 主控制寄存器 (CANMC) – 0x006014 31 16 reserved 15 14 13 12 11 10 9 8 7 6 MBCC TCC SCB CCR PDR DBO WUBA CDR ABO STM SRES MBNR Change Configuration Request (CCR):EALLOW保护 0 = 软件请求通常操作 1 = 软件请求写SCC配置寄存器- CANBTC, 接受屏蔽寄存器-CANGAM, LAM[0] LAM[3] 进行写操作。置位后,对CANBTC处理之前CPU需等待直到CANES的CCE标志为1 SCC Compatibility bit (SCB) :SCC模式中该位保留并且收EALLOW保护 0 = SCC mode 1 = high end CAN (HECC) mode 时间戳计数器MSB复位 (TCC) :SCC模式中该位保留并且收EALLOW保护 0 = no operation 1 = timestamp counter MSB is reset to 0 邮箱时间标志寄存器清除 (MBCC):SCC模式中该位保留并且收EALLOW保护 0 = no operation 1 = 16号邮箱成功发送或接受后,时间标志计数器复位
CAN Master Control Register (CANMC) – 0x006014 自动开启总线 (ABO):EALLOW保护 0 = 无反应,总线永远关闭 1 = “总线关闭后,接收到128*11个隐性位之后模块 自动返回到开启状态 功率下降模式请求位 (PDR):EALLOW保护 0 = normal operation 1 = power down mode is requested. NOTE:从低功耗模式唤醒后,此位自动由eCAN模块清零 Software Reset(SRES) 0 = no effect 1 = CAN Module reset 总线唤醒位 (WUBA):EALLOW保护 0 = 对PDR写入0模块离开功率下降模式 1 = 检测到任何总线活动都离开下降模式 15 MBCC MBNR ABO CDR WUBA DBO PDR CCR SCB TCC SRES STM 4 14 13 12 11 10 9 8 7 6 5 邮箱号(MBNR) 1=MBNR.4只用于ECAN模式,对 SCC保留 0=CPU请求对其数据区写操作 邮箱中的数据字节顺序:EALLOW保护 MDH[31:0] and MDL[31:0] 0 = MDH[31:0] : Byte 4,5,6,7 ; MDL[31:0] : Byte 0,1,2,3 1 = MDH[31:0] : Byte 7,6,5,4 ; MDL[31:0] : Byte 3,2,1,0 改变数据区域请求位 (CDR) 0 = CPU请求普通操作 1 = CPU对由MBNR.4-0(MC.4-0)确定的邮箱的数据区写 NOTE: 访问邮箱之后软件清零. 自测试模式 (STM):EALLOW保护 0 = 正常模式 1 = 模块自己产生应答信号
CAN 位时配置 CAN协议规范把名义上的(位时间)分割成4个不同的时间段: SYNC_SEG PROP_SEG PHASE_SEG1 用来同步总线上不同的节点 长度 : 1个时间量(TQ) PROP_SEG 补偿网络内的物理延迟时间 总线上信号传播时间,输入比较器延迟和输出比较器延迟之和的2倍 可编程1-8个TQ PHASE_SEG1 补偿上升沿相位偏移 PHASE_SEG2 补偿下降沿相位偏移 可编程2-8个TQ Twice the sum of the signal’s propagation time on the bus line, the input comparator delay and the output driver delay.
CAN 位时配置 CAN标称位时 tseg1 : PROP_SEG + PHASE_SEG1 tseg2 : PHASE_SEG2 SYNCSEG sjw tseg2 tseg1 TQ Sample Point Transmit Point 标称位率为一理想的发送器在没有重新同步的情况下每秒发送的位数量。 eCAN模式中,在CAN总线上的比特位的宽度由参数TSEG1(BTC.6-3)、TSEG2(BTC.2-0)、BRP(BTC.23-16)来决定 CAN协议规定,TSEG1结合了PROP_SEG和PHASE_SEG1两个时间段。TSEG2的长度定义为时间段PHASE_SEG2的长度。 消息处理时间(IPT)对应着进行读位操作所必需的时间,对应2TQ tseg1 : PROP_SEG + PHASE_SEG1 tseg2 : PHASE_SEG2 TQ : SYNCSEG CAN标称位时= TQ + tseg1 + tseg2
CAN 位时配置 当决定个比特位段时要遵守CAN位定时规则: tseg1 tseg2 3/BRP ≤ tseg1 ≤ 16 TQ 1 TQ ≤ sjw ≤ MIN[ 4*TQ , tseg2] BRP 5 ( if three sample mode is used)
Note: with an external clock of 30MHz and a PLL * 5: CAN 位定时寄存器 (CANBTC) – 0x006016 31 reserved BRP.2 BRP.3 BRP.4 BRP.5 BRP.0 BRP.1 16 BRP.7 BRP.6 23 24 波特率预定标(BRP) 时间量定义 (TQ): Note: with an external clock of 30MHz and a PLL * 5: SYSCLK = 150MHz
CAN 位定时寄存器 (CANBTC) – 0x006016 Time Segment 1( tseg1) 15 reserved TSEG1 SJW TSEG2 SAM 7 8 2 3 6 9 10 11 Time Segment 1( tseg1) 同步跳跃宽度 (SJW) Time Segment 2( tseg2) 采样数SAM) 0 = 采样点采样一次 1 = 3个采样值多数判决
CAN 位时间示例 SYSCLK = 150 MHz 位时间的80%采样 : Example 50 KBPS: TQ = (199+1)/150 MHz = 1.334 ns tseg1 = 1.334 ns ( 10 + 1) = 14.674 ns tCAN = 20.010 ns tseg2 = 1.334 ns ( 2 + 1) = 4.002 ns CAN-Baudrate BRP TSEG1 TSEG2 1 MBPS 9 10 2 500 KBPS 19 250 KBPS 39 125 KBPS 79 100 KBPS 99 50 KBPS 199
CAN 错误与状态寄存器 (CANES) – 0x006018 31 reserved BO ACKE SE CRCE EW EP 16 BE SA1 23 24 17 18 19 20 21 22 FE 格式错误 (FE) 0 = 没有检测到格式错误 1 = 检测到错误,意味着一个或多个固定格式的比特位区域出现电平错误 位错误 (BE) 0 = 没有检测到比特位错误 1 = 接受的比特位与在仲裁区外或发送仲裁区时发送的 不匹配(发送一个显性,接受一个隐性) 应答错误 (ACKE) 0 = normal operation 1 = CAN module has not received an ACK. 总线关闭 (BO) 0 = normal operation 1 = CANTEC 计数到 256. CAN模块关闭总线。 配置ABO和128*11bit后退出总线关闭状态 隐性错误 (SA1) 0 = 检测到一个隐性位 1 = 没有检测到一个隐性位 CRC错误 (CRCE) 0 = normal operation 1 = a wrong CRC was received. 被动错误 (EP) 0 = CAN is in Error Active Mode 1 = CAN is in Error Passive Mode 填充位错误 (SE) 0 = normal operation 1 = a stuff bit error has occurred. 警告状态 (EW) 0 = values of both error counters are less than 96 1 = one error counter has reached 96
CAN 错误与状态寄存器 (CANES) – 0x006018 15 reserved Res. PDA CCE SMA TM RM 1 2 3 4 5 6 改变配置使能 (CCE) 0 = CPU is denied write access into configuration registers. 1 = CPU has write access into 功率下降确认 (PDA) 0 = normal operation 1 = CAN module has entered power down mode. 接受模式 (RM) 0 = CAN protocol kernel is not receiving a message. 1 = CAN protocol kernel is receiving a message. Suspend 模式确认 (SMA) 0 = normal operation 1 = CAN module has entered suspend mode. Note: Suspend mode is activated by the debugger when the DSP is not in run mode. 发送模式 (TM) 0 = CAN protocol kernel is not transmitting a message. 1 = CAN protocol kernel is transmitting a message.
CAN 发送错误计数寄存器 (CANTEC) – 0x00601A CAN 接受错误计数寄存器 (CANREC) – 0x00601C 15 16 31 reserved Transmit Error Counter (TEC) Value TEC is incremented or decremented according to the CAN protocol specification TEC CAN 接受错误计数寄存器 (CANREC) – 0x00601C 15 16 31 reserved Receive Error Counter (REC) Value REC is incremented or decremented according to the CAN protocol specification REC
CAN 全局中断屏蔽寄存器 (CANGIM) – 0x006020 15 16 31 reserved Res. GIL WLIM EPIM BOIM RMLIM WUIM WDIM AAM I0EN I1EN 1 14 13 12 11 10 9 8 7 3 2 TCOM MTOM 17 18 Interrupt Mask Bits: MTOM = 邮箱超时中断屏蔽位 TCOM = 时间标记计数器移除 AAM = 失败相应 WDIM = 写拒绝 WUIM = 唤醒中断 RMLIM = 接受消息丢失中断 BOIM = 总线关闭中断 EPIM = 被动错误中断 WLIM = 警告标志中断 Interrupt Mask Bits 0 = Interrupt disabled 1 = Interrupt enabled 全局中断 (GIL):TCOF,WDIF,WUIF,BOIF,WLIF 0 = mapped into HECC_INT_REQ[0] line – GIF0 1 = mapped into HECC_INT_REQ[1] line – GIF1 Interrupt 1 Enable (I1EN) 0 = HECC_INT_REQ[1] line is disabled 1 = HECC_INT_REQ[1] line is enabled Interrupt 0 Enable (I0EN) 0 = HECC_INT_REQ[0] line is disabled 1 = HECC_INT_REQ[0] line is enabled
CAN 全局中断标志0/1寄存器 (CANGIF0/1) – 0x00601E 31 18 17 16 reserved MTOF0 TCOF0 15 14 13 12 11 10 9 8 7-5 4 3 2 1 GMIF0 AAIF0 WDIF0 WUIF0 RMLIF0 BOIF0 EPIF0 WLIF0 Res. MIV0.4 MIV0.3 MIV0.2 MIV0.1 MIV0.0 Interrupt Flag Bits: MTOF0/1 = Mailbox Timeout Flag TCOF0 /1 = Timestamp Counter Overflow Flag AAIF0/1 = Abort Acknowledge Interrupt Flag WDIF0/1 = Write Denied Interrupt Flag WUIF0/1 = Wake-up Interrupt Flag RMLIF0/1 = Receive message lost Interrupt Flag BOIF0/1 = Bus Off Interrupt Flag EPIF0/1 = Error Passive Interrupt Flag WLIF0/1 = Warning level Interrupt Flag Interrupt Flag Bits 0 = Interrupt has not occurred 1 = Interrupt has occurred 全局邮箱中断标志 (GMIF0/1): 1=某个邮箱成功发送或接受一个消息 0=没有发送或接受任何消息 邮箱中断矢量位 (MIV0/1): 指出了置位全局邮箱中断标志的邮箱号
CAN 邮箱中断屏蔽寄存器 (CANMIM) – 0x006024 31 16 CANMIM[31:16] 15 CANMIM[15:0] 邮箱中断屏蔽位 (MIM) 0 = mailbox interrupt is disabled. 1 = mailbox interrupt is enabled. An Interrupt is generated if a message has been transmitted successfully or if a message has been received without an error. CAN Mailbox Interrupt Level Register (CANMIL) – 0x006026 31 16 CANMIL[31:16] 15 CANMIL[15:0] 邮箱中断级别寄存器 (MIL) 0 = mailbox interrupt is generated on HECC_INT_REQ[0] line. 1 = mailbox interrupt is generated on HECC_INT_REQ[1] line.
CAN 覆盖保护控制寄存器 (CANOPC) – 0x006028 15 16 31 CANOPC[15:0] CANOPC[31:16] 覆盖保护控制位 (MIM) 0 = 如果OPC.n没有置位,则旧的消息将被新的消息覆盖 1 = 如果被置位,则旧的消息被保护,不能被覆盖 Note:检查下一个匹配的邮箱,如果没有则新的消息被丢弃
CAN I/O 发送IO控制寄存器(CANTIOC) – 0x00602A 31 16 reserved 15 3 2 reserved TXFUNC reserved TXFUNC 0 = 保留 1 = CANTX is used for CAN transmit functions.
CAN I/O 接受IO控制寄存器 (CANRIOC) – 0x00602C 31 16 reserved 15 3 2 reserved RXFUNC reserved RXFUNC 0 = reserved 1 = CANRX is used for CAN receive functions.
CAN 超时控制寄存器 (CANTOC) – 0x006030 CAN 超时状态寄存器 (CANTOS) – 0x006032 31 TOC[31:0] 超时控制位 (TOC) 0 = 邮箱禁止超时功能 1 = 使能邮箱超时功能 Note:在置位TOC.n位之前,相应的MOTO寄存器应该装载与TSC有关的超时值 CAN 超时状态寄存器 (CANTOS) – 0x006032 31 TOS[31:0] 超时状态标志 (TOS) 0 = 没有超时或者超时被禁止 1 = 邮箱超值,计数值大于或等于设置的超时值
CAN 局部接受屏蔽寄存器(LAMn) 0x00 6040 - 0x00 607F 0 = 存储在邮箱中的标识位决定着接受哪一个消息 1 = 可以接受扩展帧和标准帧 扩展帧: LAM中29bit都被用于做过滤操作 标准帧:仅仅使用第一个11bit(28-18) 31 30-29 28 16 LAMI reserved LAMn[28:16] 15 LAMn[15:0] LAMn[28-0]: 输入消息的标识符屏蔽位 1 = don’t care ( accept 1 or 0 for this bit position ) of incoming identifier. 0 = 接受的标识符的比特位值必须与MSGID寄存器中的相应的标识符匹配 Note: There are two operating modes of the CAN module : “HECC” and “SCC”. In “SCC” (default after reset ) LAM0 is used for mailboxes 0 to 2, LAM3 is used for mailboxes 3 to 5 and the global acceptance mask (CANGAM) is used for mailboxes 6 to 15. In “HECC” ( CANMC:13 = 1) each mailbox has its own mask register LAM0 to LAM31.
CAN 消息对象标志寄存器 0x00 6080 - 0x00 60BF 当相应邮箱的数据被成功发送和接受后,该寄存器会保持TSC的值, 31 16 MOTSn[31:16] 15 MOTSn[15:0] 当相应邮箱的数据被成功发送和接受后,该寄存器会保持TSC的值, 每个邮箱都有自己的MOTS寄存器。
CAN 消息超时寄存器 0x00 60C0 - 0x00 60FF 该寄存器保存使邮箱成功发送接受操作的TSC寄存器的超时值 31 16 MOTOn[31:16] 15 MOTOn[15:0] 该寄存器保存使邮箱成功发送接受操作的TSC寄存器的超时值 如果超过所设置的超时值,则, CANTOS相应位就置位(由CANTOC控制 只有在TOC-N中置位才使能邮箱N哦超时功能)
CAN 消息标识符寄存器 MSGID0x00 6100 - 0x00 61FF 31 30 29 28 16 15 IDE AME AAM IDn[28:16] IDn[15:0] Message Identifier Standard Frames : IDn[28:18] are used Extended Frames : IDn[28:0] are used Auto Answer Mode Bit ( transmitter only) 0 = mailbox does not reply to remote requests. 1 = if a matching Remote Request is received, the contents of this mailbox will be sent. Acceptance Mask Enable Bit ( receiver only) 0 = no Acceptance Mask used. All identifier bits must match to receive the message 1 = the corresponding Acceptance Mask is used) IDE 标识符扩展位。根据AMI位的取值不同,IDE位的功能将有所变化 AMI=1 接受邮箱的IDE位可以不必考虑,因为要接受邮箱的IDE位会被所发送消息的IDE位覆盖 为了接受消息,必须满足过滤标准 要进行比较的比特位数是所发送消息的IDE位值的 函数 AMI=0 接受邮箱的IDE位决定着要进行比较的比特位数 过滤作用失效。为了接受消息,MSGIDs必须逐位的进行匹配 要进行比较的比特位数是所发送消息的IDE位值的函数 IDE位定义的变化取决于不同的AMI位的取值 IDE=1接受的消息有一个扩展标识符号 IDE=0接受的消息有一个标准标识符 IDE=1要被接受的消息必须有一个扩展标识符 IDE=0要被接受的消息必须有一个标准标识符 Identifier Extension Bit 0 = Standard Identifier (11 Bits) 1 = Extended Identifier (29 Bits) MID0[15:0] = address 0x00 6100 MID0[31:16] = address 0x00 6101
CAN消息控制寄存器 MSGCTRL@0x00 6100 - 0x00 61FF 31 16 15 13 12 8 7 5 4 3 reserved reserved TPL reserved RTR DLC 发送优先级定位 5bit定位发送邮箱对于其他31个邮箱的优先级 若2个邮箱优先级一样,则邮箱号大的先发送 Data Length Code Valid numbers are 0 to 8. 远程传输请求 0 = no RTR requested. 1 = for receiver mailboxes: if TRS bit is set, a remote frame is transmitted and the corresponding data frame will be received in the same mailbox. (clear by CAN model) 1 = for transmit mailboxes: if TRS bit is set, a remote frame is transmitted but the corresponding data frame has to be received in another mailbox. MCF0[15:0] = address 0x00 6102 MCF0[31:16] = address 0x00 6103
CAN 消息数据寄存器 MDL@0x00 6100 - 0x00 61FF Message Data Low (MDL) Register with DBO = 0 Mailbox n 31 24 23 16 15 8 7 Data Byte 0 Data Byte 1 Data Byte 2 Data Byte 3 Message Data Low (MDL) Register with DBO = 1 Mailbox n 31 24 23 16 15 8 7 Data Byte 3 Data Byte 2 Data Byte 1 Data Byte 0 MDL0[15:0] = address 0x00 6104 MDL0[31:16] = address 0x00 6105
CAN 消息数据寄存器 MDH@0x00 6100 - 0x00 61FF Message Data High (MDH) Register with DBO = 0 Mailbox n 31 24 23 16 15 8 7 Data Byte 4 Data Byte 5 Data Byte 6 Data Byte 7 Message Data High (MDH) Register with DBO = 1 Mailbox n 31 24 23 16 15 8 7 Data Byte 7 Data Byte 6 Data Byte 5 Data Byte 4 MDL0[15:0] = address 0x00 6106 MDL0[31:16] = address 0x00 6107
第五部分:F2812 时钟与控制系统
C28x GPIO 寄存器结构 GPIO A GPIO A Mux Control GPIO A Direction Control Register (GPAMUX) GPIO A Direction Control Register (GPADIR) GPIO A GPIO B Mux Control Register (GPBMUX) GPIO B Direction Control Register (GPBDIR) GPIO B GPIO D Mux Control Register (GPDMUX) GPIO D Direction Control Register (GPDDIR) GPIO D GPIO E Mux Control Register (GPEMUX) GPIO E Direction Control Register (GPEDIR) GPIO E GPIO F Mux Control Register (GPFMUX) GPIO F Direction Control Register (GPFDIR) GPIO F GPIO G Mux Control Register (GPGMUX) GPIO G Direction Control Register (GPGDIR) GPIO G Internal Bus GPIO A, B, D, E include Input Qualification feature
C28x GPIO 引脚分配 Note: GPIO are pin functions at reset GPIOA0 / PWM1 GPIOA1 / PWM2 GPIOA2 / PWM3 GPIOA3 / PWM4 GPIOA4 / PWM5 GPIOA5 / PWM6 GPIOA6 / T1PWM_T1CMP GPIOA7 / T2PWM_T2CMP GPIOA8 / CAP1_QEP1 GPIOA9 / CAP2_QEP2 GPIOA10 / CAP3_QEPI1 GPIOA11 / TDIRA GPIOA12 / TCLKINA GPIOA13 / C1TRIP GPIOA14 / C2TRIP GPIOA15 / C3TRIP GPIO B GPIOB0 / PWM7 GPIOB1 / PWM8 GPIOB2 / PWM9 GPIOB3 / PWM10 GPIOB4 / PWM11 GPIOB5 / PWM12 GPIOB6 / T3PWM_T3CMP GPIOB7 / T4PWM_T4CMP GPIOB8 / CAP4_QEP3 GPIOB9 / CAP5_QEP4 GPIOB10 / CAP6_QEPI2 GPIOB11 / TDIRB GPIOB12 / TCLKINB GPIOB13 / C4TRIP GPIOB14 / C5TRIP GPIOB15 / C6TRIP GPIO D GPIOD0 / T1CTRIP_PDPINTA GPIOD1 / T2CTRIP / EVASOC GPIOD5 / T3CTRIP_PDPINTB GPIOD6 / T4CTRIP / EVBSOC GPIO E GPIOE0 / XINT1_XBIO GPIOE1 / XINT2_ADCSOC GPIOE2 / XNMI_XINT13 GPIO F GPIOF0 / SPISIMOA GPIOF1 / SPISOMIA GPIOF2 / SPICLKA GPIOF3 / SPISTEA GPIOF4 / SCITXDA GPIOF5 / SCIRXDA GPIOF6 / CANTXA GPIOF7 / CANRXA GPIOF8 / MCLKXA GPIOF9 / MCLKRA GPIOF10 / MFSXA GPIOF11 / MFSRA GPIOF12 / MDXA GPIOF13 / MDRA GPIOF14 / XF GPIO G GPIOG4 / SCITXDB GPIOG5 / SCIRXDB Note: GPIO are pin functions at reset GPIO A, B, D, E include Input Qualification feature
C28x GPIO 功能框图 • • • • . GPxSET GPxCLEAR GPxTOGGLE Primary Peripheral Function GPxDAT Out I/O DAT Bit (R/W) • In • • MUX Control Bit 0 = I/O Function 1 = Primary Function 1 • I/O DIR Bit 0 = Input 1 = Output GPxMUX Pin GPxDIR 1、经过GPXDAT寄存器,可读取引脚的任何状态,不管处于什么操作方式 2、一些选择的输入信号被QUALxCLK限定,它是高速外设时钟(HSPCLK)的一个预定标版本。GPxQUAL寄存器说明了合格的采样周期。采样窗口位6个采样周期。当所有的采样都相同时(都为1或者为0),输出才能够改变。这种特性能够去除输入信号中所有混有的不希望的噪音 QUALPRD reserved 7 - 0 15 - 8 GPxQUAL 00h no qualification (SYNC to SYSCLKOUT) 01h QUALPRD = SYSCLKOUT/2 02h QUALPRD = SYSCLKOUT/4 FFh QUALPRD = SYSCLKOUT/510 . Some digital I/O and peripheral I/O input signals include an Input Qualification feature
C28x GPIO MUX/DIR 寄存器 Address Register Name 70C0h GPAMUX GPIO A Mux Control Register 70C1h GPADIR GPIO A Direction Control Register 70C2h GPAQUAL GPIO A Input Qualification Control Register 70C4h GPBMUX GPIO B Mux Control Register 70C5h GPBDIR GPIO B Direction Control Register 70C6h GPBQUAL GPIO B Input Qualification Control Register 70CCh GPDMUX GPIO D Mux Control Register 70CDh GPDDIR GPIO D Direction Control Register 70CEh GPDQUAL GPIO D Input Qualification Control Register 70D0h GPEMUX GPIO E Mux Control Register 70D1h GPEDIR GPIO E Direction Control Register 70D2h GPEQUAL GPIO E Input Qualification Control Register 70D4h GPFMUX GPIO F Mux Control Register 70D5h GPFDIR GPIO F Direction Control Register 70D8h GPGMUX GPIO G Mux Control Register 70D9h GPGDIR GPIO G Direction Control Register GPADIR=0,设定相应的GPIO引脚为输入。GPADIR=1,设定相应的GPIO引脚为输出 GPIOQUAL:改善输入信号
C28x GPIO 数据寄存器 Address Register Name 70E0h GPADAT GPIO A Data Register 70E1h GPASET GPIO A Set Register 70E2h GPACLEAR GPIO A Clear Register 70E3h GPATOGGLE GPIO A Toggle Register 70E4h GPBDAT GPIO B Data Register 70E5h GPBSET GPIO B Set Register 70E6h GPBCLEAR GPIO B Clear Register 70E7h GPBTOGGLE GPIO B Toggle Register 70ECh GPDDAT GPIO D Data Register 70EDh GPDSET GPIO D Set Register 70EEh GPDCLEAR GPIO D Clear Register 70EFh GPDTOGGLE GPIO D Toggle Register 70F0h GPEDAT GPIO E Data Register 70F1h GPESET GPIO E Set Register 70F2h GPECLEAR GPIO E Clear Register 70F3h GPETOGGLE GPIO E Toggle Register 70F4h GPFDAT GPIO F Data Register 70F5h GPFSET GPIO F Set Register 70F6h GPFCLEAR GPIO F Clear Register 70F7h GPFTOGGLE GPIO F Toggle Register 70F8h GPGDAT GPIO G Data Register 70F9h GPGSET GPIO G Set Register 70FAh GPGCLEAR GPIO G Clear Register 70FBh GPGTOGGLE GPIO G Toggle Register GPADAT/GPASET/GPACLEAR/GPATOGGLE寄存器与I/O映射寄存器GPAMUX及GPADIR寄存器有相同的位 GPADAT寄存器是可读写寄存器。读次寄存器将返回限定后的输入I/O信号的状态。写此寄存器将吧对应的状态作为设置的的I/O哦信号输出 GPASET寄存器是只写寄存器(读返回0).想对应的I/O信号段写1将使I/O信号位高电平,写0无效 GPACLEAR寄存器是只写寄存器(读返回0).想uiying的I/O信号端写1将使I/O位低电平,写0无效 GPATOGGLE寄存器是只写寄存器(读返回0).想对应的I/O信号端写1将触发I/O信号,写0无效。
C28x Osc / PLL 时钟模块 PLLCR @ 7021h Watchdog Module X1 /CLKIN CLKIN C28x Core crystal • OSCCLK XTAL OSC SYSCLKOUT • • MUX PLL Clock Module 4-bit PLL Select X2 PLLCLK /2 1 HISPCP LOSPCP XF_XPLLDIS HSPCLK LSPCLK DIV3 DIV2 DIV1 DIV0 Clock Frequency (CLKIN) 0 0 0 0 OSCCLK x 1 / 2 (no PLL) 0 0 0 1 OSCCLK x 1 / 2 0 0 1 0 OSCCLK x 2 / 2 0 0 1 1 OSCCLK x 3 / 2 0 1 0 0 OSCCLK x 4 / 2 0 1 0 1 OSCCLK x 5 / 2 0 1 1 0 OSCCLK x 6 / 2 0 1 1 1 OSCCLK x 7 / 2 1 0 0 0 OSCCLK x 8 / 2 1 0 0 1 OSCCLK x 9 / 2 1 0 1 0 OSCCLK x 10 / 2 1、PLL旁路 2、PLL使能 PLLCR bits 15:4 reserved
外设时钟控制寄存器 PCLKCR @ 701Ch Module Enable Clock Bit 0 = disable reserved 1 2 3 4 5 6 7 EVA ENCLK EVB ADC ECAN SPIA SCIB 8 9 10 11 12 13 14 15 SCIA MCBSP HSPCLK LSPCLK
高/低速外设时钟预定标寄存器 HISPCP @ 701Ah / LOSPCP @ 701Bh 2 15 - 3 HSPCLK reserved 2 15 - 3 LSPCLK reserved H/LSPCLK2 H/LSPCLK1 H/LSPCLK0 Peripheral Clock Frequency 0 0 0 SYSCLKOUT / 1 0 0 1 SYSCLKOUT / 2 (default HISPCP) 0 1 0 SYSCLKOUT / 4 (default LOSPCP) 0 1 1 SYSCLKOUT / 6 1 0 0 SYSCLKOUT / 8 1 0 1 SYSCLKOUT / 10 1 1 0 SYSCLKOUT / 12 1 1 1 SYSCLKOUT / 14
看门狗定时器 如果CPU崩溃,则复位系统 在 复位之后 (30 M外部时钟)3ms之内看门狗必须被启用或者禁止 看门狗计数器独立与CPU 如果计数器溢出则复位或中断被触发 为防止计数器溢出,CPU必须周期性的向看门狗KEY寄存器写入0X55+0XAA序列 在 复位之后 (30 M外部时钟)3ms之内看门狗必须被启用或者禁止
看门狗定时器模块 • • • • • • • • • • • • 6 - Bit Free - Running Counter /64 111 SCSR . 0 OSCCLK 6 - Bit Free - Running Counter /32 110 WDOVERRIDE /16 101 WDPS • /8 100 /512 WDCR . 2 - 0 /4 011 • • • /2 010 WDCR . 6 CLR 001 000 WDDIS • • WDCNTR . 7 - 0 System Reset • WDFLAG 8 - Bit Watchdog Counter One-Cycle Delay WDCR . 7 CLR • WDRST SCSI:系统状态和控制寄存器,当WDOVERRIDE=1,系统允许用户修改WDCR位WDDIS WDCNTR:看门狗计数寄存器。存放看门狗计数器的当前值,8位计数值以WDCLK时钟连续增加。 WDDIS:看门狗禁止位,写禁止看门狗 WDPS:OSCCLK/512的再分频 GOOD KEY:正确的KEY,复位8位的计数器 BAD KEKY:错误的key WDENINT:1,WDRST输出信号无效并且看门狗中断输出信号有效。0,WDRST输出信号有效,WDINT输出信号无效 WDFLAG:看门狗复位状态标志位。如果该位置位,标识一个看门狗复位WDRST产生了额驸为条件。如果为0,则是一个外部器件或加电复位条件。写1清除 BAD KEY||WDCHK不等于101||计数器溢出=复位 Output Pulse WDCR . 5 - 3 WDCHK 2-0 WDINT SCSR .1 55 + AA Detector Good Key • • 3 WDENINT / Bad Key • • / 3 Bad WDCR Key Watchdog Reset Key Register 1 0 1 WDKEY . 7 - 0
看门狗定时控制寄存器 WDCR @ 7029h WD Flag Bit Gets set when the WD causes a reset Writing a 1 clears this bit Writing a 0 has no effect 15 - 8 7 6 5 4 3 2 1 reserved WDFLAG WDDIS WDCHK2 WDCHK1 WDCHK0 WDPS2 WDPS1 WDPS0 Logic Check Bits Write as 101 or reset immediately triggered WD Prescale Selection Bits Watchdog Disable Bit (Functions only if WD OVERRIDE bit in SCSR is equal to 1)
看门狗复位密钥寄存器 WDKEY @ 7025h reserved D7 D6 D5 D4 D3 D2 D1 D0 允许写入的数值: 15 - 8 7 6 5 4 3 2 1 reserved D7 D6 D5 D4 D3 D2 D1 D0 允许写入的数值: 55h – 在AAH之后的写入55使能计数器 AAh – 如果复位使能则计数器清零 写入其他任何值将复位CPU
WDKEY 写操作 Sequential Step 1 2 3 4 5 6 7 8 9 10 11 Value Written to WDKEY AAh 55h 23h Result No action WD counter enabled for reset on next AAh write WD counter is reset CPU reset triggered due to improper write value
系统控制和状态寄存器 SCSR @ 7022h WD Override (protect bit) WD Interrupt Status After RESET - bit gives user ability to disable WD by setting WDDIS bit=1 in WDCR clear only bit and defaults to 1 after reset 0 = protects WD from being disabled by s/w bit cannot be set to 1 by s/w (clear-only by writing 1) 1 = (default value) allows WD to be disabled using WDDIS bit in WDCR once cleared, bit cannot set to 1 by s/w 1 2 15 - 3 WD OVERRIDE WDENINT WDINTS reserved WD Interrupt Status (read only) WD Enable Interrupt 0 = WD generates a DSP reset 1 = WD generates a WDINT interrupt 0 = active 1 = not active
低功耗模式 Low Power Mode CPU Logic Clock Peripheral Logic Clock Watchdog PLL / OSC Normal Run IDLE STANDBY HALT on off on off on off on off
Low Power Mode Selection 低功耗方式控制0寄存器 LPMCR0 @ 701Eh Qualify before waking from STANDBY mode 000000 = 2 OSCCLKs 000001 = 3 OSCCLKs 111111 = 65 OSCCLKS . 1 7 - 2 15 - 8 LPM0 LPM1 QUALSTDBY reserved Low Power Mode Selection 00 = Idle 01 = Standby 1x = Halt Low Power Mode Entering 1. Set LPM bits 2. Enable desired exit interrupt(s) 3. Execute IDLE instruction 4. The Power down sequence of the hardware depends on LP mode
低功耗模式控制1寄存器 LPMCR1 @ 701Fh Wake device from STANDBY mode 0 = disable 15 14 13 12 11 10 9 8 CANRXA SCIRXB SCIRXA C6TRIP C5TRIP C4TRIP C3TRIP C2TRIP 7 6 5 4 3 2 1 C1TRIP T4CTRIP T3CTRIP T2CTRIP T1CTRIP WDINT XNMI XINT1 Wake device from STANDBY mode 0 = disable 1 = enable
低功耗模式退出 RESET yes External or Wake up Interrupts yes no Enabled Exit Interrupt RESET yes External or Wake up Interrupts yes no Enabled Peripheral Interrupts yes no Low Power Mode IDLE STANDBY HALT Note: External or Wake up include XINT1, PDPINT, TxCTRIP, CxTRIP NMI, CAN, SPI, SCI, WD