Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何理解DSP的编程代码?_C_Embedded_Signal Processing_Microcontroller_Processor - Fatal编程技术网

C 如何理解DSP的编程代码?

C 如何理解DSP的编程代码?,c,embedded,signal-processing,microcontroller,processor,C,Embedded,Signal Processing,Microcontroller,Processor,我的“数字信号处理器简介”课程使用C2000 Piccolo Launchpad教授数字信号处理器 现在,我完全迷路了。因为,我的老师似乎不想给我们提供任何在家学习的材料 比如说, 以下代码来自Texas Instrument的软件包 //######################################################################## // //文件:f2802x_examples/timed_led_blink/Example_f2802xled

我的“数字信号处理器简介”课程使用C2000 Piccolo Launchpad教授数字信号处理器

现在,我完全迷路了。因为,我的老师似乎不想给我们提供任何在家学习的材料

比如说,

以下代码来自Texas Instrument的软件包

//########################################################################
//
//文件:f2802x_examples/timed_led_blink/Example_f2802xledbink.c
//
//标题:F2802x LED闪烁入门程序。
//
//组别:C2000
//目标设备:TMS320F2802x
//
//! \addtogroup示例\u列表
//!  LED闪烁
//!
//!   此示例将CPU定时器0配置为500毫秒,并进行切换
//!   GPIO0-4指示灯每中断一次。出于测试目的,以下示例
//!   每次定时器断言中断时,也会增加一个计数器。
//!
//!   监视变量:
//!   - 中断计数
//!
//!   监控GPIO0-4 LED闪烁(500毫秒)和闪烁(500毫秒)
//!   在2802x0控制卡上。
//
//(C)2012年德克萨斯仪器公司版权所有。
//#############################################################################
//$TI发布:包名称$
//$发布日期:软件包发布日期$
//#############################################################################
#包括“DSP28x_Project.h”//设备头文件,示例包括文件
#包括“f2802x_公共/include/adc.h”
#包括“f2802x_公共/包括/时钟h”
#包括“f2802x_公共/include/flash.h”
#包括“f2802x_公共/include/gpio.h”
#包括“f2802x_公共/include/pie.h”
#包括“f2802x_公共/包括/锁相环h”
#包括“f2802x_公共/include/timer.h”
#包括“f2802x_公共/include/wdog.h”
//在此文件中找到的函数的原型语句。
__中断无效cpu\u定时器0\u isr(无效);
uint16\u t中断计数=0;
ADC_Handle myAdc;
CLK_Handle myClk;
闪光灯(我的闪光灯);;
GPIO_处理myGpio;
我的馅饼;
定时器\我的定时器;
真空总管(真空)
{
CPU_处理myCpu;
PLL_手柄myPll;
WDOG_Handle myWDog;
//初始化此应用程序所需的所有句柄
myAdc=ADC_init((void*)ADC_BASE_ADDR,sizeof(ADC_Obj));
myClk=CLK_init((void*)CLK_BASE_ADDR,sizeof(CLK_Obj));
myCpu=CPU_init((void*)NULL,sizeof(CPU_Obj));
myFlash=FLASH_init((void*)FLASH_BASE_ADDR,sizeof(FLASH_Obj));
myGpio=GPIO_init((void*)GPIO_BASE_ADDR,sizeof(GPIO_Obj));
myPie=PIE_init((void*)PIE_BASE_ADDR,sizeof(PIE_Obj));
myPll=PLL_init((void*)PLL_BASE_ADDR,sizeof(PLL_Obj));
myTimer=TIMER_init((void*)TIMER0_BASE_ADDR,sizeof(TIMER_Obj));
myWDog=WDOG_init((void*)WDOG_BASE_ADDR,sizeof(WDOG_Obj));
//执行基本系统初始化
WDOG_禁用(myWDog);
时钟启用时钟(myClk);
(*设备校准)();
//选择内部振荡器1作为时钟源
时钟设置OscSrc(myClk,时钟OscSrc内部);
//为x10/2设置PLL,其将产生50Mhz=10Mhz*10/2
PLL_设置(myPll、PLL_乘法器_10、PLL_divide选择_ClkIn_by_2);
//禁用饼图和所有中断
PIE_禁用(myPie);
反对派(myPie);
CPU_禁用全局链接(myCpu);
CPU_clearIntFlags(myCpu);
//如果从闪存复制RAM运行,则只能将功能复制到RAM
#ifdef_闪存
memcpy(&RamfuncsRunStart,&RamfuncsLoadStart,(size\u t)&RamfuncsLoadSize);
#恩迪夫
//设置调试向量表并启用饼图
PIE_SetDebuggIntVectorTable(myPie);
PIE_启用(myPie);
//在饼图向量表中注册中断处理程序
PIE\u registerPieIntHandler(myPie、PIE\u GroupNumber\u 1、PIE\u SubGroupNumber\u 7、(intVec\u t)和cpu\u Timer 0\u isr);
//将CPU计时器0配置为每500毫秒中断一次:
//60MHz CPU频率,50毫秒周期(以秒为单位)
//配置cputimer(&CpuTimer0,60,500000);
计时器停止(myTimer);
定时器设置周期(myTimer,50*500000);
定时器设置预分频器(myTimer,0);
重新加载计时器(myTimer);
定时器\设置仿真模式(myTimer,定时器\仿真模式\下一次减量后停止);
计时器启用点(myTimer);
定时器启动(myTimer);
//将GPIO 0-3配置为输出
GPIO_设置模式(myGpio、GPIO_编号_0、GPIO_0模式_一般用途);
GPIO_设置模式(myGpio、GPIO_编号_1、GPIO_0_模式_一般用途);
GPIO_设置模式(myGpio、GPIO_编号_2、GPIO_0_模式_一般用途);
GPIO_设置模式(myGpio、GPIO_编号_3、GPIO_0_模式_一般用途);
GPIO_设置方向(myGpio、GPIO_编号_0、GPIO_方向_输出);
GPIO_设置方向(myGpio、GPIO_编号_1、GPIO_方向_输出);
GPIO_设置方向(myGpio、GPIO_编号_2、GPIO_方向_输出);
GPIO_设置方向(myGpio、GPIO_编号_3、GPIO_方向_输出);
GPIO_设置低(myGpio,GPIO_编号为0);
GPIO_设置高(myGpio,GPIO_编号_1);
GPIO_setLow(myGpio,GPIO_编号_2);
GPIO_设置高(myGpio,GPIO_编号_3);
//启用连接到CPU计时器0的CPU INT1:
CPU_enableInt(myCpu,CPU_IntNumber_1);
//在饼图中启用TINT0:组1中断7
PIE_enableTimer0Int(myPie);
//启用全局中断和更高优先级的实时调试事件
CPU_enableGlobalInts(myCpu);
CPU_enableDebugInt(myCpu);
对于(;;){
__asm(“NOP”);
}
}    
__中断无效cpu\U定时器0\U isr(无效)
{
中断计数++;
//切换GPIOs
GPIO_切换(myGpio,GPIO_编号_0);
GPIO_切换(myGpio,GPIO_编号_1);
GPIO_切换(myGpio、GPIO_编号_2);
GPIO_切换(myGpio、GPIO_编号_3);
//确认此中断以接收来自组1的更多中断
PIE_clearInt(myPie,PIE_GroupNumber_1);
} 
//===========================================================================
//没有了。
//===========================================================================
正如我所看到的,这里发生了很多事情。但是,我找不到学习编码C2000的基础知识的地方

