DSP28335学习记录(一)

DSP28335学习记录(一)本文记录dsp28335的各种外设的配置方法,常见模块的驱动方法,以及各种常见问题的解决方法,持续更新

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

本文记录dsp28335的各种外设的配置方法:

目录

1、时钟配置

1.0 关闭看门狗和写使能

1.1 系统时钟源配置

1.2 外设时钟

1.3 外部扩展接口时钟

1.4 其他外设时钟使能

2、GPIO配置


1、时钟配置

1.0 关闭看门狗和写使能

EALLOW; //写使能,写寄存器之前必须有
SysCtrlRegs.WDCR= 0x0068;  //关闭看门狗
EDIS; //写失能,写完之后关闭

DSP的寄存器是有保护的,修改所有寄存器,写使能都必须要打开,写完要关闭。

1.1 系统时钟源配置

时钟通道图,CPU最高支持150M,需要配置的地方:OSCOFF、PLLCR、DIVSEL。

DSP28335学习记录(一)

外部晶振是30M,CPU需要150M,所以需要5倍频。

PLL只有2,4,6,8,10倍频,所以通过先10倍频,再2分频,最后得到150M

// Initialize the PLL control: PLLCR and DIVSEL
// DSP28_PLLCR and DSP28_DIVSEL are defined in DSP2833x_Examples.h
InitPll(DSP28_PLLCR,DSP28_DIVSEL);

DSP28_PLLCR = 10

DSP28_DIVSEL = 2

1.2 外设时钟

外设时钟分两种:高速外设时钟,低速外设时钟。

DSP28335学习记录(一)

  1. SPI-A、SCI-A/B/C的基时钟来源是主频通过LOSPCP(低频时钟寄存器)的分频而得到的。
  2. I2C-A的基时钟来源是直接来源于主时钟。
  3. GPIO的时钟不通过分频,直接为主频时钟。
  4. eCAN-A/B的基时钟来源于主频时钟的二分频。
  5. EPWM1~6、HRPWM 16、ECAP16、EQEP1~2的基时钟,直接来源于主时钟。
  6. McBSP-A/B的基时钟来源是主频通过LOSPCP(低频时钟寄存器)的分频而得到的。
  7. 12的通道的 12-Bit ADC 的基时钟来源是主频通过HISPCP(高频时钟寄存器)的分频而得到的。
  8. DMA的基时钟来源是直接来源于主时钟。

PS:LSPCLK最高为37.5Mhz、HSPCLK最高为75Mhz

1.3 外部扩展接口时钟

DSP28335学习记录(一)

// XCLKOUT to SYSCLKOUT ratio.  By default XCLKOUT = 1/4 SYSCLKOUT
// XTIMCLK = SYSCLKOUT/2
XintfRegs.XINTCNF2.bit.XTIMCLK = 1;
// XCLKOUT = XTIMCLK/2
XintfRegs.XINTCNF2.bit.CLKMODE = 1;
// Enable XCLKOUT
XintfRegs.XINTCNF2.bit.CLKOFF = 0;

1.4 其他外设时钟使能

代码:1:使能。0:关闭

