DSP28335:实现音乐播放器(定时器1中断)

播放起风了,晴天

起风了(简谱对应的代码如下)

起风了
Uint16  Music[]={
//音符,时值,

    0,4,
    18,2,
    19,2,
    21,2,
    23,2,
    11,4,
    26,2,
    23,6,
    0,2,
    18,2,
    19,2,
    21,2,
    23,2,
    9,4,
    26,2,
    23,2,
    21,2,
    23,2,
    19,2,
    21,2,
    18,2,
    19,2,
    14,2,
    0,4,
    18,2,
    19,2,
    21,2,
    23,2,
    11,4,
    26,2,
    23,6,
    0,2,
    18,2,
    19,2,
    21,2,
    23,2,
    9,4,
    26,2,
    23,2,
    21,2,
    23,2,
    19,2,
    21,2,
    18,2,
    19,2,
    14,2,
    0,4,
    9,6,
    7,2,
    9,6,
    7,2,
    9,4,
    11,4,
    14,4,
    11,4,
    9,6,
    7,2,
    9,6,
    7,2,
    9,2,
    11,2,
    9,2,
    7,2,
    1,4,
    0,4,
    9,6,
    7,2,
    9,6,
    7,2,
    9,4,
    11,4,
    14,4,
    11,4,
    9,6,
    11,2,
    9,4,
    7,4,
    9,8,
    10,8,
    9,6,
    7,2,
    9,6,
    7,2,
    9,4,
    11,4,
    14,4,
    11,4,
    9,6,
    11,2,
    9,4,
    7,4,
    3,4,
    0,4,
    11,2,
    9,2,
    7,2,
    9,2,
    7,4,
    0,4,
    11,2,
    9,2,
    7,2,
    9,2,
    7,4,
    0,4,
    11,2,
    9,2,
    7,2,
    9,2,
    7,8,
    0,8,
    0,4,
    7,4,
    9,4,
    11,4,
    7,4,
    16,4,
    14,2,
    16,6,
    0,2,
    7,2,
    18,4,
    16,2,
    18,6,
    0,4,
    18,4,
    16,2,
    18,6,
    11,4,
    19,2,
    21,2,
    19,2,
    18,2,
    16,4,
    14,4,
    16,4,
    14,2,
    16,4,
    14,2,
    16,2,
    14,2,
    16,4,
    14,2,
    9,4,
    14,4,
    11,8,
    0,8,
    7,4,
    9,4,
    11,4,
    7,4,
    16,4,
    14,2,
    16,6,
    0,2,
    7,2,
    18,4,
    16,2,
    18,6,
    0,4,
    18,4,
    16,2,
    18,6,
    11,4,
    19,2,
    21,2,
    19,2,
    18,2,
    16,4,
    14,4,
    16,4,
    23,2,
    23,6,
    14,4,
    16,4,
    23,2,
    23,4,
    14,4,
    16,2,
    16,12,
    0,4,
    19,4,
    21,4,
    23,4,
    28,2,
    26,6,
    28,2,
    26,6,
    28,2,
    26,6,
    21,4,
    23,6,
    28,2,
    26,6,
    28,2,
    26,6,
    28,2,
    26,4,
    23,8,
    21,4,
    19,2,
    16,4,
    19,4,
    19,2,
    21,4,
    19,2,
    16,4,
    19,4,
    23,8,
    23,4,
    21,6,
    0,4,
    19,4,
    21,4,
    23,4,
    28,2,
    26,6,
    28,2,
    26,6,
    28,2,
    26,6,
    0,2,
    21,2,
    23,4,
    28,2,
    26,6,
    28,2,
    26,6,
    28,2,
    26,6,
    23,6,
    21,4,
    19,2,
    16,4,
    23,4,
    21,4,
    19,2,
    16,4,
    16,2,
    19,2,
    19,8,
    0,4,
    16,2,
    23,6,
    21,4,
    19,2,
    16,4,
    23,4,
    21,4,
    19,2,
    16,4,
    16,2,
    19,6,
    19,8,

    0xFF
};

 晴天简谱对应的代码如下

