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 ...
随机推荐
- UML——概述
1. 静态视图(类图) 静态视图不描述与时间相关的系统行为,这种行为在其他视图中描述,因此称之为静态试图. 静态视图用类图来实现,正因为它以类图为中心,因此也称之为类图. ...
- 【Leetcode】判断平面中1个点是否落在三角形内
参考资料: 题目: https://blog.csdn.net/dongtinghong/article/details/78657403 符号重载: https://blog.csdn.net/cd ...
- ArrayList,Vector ,LinkedList的存储性能和特性
ArrayList,Vector,LinkedList : 两者都采用数组元素方式存储数据,此数组元素数大于实际存储的数据(以便于增加和插入元素),允许直接按照序号索引元素,但是插入元素涉及数组元素移 ...
- (47)LINUX应用编程和网络编程之二Linux文件属性
Linux下的文件系统为树形结构,入口为/ 树形结构下的文件目录: 无论哪个版本的Linux系统,都有这些目录,这些目录应该是标准的.各个Linux发行版本会存在一些小小的差异,但总体来说,还是大体差 ...
- maven 报错 Cannot resolve plugin org.apache.maven.plugins:maven-war-plugin:2.1.1
主要原因是本地maven的配置文件和仓库地址不一致.
- leetcode-mid-array-sorting and searching - 215 Kth Largest Element in an Array
mycode 77.39% class Solution(object): def findKthLargest(self, nums, k): """ :type n ...
- matlab常见使用
可以新建一个.m文件,将代码放入其中 1.求平均 A=[ 1 2; 3 4; ] a=mean(A,1) %按列平均 b=mean(A,2) %按行平均 c=mean(A(:)) %全部平均 2.清屏 ...
- 阶段3 1.Mybatis_09.Mybatis的多表操作_4 完成account一对一操作-建立实体类关系的方式
定义user的实体.然后生成getter和setter 定义一个可以封装Account和User的Map type这里虽然是account类型 这一段只能保证account的数据完成.并不能保证use ...
- Python学习之==>第三方模块的安装、模块导入
一.模块&包 1.模块 模块实质上就是一个Python文件,它是用来组织代码的.意思就是把Python代码写在里面,文件名就是模块的名称.例如:random.py,random就是模块的名称. ...
- 中国MOOC_零基础学Java语言_第1周 计算_第1周编程题_1温度转换
第1周编程题 依照学术诚信条款,我保证此作业是本人独立完成的. 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统将 ...