// Peripheral clock enables set for the selected peripherals.
// If you are not using a peripheral leave the clock off
// to save on power.
//
// Note: not all peripherals are available on all 2833x derivates.
// Refer to the datasheet for your particular device.
//
// This function is not written to be an example of efficient code.

   SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;    // ADC

   // *IMPORTANT*
   // The ADC_cal function, which  copies the ADC calibration values from TI reserved
   // OTP into the ADCREFSEL and ADCOFFTRIM registers, occurs automatically in the
   // Boot ROM. If the boot ROM code is bypassed during the debug process, the
   // following function MUST be called for the ADC to function according
   // to specification. The clocks to the ADC MUST be enabled before calling this
   // function.
   // See the device data manual and/or the ADC Reference
   // Manual for more information.

   ADC_cal();


   SysCtrlRegs.PCLKCR0.bit.I2CAENCLK = 1;   // I2C
   SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1;   // SCI-A
   SysCtrlRegs.PCLKCR0.bit.SCIBENCLK = 1;   // SCI-B
   SysCtrlRegs.PCLKCR0.bit.SCICENCLK = 1;   // SCI-C
   SysCtrlRegs.PCLKCR0.bit.SPIAENCLK = 1;   // SPI-A
   SysCtrlRegs.PCLKCR0.bit.MCBSPAENCLK = 1; // McBSP-A
   SysCtrlRegs.PCLKCR0.bit.MCBSPBENCLK = 1; // McBSP-B
   SysCtrlRegs.PCLKCR0.bit.ECANAENCLK=1;    // eCAN-A
   SysCtrlRegs.PCLKCR0.bit.ECANBENCLK=1;    // eCAN-B

   SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;   // Disable TBCLK within the ePWM
   SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1;  // ePWM1
   SysCtrlRegs.PCLKCR1.bit.EPWM2ENCLK = 1;  // ePWM2
   SysCtrlRegs.PCLKCR1.bit.EPWM3ENCLK = 1;  // ePWM3
   SysCtrlRegs.PCLKCR1.bit.EPWM4ENCLK = 1;  // ePWM4
   SysCtrlRegs.PCLKCR1.bit.EPWM5ENCLK = 1;  // ePWM5
   SysCtrlRegs.PCLKCR1.bit.EPWM6ENCLK = 1;  // ePWM6
   SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;   // Enable TBCLK within the ePWM

   SysCtrlRegs.PCLKCR1.bit.ECAP3ENCLK = 1;  // eCAP3
   SysCtrlRegs.PCLKCR1.bit.ECAP4ENCLK = 1;  // eCAP4
   SysCtrlRegs.PCLKCR1.bit.ECAP5ENCLK = 1;  // eCAP5
   SysCtrlRegs.PCLKCR1.bit.ECAP6ENCLK = 1;  // eCAP6
   SysCtrlRegs.PCLKCR1.bit.ECAP1ENCLK = 1;  // eCAP1
   SysCtrlRegs.PCLKCR1.bit.ECAP2ENCLK = 1;  // eCAP2
   SysCtrlRegs.PCLKCR1.bit.EQEP1ENCLK = 1;  // eQEP1
   SysCtrlRegs.PCLKCR1.bit.EQEP2ENCLK = 1;  // eQEP2

   SysCtrlRegs.PCLKCR3.bit.CPUTIMER0ENCLK = 1; // CPU Timer 0
   SysCtrlRegs.PCLKCR3.bit.CPUTIMER1ENCLK = 1; // CPU Timer 1
   SysCtrlRegs.PCLKCR3.bit.CPUTIMER2ENCLK = 1; // CPU Timer 2

   SysCtrlRegs.PCLKCR3.bit.DMAENCLK = 1;       // DMA Clock
   SysCtrlRegs.PCLKCR3.bit.XINTFENCLK = 1;     // XTIMCLK
   SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;    // GPIO input clock

其中,

ADC配置:

        SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;    // ADC时钟开启,必须在ADC_cal()前。

        ADC_cal();  // 须要有!,勇于ADC校准值、OTP进入ADCREFSEL和ADCOFFTRIM寄存器等预处理工作。

ePWM配置:必须先关闭TBCLK,修改寄存器,再打开TCBCLK。

SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;   // Disable TBCLK within the ePWM

SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;   // Enable TBCLK within the ePWM

2、GPIO配置

GPIO的配置步骤:

1,写使能

2,配置系统是时钟源

3,使能GPIO外设时钟

4,配置IO口属性

5,设置IO口数值

6,关闭写使能

28335共有88个IO口,配置寄存器分成3组:GPAxxx,GPBxxx,GPCxxx

IO口的属性:

  • 复用选择,xxxMUX。00:普通IO;01,10,11:分别复用1,2,3。详见手册。
  • 输入输出方向选择,xxxDIR。0:输入模式(默认);1:输出模式。
  • 是否上拉,xxxPUD。0:使能上拉(GPIO 12~87的默认配置);1:关闭上拉(GPIO 0~11的默认配置)。
  • 量化滤波(仅A,B组IO有)采样周期,xxxCTRL
  • 量化滤波(仅A,B组IO有)采样次数,xxxQSEL。

其中,

  1. 复用选择,xxxMUX分MUX1配置GPIO 0~15,MUX2配置GPIO 16~31。
  2. 量化滤波采样次数,xxxQSEL分为2组:xxxQSEL1配置GPIO 0~15,xxxQSEL2配置GPIO 16~31。
    00:为同步时钟输入,不采样。
    01:3采样
    10:6采样
    11:设置模式为外设时提供异步时钟信号
  3. 量化滤波采样周期,xxxCTRL属性:
    xxxCTRL定义为结构体,细分出4个寄存器:
    QUALPRD0QUALPRD1QUALPRD2QUALPRD3
    分别配置GPIO 0~7,8~15,16~23,24~31。
    赋值0x00~0xFF,物理意义:采样周期T=(2^n)*Tsysclkout ( 0x00<=n<=0xff)。

IO口的赋值操作:

  • xxxDAT寄存器:直接把一组IO整体赋值
  • xxxSET寄存器
    1:输出高电平
    0:忽略
  • xxxCLEAR寄存器
    1:输出低电平
    0: 忽略
  • xxxOGGLE寄存器
    1:输出翻转电平
    0:忽略

例程:简单使IO口输出高电平

