Chinaunix首页 | 论坛 | 博客
  • 博客访问: 280982
  • 博文数量: 39
  • 博客积分: 1215
  • 博客等级: 军士长
  • 技术积分: 471
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-17 19:34
个人简介

grace under pressure

文章分类

全部博文(39)

文章存档

2013年(6)

2012年(28)

2011年(5)

分类: C/C++

2013-12-25 13:02:48

序:

之前都是做ARM相关的开发,由于机遇,需要做DSP C6000的开发,所以开始接触DSP。在开始应用DSP做项目之前,接触到了DSP/BIOS(V5.4以后更名为SYS/BIOS),出于兴趣爱好与好奇,开始探索一下TI的实时操作系统(其实之前就知道这实际上只是一个实时的内核)C6000的板子,由于是自己设计的,稳定性能没有SEED的开发板强,又加上CCS经常莫名其妙的蓝屏和各种无解的BUG,因此先基于SEED-DEC5502研究一下DSP/BIOS。基于时间问题,研究深度有限,后面如果有用到项目里面,时间允许的话,会接着更新。

1、      关于DSP/BIOS

DSP/BIOS是一个用户可剪裁的实时操作系统,主要由三部分组成:多线程实时内核;实时分析工具;芯片支持库。利用实时操作系统开发程序,可以方便快速的开发复杂的DSP程序。操作系统维护调度多线程的运行,只需将定制的数字信号算法作为一个线程嵌入系统即可;芯片支持库帮助管理外设资源,复杂的外设寄存器初始化可以利用直接图形工具配置;实时分析工具可以帮助分析算法实时运行情况。

DSP/BIOS实时操作系统的图形配置界面包括:

*全局设置(System)—包括内存端设置、锁相环设置、中断向量入口设置等;

*调试工具(Instrumentation)—记录器(LOG)可以提供调试信息,但是特别针对实时操作优化;

*操作系统调度工具(Scheduling)—包括定时器、周期器、硬件中断管理、软件中断管理、任务调度、系统空载任务函数;

*同步机制(Synchronization)

—提供一般操作系统都具有的信号灯、邮箱、队列、锁四个工具;

*主机交互接口(Input/Output)

—提供DSP实时运行时与主机通过仿真口和CCS交互数据的机制;

*芯片支持库(Chip Support Library)—针对不同的DSP芯片帮助配置DSP的外设资源,最常用的有DMA、MCBSP的配置。

注意

A、              CSL之前版本集成在图形界面配置中,DSP/BIOS V5.4.2.01已经被移出去了(具体从哪个版本开始移除,待考证)

B、              DSP/BIOS V5.4.2.01开始已经不支持CCS V4,只支持CCS V5

C、              BIOS学习的过程中,几个手册比较重要:spru423i—>user guide等等,位置在安装目录下的docs文件夹。一定要先大致的浏览一遍

2、      DSP/BIOS基本配置

参见http://blog.chinaunix.net/uid-20620288-id-3379093.html

其他参考链接:

网友DSP学习心得:http://blog.chinaunix.net/uid/20620288/cid-165748-list-5.html

DSP/BIOS 实时性运算验证(FFT)http://blog.chinaunix.net/uid-22477616-id-1773821.html

其他有待补充

3、      一个DSP/BIOSCSL库的例程(GPIO)

软件平台:CCS V5.4.0

硬件平台:SEED-DEC5502

说明:因为DSP/BIOS V5.4.2.01是没有集成CSL库的,所以我下载安装了一个5502的CSL(V2.31.00.7)库,我会在附件给出,也可以自己去官网下载,并安装在了bios_5_42_01_09的根目录下。工程是基于DSP/BIOS V5.4.2.01Hello例程改写

关于如何创建一个新的DSP/BIOS V5.4.2.01例程

A、 打开CCS V5

B、 File->New-> CCS project

C、 如附图0所示,点击finish

 

步骤:

A、              双击打开hello.tcf,在TSK上面右击,选择insert TSK,然后输入TSK的名称,我这里使用的是ledtask,见附图1

B、              ledtask上面右击,选择Properties

C、              点击Function,修改Task function_ledtaskFxn,见附图2

D、              关闭tcf配置窗口,并再修改hello.c文件为附件中内容,并在工程的Properties中将CSL库文件的路径添加进去,见附图3

E、               下载运行

注意:完成步骤E后运行会提示#35 #error NO CHIP DEFINED,解决方法为:选择工程,右击选择Properties,然后Build->C5500 Compiler->Advanced Options->Predefined Symbols中添加"CHIP_5502"


附件:


点击(此处)折叠或打开

  1. #include <std.h>
  2. #include <stdio.h>
  3. #include <log.h>
  4.  
  5. #include "hellocfg.h"
  6. #include <csl.h>
  7. #include <csl_pll.h>
  8. #include <csl_chip.h>
  9. #include <csl_irq.h>
  10. #include <csl_gpt.h>
  11.  
  12. void delay_vt(Int i);
  13. /* Define the power-off time length of LED */
  14. Uint16 LEDMARK = 0; // 设置指示灯的开关标志
  15.  
  16. /* 通过定义宏来控制两个外围存储器映射的寄存器,从而实现对GPIO口的控制 */
  17. #define GPIODIR (*(volatile ioport Uint16*)(0x3400))
  18. #define GPIODATA (*(volatile ioport Uint16*)(0x3401))
  19. /*
  20.  * ======== main ========
  21.  */
  22. Void main()
  23. {
  24.     LOG_printf(&trace, "hello world!");
  25.  
  26.     /* Config GPIO7 in order to ignite led D5*/
  27.     GPIODIR = 0x80; // config the GPIO7 as output pin
  28.     /* fall into DSP/BIOS idle loop */
  29.     return;
  30. }
  31. void ledtaskFxn()
  32. {
  33.          while(1)
  34.          {
  35.          if(LEDMARK==0)
  36.                 {
  37.                         GPIODATA = 0x00; /* 关闭指示灯D5 */
  38.                         LEDMARK = 1;
  39.                 }
  40.                 else
  41.                 {
  42.                          GPIODATA = 0x80; /* 打开指示灯D5 */
  43.                         LEDMARK = 0;
  44.                 }
  45.          delay_vt(10000);
  46.          }
  47. }
  48.  
  49. void delay_vt(int i)
  50. {
  51.          int a=3000,tmp,tmpi;
  52.          for(tmp=a;tmp>0;tmp--)
  53.                    for(tmpi=i;tmpi>0;tmpi--)
  54.                             ;
  55. }


附图



附图0

附图1

附图2

附图3

阅读(5783) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~