TMS320F28335——IO控制/定时计操作
一、实现GPIO控制
1.硬件连接


从电路原理图上看来,LED灯是接在GPIO34 上的。
2.IO设置
2.1设置功能
GPXMUX1/2:功能选择寄存器
GPXMUX1/2 每组 IO 一般有 32 个 IO 口可以配置。GPXMUX1 对应每组的低 16 个 IO 口,GPXMUX2 对应高 16 个 IO 口 。
这里设置的是GPIO34 所以在 GPBMUX1中


所以向 GPBMUX1 的bit5:4 写入0设置为普通IO。(默认设置 )
2.2:设置IO方向
方向控制寄存器 GPXDIR:如果对应的位为 1 则配置为输出,否则则配置为输入。

代码如下:
EALLOW;
GpioCtrlRegs.GPBMUX1.bit.GPIO34 = ;
GpioCtrlRegs.GPBDIR.bit.GPIO34 = ;
EDIS;
关于 EALLOW、EDIS说明:
DSP由于在上电复位之后,状态寄存器基本上都是清零,而这样的状态下正是上述特殊寄存器禁止改写的状态。为了能够对这些特殊寄存器进行初始化,所以在对上述特殊寄存器进行改写之前,一定要执行汇编指令asm(“EALLOW”)或者宏定义EALLOW来设置状态寄存器1的C6位,在设置完寄存器之后,一定要注意执行汇编指令asm(“EDIS”)或者宏定义EDIS来清除状态寄存器1的C6位,来防止杂散代码或指针破坏寄存器内容。
到此关于GPIO的配置就完成了。
3.控制IO输出电平
置位寄存器:置位寄存器 GPXSET:如果对应的位为 1 则将对应的 IO 口拉高(输出高电平)。 GpioDataRegs.GPBSET.bit.GPIO34 = 1;//设置PGIO34 输出高电平
清零寄存器:强制拉低管脚 GPXCLEAR:如果对应的位为 1 则将对应的 IO 口拉低(输出低电平)。 GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1;//设置GPIO34输出高平
输出翻转寄存器:输出状态翻转寄存器 GPXTOGGLE:如果 GPXTOGGLE 的某位为 1 则将相应的 IO 口输出状态进行翻转。 GpioDataRegs.GPBTOGGLE.bit.GPIO34= 1;//设置PGIO34输出翻转电平
二、使用定时器实现闪烁LED
1.定时器设置
关于定时器的设置 主要是设置CPUTIMER_VARS 结构体中的参数:
struct CPUTIMER_VARS {
volatile struct CPUTIMER_REGS *RegsAddr;//定时器 相关寄存器
Uint32 InterruptCount; //用作定时器中断次数统计
float CPUFreqInMHz; //存放频率 单位MHZ
float PeriodInUSec; //中断的计数值 ,到了产生中断。
};
struct CPUTIMER_REGS {
union TIM_GROUP TIM; // Timer counter register 定时器计数寄存器
union PRD_GROUP PRD; // Period register 定时器周期寄存器
union TCR_REG TCR; // Timer control register 定时器控制寄存器
Uint16 rsvd1; // reserved 保留
union TPR_REG TPR; // Timer pre-scale low
union TPRH_REG TPRH; // Timer pre-scale high
};
关于定时器配置源码如下:
void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period)
{
Uint32 temp; // Initialize timer period:
Timer->CPUFreqInMHz = Freq;
Timer->PeriodInUSec = Period;
temp = (long) (Freq * Period);
Timer->RegsAddr->PRD.all = temp; // Set pre-scale counter to divide by 1 (SYSCLKOUT):
Timer->RegsAddr->TPR.all = ;
Timer->RegsAddr->TPRH.all = ; // Initialize timer control register:
Timer->RegsAddr->TCR.bit.TSS = ; // 1 = Stop timer, 0 = Start/Restart Timer
Timer->RegsAddr->TCR.bit.TRB = ; // 1 = reload timer
Timer->RegsAddr->TCR.bit.SOFT = ;
Timer->RegsAddr->TCR.bit.FREE = ; // Timer Free Run
Timer->RegsAddr->TCR.bit.TIE = ; // 0 = Disable/ 1 = Enable Timer Interrupt // Reset interrupt counter:
Timer->InterruptCount = ;
}
用户设置:
ConfigCpuTimer(&CpuTimer0, , );//使用定时器0 ,时钟频率为150MHZ,计数值 到1M 。也就是说这样设置是产生一个一秒的中断
定时器中断处理函数设置:PIE_VECT_TABLE 中断向量表。在DSP2833x_PieVect.h中定义
PieVectTable.TINT0 = &cpu_timer0_isr;//往中断矢量表中填写一个指针。当定时时间到了就跳转到 ,当前指针指向的函数去执行代码。
定时器0中断在中断向量表中的组1

2.在定时器中使用GPIO翻转寄存器GPXTOGGLE 实现LED闪烁