我有一些巴西威士忌
//########################################################################
//
//  File:   f2802x_examples/timed_led_blink/Example_F2802xLedBlink.c
//
//  Title:  F2802x LED Blink Getting Started Program.
//
//  Group:          C2000
//  Target Device:  TMS320F2802x
//
//! \addtogroup example_list
//!  <h1>LED Blink</h1>
//!
//!   This example configures CPU Timer0 for a 500 msec period, and toggles 
//!   the GPIO0-4 LEDs  once per interrupt. For testing purposes, this example
//!   also increments a counter each time the timer asserts an interrupt.
//!
//!   Watch Variables:
//!   - interruptCount
//!
//!   Monitor the GPIO0-4 LEDs blink on (for 500 msec) and off (for 500 msec) 
//!   on the 2802x0 control card.
//
//  (C) Copyright 2012, Texas Instruments, Inc.
//#############################################################################
// $TI Release: PACKAGE NAME $
// $Release Date: PACKAGE RELEASE DATE $
//#############################################################################

#include "DSP28x_Project.h"   // Device Headerfile and Examples Include File

#include "f2802x_common/include/adc.h"
#include "f2802x_common/include/clk.h"
#include "f2802x_common/include/flash.h"
#include "f2802x_common/include/gpio.h"
#include "f2802x_common/include/pie.h"
#include "f2802x_common/include/pll.h"
#include "f2802x_common/include/timer.h"
#include "f2802x_common/include/wdog.h"

// Prototype statements for functions found within this file.
__interrupt void cpu_timer0_isr(void);

uint16_t interruptCount = 0;

ADC_Handle myAdc;
CLK_Handle myClk;
FLASH_Handle myFlash;
GPIO_Handle myGpio;
PIE_Handle myPie;
TIMER_Handle myTimer;

