DSP学习笔记

DSP 学习笔记

[TOC]

芯片选型

TI系列

  1. C6000系列:C62xx,C64xx,C67xx,主要公寓宽带网络和数字影像领域,而数字影像领域多使用固定点数(32bit)DSP,而雷达多使用浮点DSP.

    TMS320C6455 主要参数:

  • fixed-point DSP,单核,
  • 720MHz主频
  • 32K-Byte ROM
  • 512M-Byte扩展DDR2/SDRAM
  • 697-Pin BGA封装
  1. C5000系列: 主打低功耗
  2. C2000系列: 用于工业控制

ADI系列

ADSP-21367 SHARPC Floating-Point

硬件设计

软件开发

IDE(CCS5.3 + External Editor)

使用外部的Editor进行Code

Looking to use an external editor for source code with CC V5. I went to preferences->general->editors->file associations, added *.c and *.h to "file types" window, added my editor executable to "associated editors" window and clicked default for each.

暂未找到合适的方法

直接在Sublime中修改

  1. 在CCS中建好工程,添加好文件;
  2. 把工程所在文件夹拖入sublime中
  3. 编译好后,在CCS中更新

DSP/BIOS RTOS与多线程

DSP/BIOS

DSP/BIOS 并不是真正的实时操作系统,并且不包含网络功能;

DSP/BIOS 由三部分组成,即:

  1. DSP/BIOS 实时库和API;
  2. DSP/BIOS 配置工具,提供可视化的编程环境
  3. DSP/BIOS 插件,用于支持调试过程

TI为cC6000系列推出了TCP/IP NDK, 包括应用层的telnet, DHCP, HTTP等.

由于NDK已经提供了完整的TCP/IP库函数,程序员开发的代码只须按需要进行配置即可。下面是将嵌入式设备配置为车间局域网节点的核心代码, 为了让NetworkConfig与系统中的其它功能绑定在一起,可以通过开发平台创建一个TSK任务管理器对象,并将其定义为一个独立的线程任务。这样,TCPStackStart就加入到嵌入式系统中了。

char *LocalIPAddr ="128.247.117.12";
char *LocalIPMask ="255.255.254.0";
char *GatewayIP ="128.247.116.1";
char *DomainName ="demo.net";
int NetworkConfig()
{
  int rc;
  CI_IPNET NA;
  CI_ROUTE RT;
  HANDLE hCfg;
  NC_SystemOpen();
// Create a new configuration TCP/IP Stack Initialization and Configuration
  hCfg = CfgNew();
  if( !hCfg )
  { goto main_exit; }
// Manually configure our local IP address
  bzero( &NA, sizeof(NA) );
  NA.IPAddr = inet_addr(LocalIPAddr);
  NA.IPMask = inet_addr(LocalIPMask);
  strcpy( NA.Domain, DomainName );
  NA.NetType = 0;
// Add the address to interface 1
  CfgAddEntry( hCfg, CFGTAG_IPNET, 1, 0,
  sizeof(CI_IPNET), (UINT8 *)&NA, 0 );
// Add the default gateway.
  bzero( &RT, sizeof(RT) );
  RT.IPDestAddr = 0;
  RT.IPDestMask = 0;
  RT.IPGateAddr = inet_addr(GatewayIP);
// Add the route
  CfgAddEntry( hCfg, CFGTAG_ROUTE, 0, 0,
  sizeof(CI_ROUTE), (UINT8 *)&RT, 0 );
  do
  {
  rc = NC_NetStart( hCfg, NetworkStart, NetworkStop, NetworkIPAddr );
  } while( rc > 0 );
// Delete Configuration
  CfgFree( hCfg );
// Close the OS
  main_exit:
  NC_SystemClose();
  return(0);
}

多线程

C6455对易变的量(volatile)做出反应的子??榻凶鱿叱?Threads),多线程在单核处理器上运行会按照优先级执行

DSP/BIOS 通过四种任务形式控制任务优先级,其中:HWI>SWI>TSK>IDL(Background Thread),在CCS中可通过configuration.tcf->scheduling 查看.

HWI中包含了CLK功能:

Triggered at the rate of the on-device timer interrupt.

SWI中包含了PRD功能:

Use PRD functions when you want a function to run at a rate based on a multiple of the on-device timer.s low-resolution rate or another event (such as an external interrupt). These functions run as SWI functions.

抢占式程序调度:当多个线程就绪时,抢占式调度算法会挑选一个程序执行,到达一定时间后(一般为20ms~50ms)若该程序仍在运行,他就会被挂起,然后选择一个已就绪程序执行