Uint16  Music[]={
         0,2,
         20,2,
         20,2,
         13,2,
         13,4,
         15,2,
         17,2,
         0,2,
         20,2,
         20,2,
         13,2,
         13,2,
         15,1,
         17,1,
         15,1,
         13,1,
         8,2,
         0,2,
         20,2,
         20,2,
         13,2,
         13,4,
         15,2,
         17,2,
         0,2,
         17,4,
         15,1,
         17,1,
         18,1,
         17,1,
         15,1,
         18,1,
         17,1,
         15,1,
         13,2,
         8,2,
         13,2,
         13,2,
         17,2,
         18,2,
         17,2,
         15,2,
         13,1,
         15,1,
         17,2,
         17,2,
         17,2,
         17,2,
         15,1,
         17,1,
         15,2,
         13,4,
         8,2,
         13,2,
         15,2,
         17,2,
         18,2,
         17,2,
         15,2,
         13,1,
         15,1,
         17,2,
         17,2,
         17,2,
         17,2,
         15,1,
         17,1,
         15,2,
         13,3,
         24,1,
         13,1,
         13,1,
         13,1,
         13,1,
         24,1,
         13,1,
         13,2,
         13,1,
         13,1,
         13,1,
         12,1,
         13,2,
         13,2,
         13,1,
         13,1,
         13,1,
         12,1,
         13,2,
         13,2,
         13,1,
         13,1,
         13,1,
         20,1,
         20,2,
         20,1,
         0,1,
         20,1,
         20,1,
         20,1,
         20,1,
         20,2,
         20,2,
         20,1,
         20,1,
         20,1,
         20,1,
         18,1,
         17,1,
         17,9,
         0,4,


         0xFF
//音符,时值,
};

main.c

#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"   // DSP2833x Examples Include File

#include "leds.h"
#include "Time.h"
#include "beep.h"

#define speed 800

#define P   0
#define L1  1
#define L1_ 2
#define L2  3
#define L2_ 4
#define L3  5
#define L4  6
#define L4_ 7
#define L5  8
#define L5_ 9
#define L6  10
#define L6_ 11
#define L7  12
#define M1  13
#define M1_ 14
#define M2  15
#define M2_ 16
#define M3  17
#define M4  18
#define M4_ 19
#define M5  20
#define M5_ 21
#define M6  22
#define M6_ 23
#define M7  24
#define H1  25
#define H1_ 26
#define H2  27
#define H2_ 28
#define H3  29
#define H4  30
#define H4_ 31
#define H5  32
#define H5_ 33
#define H6  34
#define H6_ 35
#define H7  36

float zhouqi[]={ 3816.793893,
                 3610.108303,
                 3401.360544,
                 3215.434094,
                 3030.30303,
                 2865.329513,
                 2702.702703,
                 2551.020408,
                 2409.638554,
                 2272.727273,
                 2145.922747,
                 2016.129032,
                 1912.045889,
                 1805.054152,
                 1703.577513,
                 1607.717042,
                 1517.450683,
                 1432.664756,
                 1351.351351,
                 1275.510204,
                 1203.369434,
                 1136.363636,
                 1072.961373,
                 1010.145749,
                 956.0229446,
                 901.7132552,
                 851.0638298,
                 803.2128514,
                 758.7253414,
                 715.8196135,
                 375.6756757,
                 637.755102,
                 602.0469597,
                 568.1818182,
                 536.1930295,
                 506.0728745,

};



