-
2021-03-27 10:38:57
CAN介绍:
1.1Mb波特率
2.32个邮箱,可配置为接收和发送
3.0 - 8 字节的数据
4. 可编程中断
5. 时间戳功能CAN结构:
主要由CAN控制器 , CAN的缓冲器(buffer), CAN邮箱构成CAN工作过程简介:
接收:- CPU通过寄存器对CAN控制器和邮箱进行配置,配置邮箱为接收邮箱,接收邮箱的ID号,mask 等
- 当接收到总线的一条数据后,先将这条数据存入buffer中
- CAN控制器提取buffer中消息,按照高优先级邮箱号依次比较。例如,CAN控制器将buffer的一条消息和31号邮箱的ID(包含mask)比较,如果匹配成功,则将这个消息给31号,如果不成功,则去找30号邮箱比较。如果所有邮箱全部匹配失败,则这条消息被丢弃。
发送:
1.CPU通过寄存器配置邮箱为发送邮箱,邮箱ID号,数据等,CPU将TRS[n]置位
2. 控制器接收到CPU命令,将这条消息存储到发送缓冲器(buffer)中
3 .当CAN总线空闲时,CAN控制器根据优先级,将buffer中的消息,依次发送出去。注意点:
1.CAN控制寄存器是32位都和写的!
2.关于接收的问题,如果一个邮箱接收之后,CPU没有来得及去读取这个数据,结果又有一条匹配的数据来了。如果这个邮箱的允许消息覆盖,则上一条数据被新来的消息覆盖掉,如果不允许覆盖,则CAN控制器会这条消息和其他邮箱比较。更多相关内容 -
DSP 外设篇
2021-08-31 19:02:17DSP-280025 PWM 调试 #include "f28002x_device.h" #include "f28002x_examples.h" /****************************************************************************************************/ #define CPU_...DSP-280025 PWM 调试
#include "f28002x_device.h"
#include "f28002x_examples.h"/****************************************************************************************************/
#define CPU_CLOCK 100e6 //系统时钟100MHz
//#define USR_PWM_FREQ 1039 //PWM 设定频率 1K ,修正系数0.9623
#define PWM_CORRECTION_FACTOR 1.039
//#define PWM_PERIOD (CPU_CLOCK/(2*USR_PWM_FREQ)) //周期寄存器的值, 向上向下计数,所以*2
#define TBCTLVAL 0x200E //控制寄存器的值//#define DUTY_CIRCUL 60
//#define PWM_CMPA_VALUE (PWM_PERIOD*DUTY_CIRCUL/100)
#define ON_GET_PWM_TIMBASW_PERIOD(usr_PWM_Freq) (CPU_CLOCK/(2 * usr_PWM_Freq))
#define ON_GET_PWM_CMPA(usr_PWM_Freq,usr_PWM_DutyHigh) ((CPU_CLOCK/(2 * usr_PWM_Freq)) * usr_PWM_DutyHigh / 100)
//static void bsp_s_ePWMGpioInit(void)
{
EALLOW;
/*设置时钟允许*/
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1; //BIT2 TBCLKSYNC
CpuSysRegs.PCLKCR2.bit.EPWM5 = 1; // ePWM5GpioCtrlRegs.GPAPUD.bit.GPIO8 = 0; //使能GPIO8 内部上拉
GpioCtrlRegs.GPAQSEL1.bit.GPIO8 = 0; // Synch to SYSCLKOUT GPIO8 (ePWM5_A)
GpioCtrlRegs.GPAMUX1.bit.GPIO8 = 1; // 00:GPIO8 01:ePWM5_A 10:Reserved 11:Reserved
GpioCtrlRegs.GPADIR.bit.GPIO8 = 1;
EDIS;
}//This function will initialize the pwm module with the
//specified frequence and duty,
//And start the pwm module.
void bsp_ePWMSetUp(float _pwmFreq,float _pwmDutyHigh)
{
EALLOW;
//Enable the clock
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1; //BIT2 TBCLKSYNC
CpuSysRegs.PCLKCR2.bit.EPWM5 = 1; // ePWM5bsp_s_ePWMGpioInit(); //初始化GPIO
#if 1
//时间基准寄存器
EPwm5Regs.TBPRD = ON_GET_PWM_TIMBASW_PERIOD(_pwmFreq) - 1; // 时基计数周期
EPwm5Regs.TBPHS.all = 0; // Set Phase register to zero
EPwm5Regs.TBCTR = 0; //Clear TB counter,计数器初始值为零EPwm5Regs.CMPA.bit.CMPA = ON_GET_PWM_CMPA(_pwmFreq,_pwmDutyHigh) * PWM_CORRECTION_FACTOR; //设定Capture A 的捕获值
//设置TBCLK = ?M
EPwm5Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // TBCLK = SYSCLK
EPwm5Regs.TBCTL.bit.CLKDIV = TB_DIV1;//设置计数模式
EPwm5Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; //UP_DOWMCount Mode//设定动作
EPwm5Regs.AQCTLA.bit.CAU = AQ_CLEAR; //当计数器等于主CMPA寄存器并且计数递增时动作:计数器等于CPMA时ePWMA输出变低
EPwm5Regs.AQCTLA.bit.CAD = AQ_SET; //当计数器等于主CMPA寄存器并且计数递减时动作:计数器等于周期值时wPWMA输出变高EPwm5Regs.CMPCTL.bit.SHDWAMODE = CC_IMMEDIATE;
//EPwm5Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm5Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // load on CTR = Zero
//EPwm5Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // load on CTR = Zero
//EPwm5Regs.AQCTLA.bit.ZRO = AQ_SET;EPwm5Regs.TBCTL.bit.FREE_SOFT = 2;
EPwm5Regs.TBCTL.bit.PHSEN = TB_DISABLE; //Phase loading disabled
EPwm5Regs.TBCTL.bit.PRDLD = TB_SHADOW; //主周期寄存器EPwm5Regs.TZCLR.all = 0x0000;
EPwm5Regs.TZSEL.all = 0x0000; //TZ2使能 0x0200
EPwm5Regs.TZCTL.all = 0x0000;EPwm5Regs.AQSFRC.all = 0x0;
EPwm5Regs.AQCSFRC.all = 0x0;
EPwm5Regs.DBCTL.all = 0x0; //If trip,Do nothing, no action is taken on EPWMxA.
#endif
EDIS;
}void bsp_ePWM_UpdateFreqAndPeriod(float _pwmFreq,float _pwmDutyHigh)
{
EPwm5Regs.TBPRD = ON_GET_PWM_TIMBASW_PERIOD(_pwmFreq) - 1; // 时基计数周期
EPwm5Regs.CMPA.bit.CMPA = ON_GET_PWM_CMPA(_pwmFreq,_pwmDutyHigh)*PWM_CORRECTION_FACTOR; //设定Capture A 的捕获值
}void bsp_ePWMSetStop()
{
EPwm4Regs.CMPA.bit.CMPA = 5000;
} -
带自举功能的DSP外设扩展模块设计
2021-04-16 16:45:34没有AD、DA 等常用外设且缺少程序存储器,故其应用系统通常需进行外设扩展模块与自举模块设计,针对传统解决方案将两个模块分别实现存在扩展器件多、系统集成度不高等问题,本文提出了一种带自举功能的DSP 外设扩展... -
DSP中的基于导航接收机的DSP外设存储器行进测试技术
2020-10-21 01:13:52因此,需要一种快速有效的存储器测试算法对DSP外设存储器进行实时功能验证和检测,确保器件没有物理故障[1].本方法专门针对存储器中AF、SAF、SOF、TF、CF故障的检测,如图1中虚线框内所示。 在已有的故障检测... -
DSP外设+基础实例例程大全
2014-05-09 11:42:08包括本网站dsp搜到的全部资料 自己感觉一个一个的下太麻烦了 所以打包之 -
dsp28335各外设实例
2019-05-08 14:44:12dsp28335实例,包含adc,dma,ecan,epwm,eqep,flash等外设模块实例 -
C6000dsp外设综述
2015-03-09 19:07:08TI公司C6000DSP外设的综合介绍,重要包括EMIF接口、EDMA控制器、McBSP、HPI接口等 -
DSP 外设寄存器的定义(以TMS320F28035例程代码为例)——老干妈笔记
2020-07-29 14:58:07DSP外设寄存器定义: 第一步:采用结构体、共用体、位域结构定义寄存器变量; 第二步:通过 pragma 伪指令将寄存器变量分配到数据段; 第三步:通过 MEMORY 伪指令指示寄存器的实际硬件空间; 第四步:通过 ...传统方法:
#define CPUTIMER0 (volatile unsigned long*) 0x0c00
缺点: 不便对寄存器的值进行位操作;
无法单独查看寄存器的某一位。DSP外设寄存器定义:
- 第一步:采用结构体、共用体、位域结构定义寄存器变量;
- 第二步:通过 pragma 伪指令将寄存器变量分配到数据段;
- 第三步:通过 MEMORY 伪指令指示寄存器的实际硬件空间;
- 第四步:通过 SECTION 伪指令将寄存器数据段分配到实际硬件空间。
举例:【以 PCLKCR1 外设时钟控制寄存器1 为例(TMS320F2803x)】
PCLKCR1 外设时钟控制寄存器1【TMS320F2803x】 第一步:定义寄存器变量
- 1、位域结构体定义外设时钟控制寄存器1 PCLKCR1
struct PCLKCR1_BITS { // bits description Uint16 EPWM1ENCLK:1; // 0 Enable SYSCLKOUT to EPWM1 Uint16 EPWM2ENCLK:1; // 1 Enable SYSCLKOUT to EPWM2 Uint16 EPWM3ENCLK:1; // 2 Enable SYSCLKOUT to EPWM3 Uint16 EPWM4ENCLK:1; // 3 Enable SYSCLKOUT to EPWM4 Uint16 EPWM5ENCLK:1; // 4 Enable SYSCLKOUT to EPWM5 Uint16 EPWM6ENCLK:1; // 5 Enable SYSCLKOUT to EPWM6 Uint16 EPWM7ENCLK:1; // 6 Enable SYSCLKOUT to EPWM7 Uint16 rsvd1:1; // 7 reserved Uint16 ECAP1ENCLK:1; // 8 Enable SYSCLKOUT to ECAP1 Uint16 rsvd2:5; // 13:9 reserved Uint16 EQEP1ENCLK:1; // 14 Enable SYSCLKOUT to EQEP1 Uint16 rsvd3:1; // 15 reserved };
- 2、共用体定义外设时钟控制寄存器1 PCLKCR1
union PCLKCR1_REG { Uint16 all; struct PCLKCR1_BITS bit; };
- 3、结构体定义系统控制结构体,包含系统控制所有寄存器
struct SYS_CTRL_REGS { union XCLK_REG XCLK; // 0: XCLKOUT Control union PLLSTS_REG PLLSTS; // 1: PLL Status Register union CLKCTL_REG CLKCTL; // 2: Clock Control Register Uint16 PLLLOCKPRD; // 3: PLL Lock Period Register union INTOSC1TRIM_REG INTOSC1TRIM; // 4: Internal Oscillator 1 Trim Uint16 rsvd1; // 5: reserved union INTOSC2TRIM_REG INTOSC2TRIM; // 6: Internal Oscillator 2 Trim Uint16 rsvd2[2]; // 8-7 // // 9: Peripheral clock control register 2 // union PCLKCR2_REG PCLKCR2; Uint16 rsvd3; // 10 // // 11: Low-speed peripheral clock pre-scaler // union LOSPCP_REG LOSPCP; // // 12: Peripheral clock control register // union PCLKCR0_REG PCLKCR0; // // 13: Peripheral clock control register // union PCLKCR1_REG PCLKCR1; // // 14: Low-power mode control register 0 // union LPMCR0_REG LPMCR0; Uint16 rsvd4; // 15: reserved union PCLKCR3_REG PCLKCR3; // 16: Peripheral clock register union PLLCR_REG PLLCR; // 17: PLL control register // // No bit definitions are defined for SCSR because // a read-modify-write instruction can clear the WDOVERRIDE bit // Uint16 SCSR; //18: System control and status register Uint16 WDCNTR; //19: WD counter register Uint16 rsvd5; //20 Uint16 WDKEY; //21: WD reset key register Uint16 rsvd6[3]; //22-24 // // No bit definitions are defined for WDCR because // the proper value must be written to the WDCHK field // whenever writing to this register. // Uint16 WDCR; // 25: WD timer control register Uint16 rsvd7[6]; // 26-30 };
- 4、定义系统控制结构体变量
extern volatile struct SYS_CTRL_REGS SysCtrlRegs;
第二步: 将寄存器变量分配到数据段
代码位于:DSP2803x_GlobalVariableDefs.c
#ifdef __cplusplus #pragma DATA_SECTION("SysCtrlRegsFile") #else #pragma DATA_SECTION(SysCtrlRegs,"SysCtrlRegsFile"); #endif volatile struct SYS_CTRL_REGS SysCtrlRegs;
第三步: 指示寄存器的实际硬件空间
代码位于:DSP2803x_Headers_nonBIOS.cmd
MEMORY { PAGE 1: /* Data Memory */ SYSTEM : origin = 0x007010, length = 0x000020 /* System control registers */ }
表源:TMS320F2803x Piccolo™ Microcontrollers.pdf 第四步: 将寄存器数据段分配到实际硬件空间
代码位于:DSP2803x_Headers_nonBIOS.cmd
SECTIONS { /*** Peripheral Frame 2 Register Structures ***/ SysCtrlRegsFile : > SYSTEM, PAGE = 1 }
-
【DSP实验】DSP外设
2020-05-27 12:13:37 -
DSP28335外设驱动库
2020-12-22 22:01:38DSP28335外设源码 -
TI DSP 外设配置文件
2012-07-06 15:18:13TI DSP的配置、驱动、管理的驱动文件。 -
F2812DSP外设数据手册
2015-03-04 09:24:42TI的F2812系列DSP数据手册,包含其所有外设的数据手册; -
高速DSP串行外设接口设计
2020-11-07 21:11:56DSP(数字信号处理)的优势除了处理复杂的运算,特别适用于数字滤波、语音、视频、图象处理、通信以及高速实时测控系统中已成为现代信息处理技术的重要器件,极大地促进了信号处理和测控各个领域的学术研究、产品... -
2407 DSP外设例程
2010-10-18 13:43:512407 DSP外设例程 spi sci da timer can -
DSP 外设资料,新手学习用
2011-07-29 23:39:00DSP 外设资料,还是不错的,适和新手学习用 -
TMS320C54x DSP 外设连接~!!!
2009-07-30 21:03:11TMS320C54 dsp 外设 连接!!!!!!!!!!!!!! -
2407 DSP外设例程.rar
2009-07-13 12:11:582407 DSP外设例程.rar 2407 DSP外设例程.rar 2407 DSP外设例程.rar -
单片机与DSP中的Microchip首款配备多种外设PIC单片机可用于里程表
2020-11-27 01:22:59单片机和模拟半导体供应商Microchip Technology不久前宣布推出首款配备多种外设的通用闪存PIC单片机,有助于实现更具成本效益的风扇或小型电机控制。全新14引脚PIC16F616/610和8引脚PIC12F615/609单片机集成了多种... -
学习DSP外设之UART的配置和应用
2016-11-02 19:00:33一、Initialization The following steps are required to initialize the UART: 0.给UART模块上电 1.Perform the necessary device pin multiplexing setup (see your device-specific data manual). ... -
学习DSP外设之I2C的配置和应用
2016-10-26 16:34:23一、I2C的协议这里就不赘述了,随便搜一下就可以了解。 二、I2C的初始化 1.Enable I2C clock configure the PSC register(if it is driven by PSC)PSC相关说明可以查看手册 2. Place I2C in reset ... -
DSP与外设芯片速度匹配的CPLD实现-论文
2021-05-12 11:41:43DSP与外设芯片速度匹配的CPLD实现 -
TMS320C6000系列DSP的CPU与外设
2018-05-01 11:44:126000系列DSP的结构与外设知识介绍,能够提供关于DSP的一些详细知识。 -
DSP28335 外设时钟
2016-11-21 15:06:43TMS320F28335通过外部时钟信号、OSC和PLL产生倍频...为了实现低功耗和提供高低频率时钟信号,需要把SYSCLKOUT进一步分频,本章主要讲解了对SYSCLKOUT分频产生低频时钟信号和高频时钟信号,完成外设时钟初始化的过程。 -
单片机与DSP中的单片机必须了解的外设功能——定时器/中断功能
2020-10-16 00:49:19对这些与时间和时刻有关进行处理的外设功能就是定时器(图1)。 我们也可以不使用外设功能(硬件)的定时器,而是通过软件来计算时间。下面通过图2来说明使用软件来定时的示例,图中假设循环(重复... -
学习DSP外设之LCDC的配置和应用
2016-11-07 18:51:19看了这个外设的说明,发现没有initialion。。。那就从头介绍吧 一、 介绍说明 LCDC有两个独立的控制器,同步Raster Controller 和 异步LCD InterfaceDisplay Driver (LIDD) controller。 同步Raster Controller:... -
通信与网络中的基于DSP的串行外设通信的实现方法
2020-11-26 22:55:00摘 要:介绍了基于数字信号处理芯片TMS320F241的串行外设接口(SPI)与外设实现串行通信的方法,并以X5043为例,给出了用SPI实现电子标签功能的方法。 关键词:数字信号处理器(DSP);高速同步串行I/O口(SPI);串行... -
DSP2812的外设例程
2014-12-15 21:35:55DSP2812的外设标准驱动例程,含I2C,SPI,SCI,PWM,SPI_EEPROM,RTC,TIMER,AD,DA,CAN等。 -
单片机与DSP中的单片机必须了解的外设功能——GPIO/串行通信
2020-10-16 01:11:29活学活用单片机连载将介绍有效使用单片机外设功能的结构及使用方法,能让我们将能学到各种单片机共通的基本外设功能,并可广泛应用到各个方面。单片机仅靠CPU和内存是无法运行的!本文介绍 GPIO和串行通信。 ...