本文记录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。

外部晶振是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 外设时钟

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

  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 外部扩展接口时钟

// 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;   // I2CSysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1;   // SCI-ASysCtrlRegs.PCLKCR0.bit.SCIBENCLK = 1;   // SCI-BSysCtrlRegs.PCLKCR0.bit.SCICENCLK = 1;   // SCI-CSysCtrlRegs.PCLKCR0.bit.SPIAENCLK = 1;   // SPI-ASysCtrlRegs.PCLKCR0.bit.MCBSPAENCLK = 1; // McBSP-ASysCtrlRegs.PCLKCR0.bit.MCBSPBENCLK = 1; // McBSP-BSysCtrlRegs.PCLKCR0.bit.ECANAENCLK=1;    // eCAN-ASysCtrlRegs.PCLKCR0.bit.ECANBENCLK=1;    // eCAN-BSysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;   // Disable TBCLK within the ePWMSysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1;  // ePWM1SysCtrlRegs.PCLKCR1.bit.EPWM2ENCLK = 1;  // ePWM2SysCtrlRegs.PCLKCR1.bit.EPWM3ENCLK = 1;  // ePWM3SysCtrlRegs.PCLKCR1.bit.EPWM4ENCLK = 1;  // ePWM4SysCtrlRegs.PCLKCR1.bit.EPWM5ENCLK = 1;  // ePWM5SysCtrlRegs.PCLKCR1.bit.EPWM6ENCLK = 1;  // ePWM6SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;   // Enable TBCLK within the ePWMSysCtrlRegs.PCLKCR1.bit.ECAP3ENCLK = 1;  // eCAP3SysCtrlRegs.PCLKCR1.bit.ECAP4ENCLK = 1;  // eCAP4SysCtrlRegs.PCLKCR1.bit.ECAP5ENCLK = 1;  // eCAP5SysCtrlRegs.PCLKCR1.bit.ECAP6ENCLK = 1;  // eCAP6SysCtrlRegs.PCLKCR1.bit.ECAP1ENCLK = 1;  // eCAP1SysCtrlRegs.PCLKCR1.bit.ECAP2ENCLK = 1;  // eCAP2SysCtrlRegs.PCLKCR1.bit.EQEP1ENCLK = 1;  // eQEP1SysCtrlRegs.PCLKCR1.bit.EQEP2ENCLK = 1;  // eQEP2SysCtrlRegs.PCLKCR3.bit.CPUTIMER0ENCLK = 1; // CPU Timer 0SysCtrlRegs.PCLKCR3.bit.CPUTIMER1ENCLK = 1; // CPU Timer 1SysCtrlRegs.PCLKCR3.bit.CPUTIMER2ENCLK = 1; // CPU Timer 2SysCtrlRegs.PCLKCR3.bit.DMAENCLK = 1;       // DMA ClockSysCtrlRegs.PCLKCR3.bit.XINTFENCLK = 1;     // XTIMCLKSysCtrlRegs.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 ePWMSysCtrlRegs.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 watchdogDisableDog(); //关闭看门狗// Initialize the PLL control: PLLCR and DIVSEL// DSP28_PLLCR and DSP28_DIVSEL are defined in DSP2833x_Examples.hInitPll(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; //端口置为1EDIS;

纯寄存器方式:

    EALLOW;SysCtrlRegs.WDCR= 0x0068; //关闭看门狗SysCtrlRegs.PLLSTS.bit.DIVSEL = 0; //PLLCR配置前,将DIVSEL赋值0SysCtrlRegs.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),在切换到3SysCtrlRegs.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; //端口置为1EDIS;

待续。

