一、实现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闪烁

  

最新文章

  1. 关闭dialog(lhgdialog)
  2. JavaScript的Ajax请求示例
  3. Oracle存在修改,不存在插入记录
  4. c# 中使用memcached
  5. Win 64 register usage
  6. Dubbo实例
  7. 拒绝深坑!记录找了多半天时间的C++编译失败的错误
  8. c# Debug的一些技巧
  9. GIT入门笔记(17)- 创建分支dev_lsq, 提交到代码
  10. Linux高级运维 第四章 文件的基本管理和XFS文件系统备份恢复
  11. golang文件操作
  12. centos django Failed to load resource: net::ERR_INCOMPLETE_CHUNKED_ENCODING
  13. vue $refs 无法动态拼接,获取不到对象(转)
  14. 简单使用普通用户启动tomcat
  15. angular+webpack(二)
  16. 使用a标签实现文件的下载与保存
  17. C# Asp.net 修改Ueditor编辑器上传图片保存路径
  18. 修復 “Failed to bring up eth0″ in Ubuntu virtualbox
  19. Easyui layout设置满屏效果
  20. C#基础课程之三循环语句

热门文章

  1. POJ 1912 凸包
  2. Luogu P2678 跳石头
  3. 人工智能之基于Opencv与深度学习的计算机视觉实战课程
  4. 实时监控文件变化以及处理xml(仅用作笔记用,防止以后要用)
  5. mybatis 注解方式插入,主键由uuid函数生成
  6. SQL server 安装教程
  7. 通过构造器配置Bean
  8. JAVA 第十一周学习总结
  9. 【后台管理系统】—— Ant Design Pro 项目爬坑(一)
  10. Mac OS 10安装CocoaPods流程