非抢占式程序调度:程序运行直到阻塞或自动释放CPU,中断发生时不会调度

多线程实现函数:

Tsk_yield();//用于将自己挂起(Pend),交给下一个Tsk

MBX_pend(mbx,msg,timeout);//mailBox函数在synchronization中,一般用于在不同tsk间传递参数
    //如果mbx不为空,将复制其中的第一个数据到msg指定的地址并且返回TRUE.
    //如果为空,这个任务将被挂起,直到MBX_post函数被调用或者timeout设置的时间到.
    //如果timeout的值是SYS_FOREVER,那这个任务将一直挂起,直到MBX_post函数被调用
    //如果timeout的值是0,那么将立即返回FALSE.

SEM_pendBinary(&Sem_Tsk,SYS_FOREVER);//采用这种方式等待调用Sem_Tsk线程    

添加Tsk任务模块

新建DSP/BIOS Configuration File/直接打开cfg-> 进入Configuration Tool->InsertTsk->定义Tsk Function;

编写任务函数:


#include <xdc/std.h>
#include <xdc/runtime/log.h>
#include <ti/sysbios/knl/Task.h>
#include <xdc/runtime/System.h>
#include <ti/sysbios/BIOS.h>

void func_tsk0(void);
void func_tsk1(void);

void main(int argc, char const *argv[])
{
    system_printf();
    BIOS_start();
}

void func_tsk0(void)
{
    int count = 0;
    while(count<10)
    {
        Log_info1("task0 %d\n",count); //打印日志信息
        Task_yield(); //优先级调度函数,如果有相同priority的函数,则调度到同优先级的其他函数执行
        count++;
    }
    BIOS_exit(0);
}

void func_tsk1(void)
{
    int count = 0;
    while(count<10)
    {
        Log_info1("task1 %d\n",count);
        Task_yield(); //优先级调度函数,如果有相同priority的函数,则调度到同优先级的其他函数执行
        count++;
    }
    BIOS_exit(0);
}

添加SWI任务???/h5>
  1. 添加一个全局的 SWI Handle;
  2. 初始胡Swi 参数;
  3. 创建软件中断;
  4. 编写中断服务程序
  5. 更改软件中断计数器 trigger,

关于任务执行状态

  • pend 阻塞: Tsk等待信号输入,无法确切知道何时恢复;或被高优先级Tsk抢占时阻塞

  • suspend 挂起: 用于调试过程,类似于加断点,只有resume之后才会ready

  • sleep 睡眠: 挂起给定时间

  • yield : 直接转到ready状态的任务

  • synchronous 同步/asynchronous 异步: 发出调用后,在未收到结果之前不返回值.>

flash烧写

对于TMS320LF24XX,TMS320LF28xx利用CCS里面自带的flash burn插件进行烧写。

对于TMS320C64xx(包括C6211)需要自己手工编写BootLoader 烧写的程序,写入flash中。

利用通用的HEX6x工具实现flash烧写

由于C6000系列的DSP Flash Bootload时,采用2级引导方式,板卡上电引导时,DSP会自动搬移1K字节Flash空间的内容到0~0x400片内ISRAM空间,在进行应用程序的cmd文件中必须为Bootloader保留0~0x400的片内ISRAM空间。

  1. 将Boot.asm的程序加入到用户程序中,将其地址分配为0x00~0x400;
  2. 编写HEX转换到的CMD文件;
  3. 利用HEX6x工具,将OUT文件转换成为HEX文件;
  4. 将之烧写到flash.

利用flashburn工具烧写

  1. 将自己工程中生成的***.out 文件改名为flash.out.复制到C6455_flashburn\hex2image文件目录下
  2. 运行test2.bat
  3. 将C6455_flashburn\hex2image目录下的TI_ARR.C文件复制到上一目录C6455_flashburn替代此目录下的TI_ARR.C文件
  4. 在CCS中加载C6455_flashburn\ Flashburn.pjt工程重新编译工程,将编译生成的C6455_flashburn\Debug\ Flashburn.out下载到DSP中运行。当显示WRITE DONE!!时烧写结束并成功。

网络烧写

由于C6000系列的DSP Flash Bootload时,采用2级引导方式,板卡上电引导时,DSP会自动搬移1K字节Flash空间的内容到0~0x400片内ISRAM空间,在进行应用程序的cmd文件中必须为Bootloader保留0~0x400的片内ISRAM空间。

最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351