DSP28335学习记录(一)相关推荐

  1. DSP28335学习记录(四)——ADC、DMA

    本文记录一下仿真模式下的printf()的使用,ADC,DMA, 目录 一.仿真模式下的printf() 二.ADC 2.1 ADC模式 2.2 触发源,中断,覆盖功能 2.3 如何初始化配置 三.D ...

  2. DSP28335学习笔记-产生PWM波 ——从应用角度出发

    文章目录 前言 一.示波器检测PWM波 1.对应引脚说明 2.PWM波形 二.寄存器配置及代码实现 1.时基模块寄存器配置 2.计数比较模块和动作模块 3.死区产生模块 总结 前言 关于DSP2833 ...

  3. Pytorch学习记录-torchtext和Pytorch的实例( 使用神经网络训练Seq2Seq代码)

    Pytorch学习记录-torchtext和Pytorch的实例1 0. PyTorch Seq2Seq项目介绍 1. 使用神经网络训练Seq2Seq 1.1 简介,对论文中公式的解读 1.2 数据预 ...

  4. HTML5与CSS3权威指南之CSS3学习记录

    title: HTML5与CSS3权威指南之CSS3学习记录 toc: true date: 2018-10-14 00:06:09 学习资料--<HTML5与CSS3权威指南>(第3版) ...

  5. springboot @cacheable不起作用_Springboot学习记录13 使用缓存:整合redis

    本学习记录的代码,部分参考自gitee码云的如下工程.这个工程有详尽的Spingboot1.x教程.鸣谢! https://gitee.com/didispace/SpringBoot-Learnin ...

  6. 【Cmake】Cmake学习记录

    Cmake学习记录 1.1 常例 add_library(gen_reference_infogen_reference_info/gen_reference_info.hgen_reference_ ...

  7. ASP.NETCore学习记录(一)

    ASP.NETCore学习记录(一) asp.net core介绍  Startup.cs  ConfigureServices  Configure  0. ASP.NETCore 介绍 ASP.N ...

  8. Android开发技术周报176学习记录

    Android开发技术周报176学习记录 教程 当 OkHttp 遇上 Http 2.0 http://fucknmb.com/2018/04/16/%E5%BD%93OkHttp%E9%81%87% ...

  9. add函数 pytorch_Pytorch学习记录-Pytorch可视化使用tensorboardX

    Pytorch学习记录-Pytorch可视化使用tensorboardX 在很早很早以前(至少一个半月),我做过几节关于tensorboard的学习记录. https://www.jianshu.co ...

  10. java之字符串学习记录

    java之字符串学习记录 public class StringDemo { public static void main(String[] args) { //静态初始化字符串 String s1 ...

最新文章

  1. burpsuite 实战指南
  2. Python创建删除文件(或文件夹)
  3. C语言十个字母用冒泡法排序,冒泡排序法(C语言) - osc_wq8j2a9a的个人空间 - OSCHINA - 中文开源技术交流社区...
  4. 盘一盘推荐系统里值得一读的那些论文
  5. 关于jQuery Mobile 的pageinit,pageshow,以及data-ajax
  6. 8. Geometric problems
  7. Spring Cloud 7:Gateway
  8. 可以改位置吗_恒大文化旅游城售楼部位置外地人可以买吗优选好房泗洪
  9. git status或者 git commit 中文文件显示乱码
  10. sql crud_使用适用于SQL Server的Python SQL库执行CRUD操作
  11. OBJECT和EMBED标签(转载)
  12. 2021年全国研究生数学建模指导
  13. 老司机必备的手机浏览器,比UC浏览器还好用
  14. 算术-几何平均值不等式的常见证明
  15. 通过OPENSSL建立证书以及CSR证书签名过程
  16. 《密码学系列》—— 流密码
  17. js闭包是什么?对js闭包的理解
  18. 2023年武汉市中等职业学校技能大赛 “网络搭建与应用”
  19. 网页在线视频下载教程(m3u8格式介绍及下载教程)
  20. nodejs+libreoffice 将word转成pdf

热门文章

  1. Android 手机 黑域
  2. C语言:简单实现图书管理系统
  3. 重置 Winsock:初始化计算机网络环境
  4. 强大新UI装逼神器微信小程序源码+多模板支持多种流量主模式
  5. java后端简历项目经历_JAVA后端开发工程师个人简历模板
  6. android 盒子远程调试,家+TV机顶盒怎么开启ADB/USB远程调试模式,安装软件?
  7. 【软件开发】软件开发注意事项
  8. 小区物业管理系统--数据库应用开发
  9. rabbitmq安装erlang,报错configure: error: /bin/sh ‘/app/otp_src_20.2/erts/configure‘ failed for erts
  10. 文件已被占用的解决方法