DSP28335学习记录(一)
本文记录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 外设时钟
外设时钟分两种:高速外设时钟,低速外设时钟。
- SPI-A、SCI-A/B/C的基时钟来源是主频通过LOSPCP(低频时钟寄存器)的分频而得到的。
- I2C-A的基时钟来源是直接来源于主时钟。
- GPIO的时钟不通过分频,直接为主频时钟。
- eCAN-A/B的基时钟来源于主频时钟的二分频。
- EPWM1~6、HRPWM 16、ECAP16、EQEP1~2的基时钟,直接来源于主时钟。
- McBSP-A/B的基时钟来源是主频通过LOSPCP(低频时钟寄存器)的分频而得到的。
- 12的通道的 12-Bit ADC 的基时钟来源是主频通过HISPCP(高频时钟寄存器)的分频而得到的。
- 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。
其中,
- 复用选择,xxxMUX分MUX1配置GPIO 0~15,MUX2配置GPIO 16~31。
- 量化滤波采样次数,xxxQSEL分为2组:xxxQSEL1配置GPIO 0~15,xxxQSEL2配置GPIO 16~31。
00:为同步时钟输入,不采样。
01:3采样
10:6采样
11:设置模式为外设时提供异步时钟信号 - 量化滤波采样周期,xxxCTRL属性:
xxxCTRL定义为结构体,细分出4个寄存器:
QUALPRD0,QUALPRD1,QUALPRD2,QUALPRD3
分别配置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学习记录(一)相关推荐
- DSP28335学习记录(四)——ADC、DMA
本文记录一下仿真模式下的printf()的使用,ADC,DMA, 目录 一.仿真模式下的printf() 二.ADC 2.1 ADC模式 2.2 触发源,中断,覆盖功能 2.3 如何初始化配置 三.D ...
- DSP28335学习笔记-产生PWM波 ——从应用角度出发
文章目录 前言 一.示波器检测PWM波 1.对应引脚说明 2.PWM波形 二.寄存器配置及代码实现 1.时基模块寄存器配置 2.计数比较模块和动作模块 3.死区产生模块 总结 前言 关于DSP2833 ...
- Pytorch学习记录-torchtext和Pytorch的实例( 使用神经网络训练Seq2Seq代码)
Pytorch学习记录-torchtext和Pytorch的实例1 0. PyTorch Seq2Seq项目介绍 1. 使用神经网络训练Seq2Seq 1.1 简介,对论文中公式的解读 1.2 数据预 ...
- HTML5与CSS3权威指南之CSS3学习记录
title: HTML5与CSS3权威指南之CSS3学习记录 toc: true date: 2018-10-14 00:06:09 学习资料--<HTML5与CSS3权威指南>(第3版) ...
- springboot @cacheable不起作用_Springboot学习记录13 使用缓存:整合redis
本学习记录的代码,部分参考自gitee码云的如下工程.这个工程有详尽的Spingboot1.x教程.鸣谢! https://gitee.com/didispace/SpringBoot-Learnin ...
- 【Cmake】Cmake学习记录
Cmake学习记录 1.1 常例 add_library(gen_reference_infogen_reference_info/gen_reference_info.hgen_reference_ ...
- ASP.NETCore学习记录(一)
ASP.NETCore学习记录(一) asp.net core介绍 Startup.cs ConfigureServices Configure 0. ASP.NETCore 介绍 ASP.N ...
- Android开发技术周报176学习记录
Android开发技术周报176学习记录 教程 当 OkHttp 遇上 Http 2.0 http://fucknmb.com/2018/04/16/%E5%BD%93OkHttp%E9%81%87% ...
- add函数 pytorch_Pytorch学习记录-Pytorch可视化使用tensorboardX
Pytorch学习记录-Pytorch可视化使用tensorboardX 在很早很早以前(至少一个半月),我做过几节关于tensorboard的学习记录. https://www.jianshu.co ...
- java之字符串学习记录
java之字符串学习记录 public class StringDemo { public static void main(String[] args) { //静态初始化字符串 String s1 ...
最新文章
- burpsuite 实战指南
- Python创建删除文件(或文件夹)
- C语言十个字母用冒泡法排序,冒泡排序法(C语言) - osc_wq8j2a9a的个人空间 - OSCHINA - 中文开源技术交流社区...
- 盘一盘推荐系统里值得一读的那些论文
- 关于jQuery Mobile 的pageinit,pageshow,以及data-ajax
- 8. Geometric problems
- Spring Cloud 7:Gateway
- 可以改位置吗_恒大文化旅游城售楼部位置外地人可以买吗优选好房泗洪
- git status或者 git commit 中文文件显示乱码
- sql crud_使用适用于SQL Server的Python SQL库执行CRUD操作
- OBJECT和EMBED标签(转载)
- 2021年全国研究生数学建模指导
- 老司机必备的手机浏览器,比UC浏览器还好用
- 算术-几何平均值不等式的常见证明
- 通过OPENSSL建立证书以及CSR证书签名过程
- 《密码学系列》—— 流密码
- js闭包是什么?对js闭包的理解
- 2023年武汉市中等职业学校技能大赛 “网络搭建与应用”
- 网页在线视频下载教程(m3u8格式介绍及下载教程)
- nodejs+libreoffice 将word转成pdf
热门文章
- Android 手机 黑域
- C语言:简单实现图书管理系统
- 重置 Winsock:初始化计算机网络环境
- 强大新UI装逼神器微信小程序源码+多模板支持多种流量主模式
- java后端简历项目经历_JAVA后端开发工程师个人简历模板
- android 盒子远程调试,家+TV机顶盒怎么开启ADB/USB远程调试模式,安装软件?
- 【软件开发】软件开发注意事项
- 小区物业管理系统--数据库应用开发
- rabbitmq安装erlang,报错configure: error: /bin/sh ‘/app/otp_src_20.2/erts/configure‘ failed for erts
- 文件已被占用的解决方法