float the_freq[]={
                   262,
                   277,
                   294,
                   311,
                   330,
                   349,
                   370,
                   392,
                   415,
                   440,
                   466,
                   496,
                   523,
                   554,
                   587,
                   622,
                   659,
                   698,
                   740,
                   784,
                   831,
                   880,
                   932,
                   988,
                   1046,
                   1109,
                   1175,
                   1245,
                   1318,
                   1397,
                   1480,
                   1568,
                   1661,
                   1760,
                   1865,
                   1976


};
//晴天
Uint16  Music[]={
         0,2,
         20,2,
         20,2,
         13,2,
         13,4,
         15,2,
         17,2,
         0,2,
         20,2,
         20,2,
         13,2,
         13,2,
         15,1,
         17,1,
         15,1,
         13,1,
         8,2,
         0,2,
         20,2,
         20,2,
         13,2,
         13,4,
         15,2,
         17,2,
         0,2,
         17,4,
         15,1,
         17,1,
         18,1,
         17,1,
         15,1,
         18,1,
         17,1,
         15,1,
         13,2,
         8,2,
         13,2,
         13,2,
         17,2,
         18,2,
         17,2,
         15,2,
         13,1,
         15,1,
         17,2,
         17,2,
         17,2,
         17,2,
         15,1,
         17,1,
         15,2,
         13,4,
         8,2,
         13,2,
         15,2,
         17,2,
         18,2,
         17,2,
         15,2,
         13,1,
         15,1,
         17,2,
         17,2,
         17,2,
         17,2,
         15,1,
         17,1,
         15,2,
         13,3,
         24,1,
         13,1,
         13,1,
         13,1,
         13,1,
         24,1,
         13,1,
         13,2,
         13,1,
         13,1,
         13,1,
         12,1,
         13,2,
         13,2,
         13,1,
         13,1,
         13,1,
         12,1,
         13,2,
         13,2,
         13,1,
         13,1,
         13,1,
         20,1,
         20,2,
         20,1,
         0,1,
         20,1,
         20,1,
         20,1,
         20,1,
         20,2,
         20,2,
         20,1,
         20,1,
         20,1,
         20,1,
         18,1,
         17,1,
         17,9,
         0,4,


         0xFF
//音符,时值,
};

Uint16 pai;

void main()
{

    InitSysCtrl();
    //初始化PIE控制寄存器和PIE中断向量表
    InitPieCtrl();
    IER = 0x0000;
    IFR = 0x0000;
    InitPieVectTable();
    LED_Init();
    BEEP_Init();
    while (1)
    {
        if (Music[pai] != 0xFF)
        {

            TIM1_Init(150, (zhouqi[Music[pai]])/2);
            pai++;
            DELAY_US((Music[pai]*speed/4)*1000);
            pai++;
            CpuTimer1Regs.TCR.bit.TSS=1;
            DELAY_US(500);
            CpuTimer1Regs.TCR.bit.TSS=0;

        }
        else
        {
            pai=0;
        }
    }

}

定时器中断代码

Time.c

#include "Time.h"
#include "leds.h"
#include "BEEP.h"

//定时器1初始化函数
//Freq:CPU时钟频率(150MHz)
//Period:定时周期值,单位us
void TIM1_Init(float Freq, float Period)
{
    EALLOW;
    SysCtrlRegs.PCLKCR3.bit.CPUTIMER1ENCLK = 1; // CPU Timer 0
    EDIS;

    //设置定时器1的中断入口地址为中断向量表的INT13
    EALLOW;
    PieVectTable.XINT13 = &TIM1_IRQn;
    EDIS;

    //指向定时器1的寄存器地址
    CpuTimer1.RegsAddr = &CpuTimer1Regs;
    //设置定时器1的周期寄存器值
    CpuTimer1Regs.PRD.all  = 0xFFFFFFFF;
    //设置定时器预定标计数器值为0
    CpuTimer1Regs.TPR.all  = 0;
    CpuTimer1Regs.TPRH.all = 0;
    //确保定时器1为停止状态
    CpuTimer1Regs.TCR.bit.TSS = 1;
    //重载使能
    CpuTimer1Regs.TCR.bit.TRB = 1;
    // Reset interrupt counters:
    CpuTimer1.InterruptCount = 0;

    ConfigCpuTimer(&CpuTimer1, Freq, Period);

    //开始定时器功能
    CpuTimer1Regs.TCR.bit.TSS=0;
    //定时器1直接连到内核中断,无需配置PIE
    IER |= M_INT13;

    //使能总中断
    EINT;
    ERTM;

}

