- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的“数字信号处理器简介”类(class)使用 C2000 Piccolo Launchpad 来教授数字信号处理器。
目前,我完全迷失了。因为,我的老师似乎没有兴趣为我们提供任何在家学习的 Material 。
例如,
以下代码来自德州仪器的controlSUITE包。
//########################################################################
//
// 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.
//===========================================================================
正如我所见,这里发生了很多事情。但是,我找不到学习 C2000 编码基础知识的地方。
我有一些基本问题:
(1) __interrupt
是什么意思?和__asm
关键词呢?在哪里可以找到这些关键字的引用?
(2) 我如何知道我需要多少个句柄?例如,对于这个 LED 闪烁应用程序,他们声明了 9 个句柄。为什么?
(3)什么是“基址”?
(4) 为什么 WachDog 被禁用?为什么 PIE 和 CPU 及其中断被禁用?
(5)什么是定时器预标量?
(6)什么是定时器仿真模式?
(7) GPIO_setmode 的作用是什么?该模式是关于什么的?
(8) 我可以从哪里开始了解所有这些细节?
这是一个很好的开始 Material 还是浪费时间? http://www.ti.com/lit/ug/spru430f/spru430f.pdf
最佳答案
__interrupt
告诉编译器用适合平台的代码包装函数,通常是保存和恢复函数使用的寄存器,这样被中断的代码就不会受到影响,并以“return”返回从中断”指令而不是“从子程序返回”指令
__asm
告诉编译器在编译器的输出发送到汇编器之前插入机器级指令
因为代码使用了 TI 库和头文件定义的九个硬件子系统
在硬件中,有一组寄存器控制I/O、定时器等硬件功能。每组寄存器都分配有一个内存范围,从基地址开始。可能有多个相同的组,例如多个计时器。通过为每个组使用基地址,可以在所有实例之间共享处理该功能的代码(例如计时器)。
我怀疑正在执行的任何初始化都需要比看门狗间隔更长的时间,因此将其禁用以防止 CPU 被看门狗重置
它是定时器源时钟的分频器,用于为定时器创建适当的分辨率和范围
我不知道。也许这只是“模式”的一个奇怪的名字。或者它可能是一种传统模式。
GPIO 硬件必须具有选项,例如,将中断附加到边缘,或更改转换速率或迟滞,或许多事情中的任何一个。
C2000 Piccolo 引用手册C2000 Piccolo 数据表编译器文档controlSUITE包文档
关于c - 如何理解这段DSP编程代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33814377/
所以我昨晚下载了 Asterisk 的源代码并尝试编译它。一切似乎都运行顺利,在安装过程中没有出现明显的错误。我通过网络将 2 个 IP 电话连接到服务器,它们注册得很好。之后我的问题来了: 在尝试从
我可以将 beagleboard 的 dsp 内核用于哪些应用程序?我可以在 OpenCV 中使用 DSP 加速进行背景减除算法吗? 最佳答案 您可以使用 DSP 进行各种计算。它是针对 DSP 应用
我正在实现“过滤器扫描”效果(我不知道它是否是这样调用的)。我所做的基本上是创建一个低通滤波器并使其沿某个频率范围“移动”。 为了计算给定时刻的滤波器截止频率,我使用用户提供的线性函数,它产生 0 到
我想为这个 DSP 处理器实现一些东西。 http://www.onsemi.com/pub_link/Collateral/BELASIGNA300-D.PDF这是它的数据表.. 这是我想要实现的函
这个问题是相关的: DSP : audio processing : squart or log to leverage fft? 我在其中迷失了选择正确的算法。 现在, 目标: 我想获取信号的所有频
我想学习录音,所以我编译了下面网上找到的代码,但是由于某些原因我打不开/dev/dsp。我尝试关闭 pulseaudio,但我一 killall 它就重新打开了。我真的不知道我在做什么;这周后半段我一
我想实现一些旨在在 beagleboard 上运行的图像处理算法.这些算法广泛使用卷积。我正在尝试为 2D 卷积找到一个好的 C 实现(可能使用快速傅里叶变换)。我还希望该算法能够在 beaglebo
最近我一直在检查 CMSIS DSP 复杂数学函数库,我看到了一些我无法完全理解的东西,因此我是关于 SO 的第一篇文章。 我无法理解的是 he11 复杂的点积函数如何产生正确的结果?该功能可在此处找
我会尝试在这里提出具体问题:- 我正在使用 Python 查看一些相对基础的 DSP,我想实现自动增益控制。除非我弄错了,否则这将采用(简化的)形式: 我不太关心 i/o 信号之间的相移,输入信号是由
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
我正在尝试实现 this extenstion的 Karplus-Strong 弹拨弦算法,但我不明白那里使用的符号。也许需要多年的学习,但也许不会——也许你可以告诉我。 我认为下面的方程是在频域之类
我正在寻找适用于 Android 的快速 DSP 库。看起来好像将 FFTW 或其他一些带有 JNI 的 native 库使用可能是我的最佳选择。我使用过 JTransforms,它似乎可以与用于 x
我在 iPhone 上玩卡拉 OK 应用程序并提出以下问题: 该应用程序允许其用户控制艺术家的音量;甚至静音。这怎么可能?调整艺术家声音/设置均衡器等是否意味着对所需频率进行一些转换?这里需要什么样的
我有一个关于在 FMOD 中停止 DSP 的问题。我有一个按钮,我想停止启用 DSP。 - (IBAction)myButton:(id)sender { FMOD_DSP_Reset(FMOD
我正在考虑将我自己的 3d 音频渲染系统编码作为一个教育项目,因为我确定 OpenAL 等技术过于面向设备并且缺乏我使用的功能。我希望它尽可能灵活。为此,我已经开始考虑我应该如何对其进行编码,以便我可
我对复值频谱执行 iFFT 并通过让第一个样本归零来更改相应的时域信号。最后,我通过 FFT 将其转换回频域。 我想知道这里使用两侧(对称)频谱或仅使用一侧频谱(仅正频率)之间的(物理)差异在哪里,因
我有一个内存很小的数据记录器,我想在固件中实现对过滤器的支持。 我可以轻松实现哪些类型的过滤器而不需要缓冲区或庞大的功能? 想到的是指数移动平均线,例如: sample = (alpha * new_
我正在查看相位累加器的代码,我一定是个傻瓜,因为我不明白。代码很简单: Every Clock Tick do: accum = accum + NCO_param; return a
如何将基带采样信号从实值样本转换为复值样本(实部、虚部),反之亦然。 我的样本是整数,我正在寻找一种快速(但准确)的转换算法。 C++ 示例代码(真实的,不复杂的;-)将非常受欢迎。 编辑:IPP 代
在 Linux 中播放或录制一些音频只是读取或写入/dev/dsp 但如何在 Windows 中执行相同的操作? (与 C) 最佳答案 没有静态设备名称,你应该使用waveOut*函数,here是使用
我是一名优秀的程序员,十分优秀!