DSP代码笔记

TI DSP TSM320F28003x代码笔记1

  1. 新建工程(使用位域库 device_support)

    1. 添加头文件路径

      ${PROJECT_ROOT}/device_support/f28003x/common/include ${PROJECT_ROOT}/device_support/f28003x/headers/include

    2. 包含头文件

      #include "F28003x_Device.h"    // 包含外设结构体定义 /common/include
      #include "F28003x_Examples.h"  // 包含系统初始化等声明 /headers/include
      
    3. 添加依赖文件框架

      28003x_generic_ram_lnk.cmd
      f28003x_adc.c
      f28003x_codestartbranch.asm
      f28003x_cputimers.c
      f28003x_defaultisr.c
      f28003x_dma.c
      f28003x_epwm.c
      f28003x_globalvariabledefs.c
      f28003x_gpio.c
      f28003x_headers_nonBIOS.cmd
      f28003x_piectrl.c
      f28003x_pievect.c
      f28003x_sysctrl.c
      f28003x_tempsensorconv.c
      f28003x_usdelay.asm
      
      类型必须文件
      启动代码codestartbranch.asm
      初始化sysctrl.c, piectrl.c, pievect.c
      外设变量globalvariabledefs.c, headers_nonBIOS.cmd
      中断处理defaultisr.c
      启动映射lnk.cmd
      延时支持usdelay.asm
      CMD映射文件28003x_generic_ram_lnk.cmd
      文件结构图
    4. 主函数初始化流程

      1. InitSysCtrl(); 初始化系统时钟
      2. InitGpio(); 初始化GPIO
        1. 这是TI C2000Ware 中一个通用的 GPIO 初始化函数,目的是统一重置和解锁所有 GPIO 引脚的控制状态

        2. 该API解锁,清零了GPIO对应的寄存器,如果不调用这个API,可能GPIO还是上锁状态,无法控制

        3. 关节代码段:

          //
          // Disable pin locks
          //
          EALLOW;
          GpioCtrlRegs.GPALOCK.all = 0x00000000;
          GpioCtrlRegs.GPBLOCK.all = 0x00000000;
          GpioCtrlRegs.GPHLOCK.all = 0x00000000;
          
      3. 初始化中断(PIE)
        DINT; //禁用全局中断
        
        InitPieCtrl();       // 初始化 PIE 控制器
        IER = 0x0000;        // 禁用 CPU 所有中断
        IFR = 0x0000;        // 清除所有中断标志
        InitPieVectTable();  // 初始化 PIE 向量表
        
        ...
        ...
        //在主循环之前
        EINT;//使能全局中断
        ERTM;//使能实时中断
        
        while1(1)
        {
            ...
        }
        
      4. GPIO配置
        void initLED_GPIO(void)
        {
            EALLOW;
        
            GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 0;    // 00 = GPIO
            GpioCtrlRegs.GPADIR.bit.GPIO20 = 1;     // 设置为输出
            GpioCtrlRegs.GPAPUD.bit.GPIO20 = 1;     // 启用上拉
        
            EDIS;
        
            GpioDataRegs.GPADAT.bit.GPIO20 = 1;//熄灭
        
        }
        

        需要关注三个寄存器

        1. GPAMUX寄存器 复用寄存器

          注:MUX寄存器由两个寄存器组成:

          GPyGMUXx.bit.GPIOy // 高复用选择位(Global MUX)
          GPyMUXx.bit.GPIOy // 低复用选择位(Local MUX)

          具体复用配置见复用表

        2. GPADIR寄存器 方向寄存器

        3. GPAPUD寄存器 上拉失能寄存器

          注:0为使能 1为失能

    5. 注册&使能中断

      EALLOW;
      PieVectTable.EPWM4_INT = &epwm4_isr;          // 注册 EPWM4 中断服务函数
      EDIS;
      
      ...
      ...
      
      //应在主循环之前
      PieCtrlRegs.PIEIER3.bit.INTx4 = 1;   // 使能 EPWM4 中断(组3,通道4)
      IER |= M_INT3;                       // 使能 CPU 中断组3
      
      EINT;                                // 使能全局中断
      ERTM;                                // 使能实时中断
      
      
    6. 外设配置

      1. ePWM

        step1:允许修改

        EALLOW;//一般都需要
        

        step2:TZ模块配置(未使用)

        step3:TB模块配置(配置时基)

        应关注以下几个寄存器:

        1. TBPRD周期寄存器(设置周期)

        2. TBCTL 控制寄存器:

          应注意以下几个bit:

          1. CTRMODE:计数模式

          2. PHSEN:相位加载

          3. PRDLD:TBPRD加载选项,选择是否使用影子寄存器加载TBPRD

          4. HSPCLKDIV:高速时钟预分频器 对SYSCLK分频

          5. CLKDIV:时钟分频器 对HSPCLK分频

        3. TBPHS 相位寄存器

        EPwm4Regs.TBPRD = 600;                        // 设置周期为601个TBCLK周期
        EPwm4Regs.CMPA.bit.CMPA = 300;                // 设置比较器A
        EPwm4Regs.TBPHS.bit.TBPHS = 0;                // 相位清零
        EPwm4Regs.TBCTR = 0;                          // 清除计数器
        
        EPwm4Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;    // 递增计数模式
        EPwm4Regs.TBCTL.bit.PHSEN = TB_DISABLE;       // 禁用相位加载
        EPwm4Regs.TBCTL.bit.PRDLD = TB_SHADOW;        // 使用影子寄存器加载 TBPRD
        EPwm4Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;      // TBCLK = SYSCLK
        EPwm4Regs.TBCTL.bit.CLKDIV = TB_DIV1;
        

        step4:CC模块配置

        应关注以下寄存器:

         1. CMPA,CMPB,CMPC,CMPD设置比较值:
         2. CMPCTL比较控制寄存器:
         	1. SHDWAMODE:是否使用影子寄存器加载CMP
         	2. LOADAMODE:加载时间 什么时候更新CMP
        

        step5:DB模块配置(未使用)

        step6:AQ模块配置

        1. AQCTL动作控制寄存器
          1. ZRO:在CTR=0时,怎么置位PWM 拉高还是拉低
          2. CAU:在CTR=CMP时,怎么置位

        step7:ET模块配置

        1. ETSEL:中断置位寄存器
          1. INTEL:什么时候触发中断
          2. INTEN:使能
        2. ETPS:多少次事件发生后才触发一次中断
    7. 中断服务函数

      注意清除中断标志位和发送中断响应(PIEACK)

      // EPWM4 中断服务函数
      __interrupt void epwm4_isr(void)
      {
          static uint32_t i = 100000;
          EPwm4Regs.ETCLR.bit.INT = 1;                  // 清除中断标志位
          PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;       // 允许更多来自组3的中断
      
          if (i <= 0)
          {
              //GpioDataRegs.GPATOGGLE.bit.GPIO20 = 1;    // 翻转 LED
              GpioDataRegs.GPATOGGLE.bit.GPIO20 = 1;    // 翻转 LED
              i = 100000;
          }
          else
          {
              i--;
          }
      }
      
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值