库函数版:

   // Disable the watchdog
   DisableDog(); //关闭看门狗

   // Initialize the PLL control: PLLCR and DIVSEL
   // DSP28_PLLCR and DSP28_DIVSEL are defined in DSP2833x_Examples.h
   InitPll(DSP28_PLLCR,DSP28_DIVSEL); //配置时钟源

    EALLOW;

	SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;// 开启GPIO时钟

	//端口配置
	GpioCtrlRegs.GPCMUX1.bit.GPIO68=0;//设置为通用GPIO功能
	GpioCtrlRegs.GPCDIR.bit.GPIO68=1;//设置GPIO方向为输出
	GpioCtrlRegs.GPCPUD.bit.GPIO68=0;//使能GPIO上拉电阻

    GpioDataRegs.GPCSET.bit.GPIO68=1; //端口置为1

    EDIS;

纯寄存器方式: 

    EALLOW;
    SysCtrlRegs.WDCR= 0x0068; //关闭看门狗

    SysCtrlRegs.PLLSTS.bit.DIVSEL = 0; //PLLCR配置前,将DIVSEL赋值0
    SysCtrlRegs.PLLSTS.bit.MCLKOFF = 1;  //PLLCR配置前,关闭时钟丢失检测
    SysCtrlRegs.PLLCR.bit.DIV = 10; //10倍频
    while(SysCtrlRegs.PLLSTS.bit.PLLLOCKS != 1); //配置PLL之后等待稳定
    SysCtrlRegs.PLLSTS.bit.MCLKOFF = 0; //开启时钟丢失检测
    SysCtrlRegs.PLLSTS.bit.DIVSEL = 2; //切换到1,2直接切换。切换到3时,先切换2,等待PLL稳定后(50us),在切换到3


    SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;// 开启GPIO时钟

    //端口配置
    GpioCtrlRegs.GPCMUX1.bit.GPIO68=0;//设置为通用GPIO功能
    GpioCtrlRegs.GPCDIR.bit.GPIO68=1;//设置GPIO方向为输出
    GpioCtrlRegs.GPCPUD.bit.GPIO68=0;//使能GPIO上拉电阻

    GpioDataRegs.GPCSET.bit.GPIO68=1; //端口置为1

    EDIS;

待续。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180136.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 图像处理中经常用的一幅图片Lena.jpg

    图像处理中经常用的一幅图片Lena.jpg在数字图像处理中,Lena(Lenna)是一张被广泛使用的标准图片,特别在图像压缩的算法研究中。(为什么用这幅图,是因为这图的各个频段的能量都很丰富:即有低频(光滑的皮肤),也有高频(帽子上的羽毛),很适合来验证各种算法)然而,这张图片背后的故事是颇有意思的,很多人都抱有学究都是呆子的看法,然而Lena对此就是一个有力的驳斥。lena(lenna)是一张于1972年11月…

    2022年6月19日
    78
  • PS2手柄通讯协议解析—附资料和源码「建议收藏」

    PS2手柄通讯协议解析—附资料和源码「建议收藏」文章目录一.PS2介绍二.PS2通讯协议介绍一.PS2介绍今天就带大家来认识一下PS2的通讯协议,如果你需要用PS2无线手柄搭配单面机来DIY制作,那么千万别错过这篇文章。首先介绍一下我们今天的主角–PS2手柄。PS2手柄是日本SONY公司的PlayStation2游戏机的遥控手柄。索尼的PSX系列游戏主机在全球都很畅销。不知什么时候便有人打起PS2手柄的主意,破解了通讯协议,使…

    2022年4月27日
    135
  • 父元素opacity属性对子元素的影响(子元素设置opacity无效)

    父元素opacity属性对子元素的影响(子元素设置opacity无效)问题来源于实践这段时间做了一个项目优化,对于原有的内容进行了重新设计实现,其中一项就是对于label标签添加hover层进行解释说明,最常用的办法及时label的容器设置relative,然后hover层作为它的子元素设置absolute,然后在使用label的hover伪类来控制hover层的显示和隐藏,这其中一个要求及时hover层必定要求能够遮住页面中其他的元素,所以最常用的办法是设置它…

    2022年5月25日
    50
  • 打印显示服务器脱机win10,如何在Win10中将打印机状态从脱机更改为联机

    打印显示服务器脱机win10,如何在Win10中将打印机状态从脱机更改为联机Windows10上的打印机可以具有脱机和联机状态。我很惊讶地发现这一点,因为每个人都希望他们的打印机可供使用并准备好进行打印。应该知道,当打印机脱机时,并不意味着它已被删除。由于打印过程中出现错误或驱动程序出现问题,它可能会脱机。如果发现问题,Windows操作系统可以将打印机的状态设置为脱机。在本文中,我将展示如何将打印机状态更改为联机或将打印机恢复为联机状态。打印机离线?将打印…

    2022年5月27日
    66
  • idea2021 激活码【最新永久激活】

    (idea2021 激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月26日
    375
  • 1.3家用路由器的使用

    1.3家用路由器的使用

    2021年8月24日
    46

发表回复

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

关注全栈程序员社区公众号