TMS320F28335——IO控制/定时计操作的更多相关文章
- java.io中流的操作:字节流、字符流
java.io中流的操作:字节流.字符流(1)使用File类打开一个文件(2)通过字节流或字符流的子类指定输出的位置(3)进行读/写操作(4)关闭输入/输出 1.字节流:主要是byte类型数据,以by ...
- C# IO流的操作
C# IO流的操作非常重要,我们读写文件都会使用到这个技术,这里先演示一个文件内容复制的例子,简要说明C#中的IO操作. namespace ConsoleApplication1 { class P ...
- Java---IO加强(3)-IO流的操作规律
一般写关于操作文件的读取的几个通用步骤!!! 1.明确源和目的. 源:InputStream Reader 一定是被读取的. 目的:OutputStream Writer 一定是被写入的. 2.处理的 ...
- Selenium3 + Python3自动化测试系列三——控制浏览器操作
控制浏览器操作 控制浏览器窗口大小 在测试过程中,我们在打开浏览器后,根据需求可自定义调整浏览器的尺寸大小.WebDriver提供了set_window_size()方法来设置浏览器的大小. 如果页面 ...
- C# IO流的操作(一)
C# IO流的操作非常重要,我们读写文件都会使用到这个技术,这里先演示一个文件内容复制的例子,简要说明C#中的IO操作. namespace ConsoleApplication1 { class P ...
- 归纳整理Linux下C语言常用的库函数----内存及字符串控制及操作
在没有IDE的时候,记住一些常用的库函数的函数名.参数.基本用法及注意事项是很有必要的. 参照Linux_C_HS.chm的目录,我大致将常用的函数分为一下几类: 1. 内存及字符串控制及操作 2. ...
- 035——VUE中表单控件处理之使用vue控制select操作文字栏目列表
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- LSM树——LSM 将B+树等结构昂贵的随机IO变的更快,而代价就是读操作要处理大量的索引文件(sstable)而不是一个,另外还是一些IO被合并操作消耗。
Basic Compaction 为了保持LSM的读操作相对较快,维护并减少sstable文件的个数是很重要的,所以让我们更深入的看一下合并操作.这个过程有一点儿像一般垃圾回收算法. 当一定数量的ss ...
- selenium控制浏览器操作
selenium控制浏览器操作 控制浏览器有哪些操作? 控制页面大小 前进.后退 刷新 自动输入.提交 ........ 控制页面大小,实例: # -*- coding:utf-8 -*- from ...
随机推荐
- POJ 1182 食物链 (带权并查集 && 向量偏移)
题意 : 中文题就不说题意了…… 分析 : 通过普通并查集的整理归类, 能够单纯地知道某些元素是否在同一个集合内.但是题目不仅只有种类之分, 还有种类之间的关系, 即同类以及吃与被吃, 而且重点是题目 ...
- 【POJ2992】Divisors
[题目概括] 计算\(C_n^k\)的因子个数. [思路要点] 首先考虑将组合数展开,展开后就是\(\frac {n!}{k!\times (n-k)!}\). 这样就是计算出这些质因子的个数,然后将 ...
- WTL拖拽文件
1.对话框属性中把:Accept Files设置为TRUE,或者ModifyStyleEx(0, WS_EX_ACCEPTFILES); 2.在对话框中添加一个ListBox控件,并关联成员变量:m_ ...
- js控制页面每次滚动一屏,和楼梯效果
我最近在做我们公司官网的改版,产品中心就是每次滚一屏的,我觉得加上楼梯更方便用户浏览,就随便写了个demo, 先来看看结构,都很简单的 <!--楼梯--> <ul class=&qu ...
- C++二维数组(指针)做参数
一.问题描述 使用C++编程过程中经常需要使用到二维数组,然而初级程序员在使用过程中经常会出错使程序崩溃.下面就二维指针的定义,初始化,以及二维指针做参数给出简单介绍. 1.二维数组的定义与初始化 在 ...
- vue根据参数不同的路由跳转以及name的作用
最近在做VUE路由跳转根据参数的值不同但是跳转的是同一个路由的功能.点击左边的目录,根据目录ID跳转不同的列表.如下图. 路由跳转的代码: this.$router.push({path: '/RFI ...
- maven 成长之路
1配置maven 环境变量 新建系统变量 M2_HOME :E:\apache-maven-3.5.2 在系统变量 path中添加 E:\apache-maven-3.5.2\bin 运行 mvn - ...
- C++ 左值与右值
https://baike.baidu.com/item/%E5%B7%A6%E5%80%BC%E4%B8%8E%E5%8F%B3%E5%80%BC/5537417?fr=aladdin https: ...
- Vue知识整理15:组件注册
采用局部注册组件: 将代码放在vue的一个实例中,而不是单列申明.
- H5如何测试?
它跟安卓APP与IOS APP有什么样的区别呢?★ 我们以往的APP是使用原生系统内核的,相当于直接在系统上操作,是我们传统意义上的软件,更加稳定 ★ H5的APP先得调用系统的浏览器内核,相当于是在 ...