void main(void)
{

    CPU_Handle myCpu;
    PLL_Handle myPll;
    WDOG_Handle myWDog;

    // Initialize all the handles needed for this application    
    myAdc = ADC_init((void *)ADC_BASE_ADDR, sizeof(ADC_Obj));
    myClk = CLK_init((void *)CLK_BASE_ADDR, sizeof(CLK_Obj));
    myCpu = CPU_init((void *)NULL, sizeof(CPU_Obj));
    myFlash = FLASH_init((void *)FLASH_BASE_ADDR, sizeof(FLASH_Obj));
    myGpio = GPIO_init((void *)GPIO_BASE_ADDR, sizeof(GPIO_Obj));
    myPie = PIE_init((void *)PIE_BASE_ADDR, sizeof(PIE_Obj));
    myPll = PLL_init((void *)PLL_BASE_ADDR, sizeof(PLL_Obj));
    myTimer = TIMER_init((void *)TIMER0_BASE_ADDR, sizeof(TIMER_Obj));
    myWDog = WDOG_init((void *)WDOG_BASE_ADDR, sizeof(WDOG_Obj));

    // Perform basic system initialization    
    WDOG_disable(myWDog);
    CLK_enableAdcClock(myClk);
    (*Device_cal)();

    //Select the internal oscillator 1 as the clock source
    CLK_setOscSrc(myClk, CLK_OscSrc_Internal);

    // Setup the PLL for x10 /2 which will yield 50Mhz = 10Mhz * 10 / 2
    PLL_setup(myPll, PLL_Multiplier_10, PLL_DivideSelect_ClkIn_by_2);

    // Disable the PIE and all interrupts
    PIE_disable(myPie);
    PIE_disableAllInts(myPie);
    CPU_disableGlobalInts(myCpu);
    CPU_clearIntFlags(myCpu);

    // If running from flash copy RAM only functions to RAM   
#ifdef _FLASH
    memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);
#endif      

    // Setup a debug vector table and enable the PIE
    PIE_setDebugIntVectorTable(myPie);
    PIE_enable(myPie);

    // Register interrupt handlers in the PIE vector table
    PIE_registerPieIntHandler(myPie, PIE_GroupNumber_1, PIE_SubGroupNumber_7, (intVec_t)&cpu_timer0_isr);

    // Configure CPU-Timer 0 to interrupt every 500 milliseconds:
    // 60MHz CPU Freq, 50 millisecond Period (in uSeconds)
    //    ConfigCpuTimer(&CpuTimer0, 60, 500000);
    TIMER_stop(myTimer);
    TIMER_setPeriod(myTimer, 50 * 500000);
    TIMER_setPreScaler(myTimer, 0);
    TIMER_reload(myTimer);
    TIMER_setEmulationMode(myTimer, TIMER_EmulationMode_StopAfterNextDecrement);
    TIMER_enableInt(myTimer);

    TIMER_start(myTimer);    

    // Configure GPIO 0-3 as outputs
    GPIO_setMode(myGpio, GPIO_Number_0, GPIO_0_Mode_GeneralPurpose);
    GPIO_setMode(myGpio, GPIO_Number_1, GPIO_0_Mode_GeneralPurpose);
    GPIO_setMode(myGpio, GPIO_Number_2, GPIO_0_Mode_GeneralPurpose);
    GPIO_setMode(myGpio, GPIO_Number_3, GPIO_0_Mode_GeneralPurpose);

    GPIO_setDirection(myGpio, GPIO_Number_0, GPIO_Direction_Output);
    GPIO_setDirection(myGpio, GPIO_Number_1, GPIO_Direction_Output);
    GPIO_setDirection(myGpio, GPIO_Number_2, GPIO_Direction_Output);
    GPIO_setDirection(myGpio, GPIO_Number_3, GPIO_Direction_Output);

    GPIO_setLow(myGpio, GPIO_Number_0);
    GPIO_setHigh(myGpio, GPIO_Number_1);
    GPIO_setLow(myGpio, GPIO_Number_2);
    GPIO_setHigh(myGpio, GPIO_Number_3);

    // Enable CPU INT1 which is connected to CPU-Timer 0:
    CPU_enableInt(myCpu, CPU_IntNumber_1);

    // Enable TINT0 in the PIE: Group 1 interrupt 7
    PIE_enableTimer0Int(myPie);

    // Enable global Interrupts and higher priority real-time debug events
    CPU_enableGlobalInts(myCpu);
    CPU_enableDebugInt(myCpu);

    for(;;){
        __asm(" NOP");
    }

}    

__interrupt void cpu_timer0_isr(void)
{
    interruptCount++;

    // Toggle GPIOs
    GPIO_toggle(myGpio, GPIO_Number_0);
    GPIO_toggle(myGpio, GPIO_Number_1);
    GPIO_toggle(myGpio, GPIO_Number_2);
    GPIO_toggle(myGpio, GPIO_Number_3);

    // Acknowledge this interrupt to receive more interrupts from group 1
    PIE_clearInt(myPie, PIE_GroupNumber_1);
} 

//===========================================================================
// No more.
//===========================================================================
cat /proc/interrupts