interrupt void TIM1_IRQn(void)
{
    EALLOW;
    BEEP_TOGGLE;
    PieCtrlRegs.PIEACK.bit.ACK1=1;//清除中断标志
    EDIS;
}

Time.h

/*
 * Time.h
 *
 *  Created on: 2024年6月20日
 *      Author: 86173
 */

#ifndef TIME_H_
#define TIME_H_


#include "DSP2833x_Device.h"     // DSP2833x 头文件
#include "DSP2833x_Examples.h"   // DSP2833x 例子相关头文件



void TIM0_Init(float Freq, float Period);
interrupt void TIM0_IRQn(void);

void TIM1_Init(float Freq, float Period);
interrupt void TIM1_IRQn(void);

void TIM2_Init(float Freq, float Period);
interrupt void TIM2_IRQn(void);


#endif /* TIME_H_ */

BEEP.h

#ifndef BEEP_H_
#define BEEP_H_


#include "DSP2833x_Device.h"     // DSP2833x 头文件
#include "DSP2833x_Examples.h"   // DSP2833x 例子相关头文件


#define BEEP_ON         (GpioDataRegs.GPASET.bit.GPIO6=1)
#define BEEP_OFF        (GpioDataRegs.GPACLEAR.bit.GPIO6=1)
#define BEEP_TOGGLE     (GpioDataRegs.GPATOGGLE.bit.GPIO6=1)

void BEEP_Init(void);

#endif /* BEEP_H_ */

BEEP.c

#include "beep.h"

void BEEP_Init(void)
{
    EALLOW;
    SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK=1;//开启GPIO时钟
    //BEEP端口配置
    GpioCtrlRegs.GPAMUX1.bit.GPIO6=0;
    GpioCtrlRegs.GPADIR.bit.GPIO6=1;
    GpioCtrlRegs.GPAPUD.bit.GPIO6=0;

    EDIS;
    GpioDataRegs.GPACLEAR.bit.GPIO6=1;
}

LED模块并没有用到,这是我之前写其他工程留下来的

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DSP28335上配置定时器1中断的步骤如下: 1. 首先,需要配置定时器1的寄存器。定时器1的寄存器包括 TCR、TPR、TPRH、TIM、PRD 等。具体配置可参考 TCR(定时器控制寄存器)和 PRD(周期寄存器)的设置。 例如,可以通过以下代码配置定时器1的周期为 1ms: ```c // 设置周期 EPwm1Regs.TBPRD = 15000; // 定时器周期为 15000 个时钟周期 (15000 = 1ms * 150MHz / 1) // 启用定时器 EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // 设置计数模式为向上向下计数 EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // 禁用相位补偿 EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // 高速时钟分频因子设置为1 EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1; // 时钟分频因子设置为1 EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE; // 禁用同步输出 EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW; // 使用影子寄存器加载周期寄存器 // 启用中断 EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // 中断触发条件为计数器归零 EPwm1Regs.ETSEL.bit.INTEN = 1; // 使能中断 EPwm1Regs.ETPS.bit.INTPRD = ET_1ST; // 中断发生后立即响应 ``` 2. 在中断向量表中设置定时器1的中断服务程序。DSP28335中断向量表位于 Flash 的 0x3FDC00 处。可以通过修改对应的中断向量表地址来设置定时器1的中断向量。 ```c // 设置定时器1的中断向量 PieVectTable.EPWM1_INT = &epwm1_isr; ``` 3. 编写定时器1的中断服务程序。在定时器1中断触发时,该中断服务程序会被执行。 ```c interrupt void epwm1_isr(void) { // 在此处编写定时器1中断服务程序的代码 // ... // 清除中断标志位 EPwm1Regs.ETCLR.bit.INT = 1; // 重新使能中断 PieCtrlRegs.PIEACK.all = PIEACK_GROUP3; // 清除中断标志位并使能中断 } ``` 以上是配置DSP28335定时器1中断的基本步骤,你可以根据具体的需求进行修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值