微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > DSP学习交流 > + DSP/BIOS

+ DSP/BIOS

时间:10-02 整理:3721RD 点击:
       DSP/BIOS是一个简易的实时嵌入式操作系统,主要面向实时调度于同步、主机/目标系统通信,以及实时监测系统等应用,具有实时操作系统的诸多功能,如任务的调度管理、任务间的同步和通信、内存管理、实时时钟管理、中断服务管理、外设驱动程序管理等。       TI公司的DSP开发软件包括集成开发系统(CCS),实时操作系统(DSP/BIOS),第三方算法库标准(eXpressDSP).
       DSP/BIOS以模块化方式提供给用户对线程、中断、定时器、内存资源、所有外设资源的管理能力都可以根据需要裁剪。实际应用中需要的定制算法作为一个线程插入DSP/BIOS的调度队列,由DSP/BIOS进行调度。
       使用前需了解DSP/BIOS用户手册和DSP/BIOS设备驱动的开发与使用,具体内容包括DSP/BIOS概述、程序生成、监测、线性调度、存储器和低级函数、IO概述和管道、流IO和设备驱动;设备驱动开发工具包、DSP/BIOS设备驱动的结构和使用、使用DSP/BIOS设备驱动、GPIO类驱动、微型驱动的开发步骤、IOM接口等。
       DSP/BIOS的组成结构:
       1  DSP/BIOS API: 编写的程序可以调用API接口函数;
       2  DSP/BIOS 配置:创建的配置文件定义了程序使用的静态BIOS对象;
       3  DSP/BIOS 分析工具:集成在CCS上的一些BIOS分析工具可以对运行与目标设备上的程序进行监测,包括CPU负担、时间、日志、线程执行状态等。
       DSP/BIOS分为很多模块,提供的所有API函数都按照模块分类,如下图所示:
              


           其他的知识点包括:
           DSP/BIOS 的配置:MEM设置、LOG设置、CLK设置、HWI设置、SWI设置、TSK设置、Synchronization设置、Input/Output设置等。
          可以看出TI对Bios的支持投入了很大精力,在DSP的外设、内存、系统优化等都下了很大的功夫。
          下面是DSP基于BIOS的一段示例程序,以供参考:      
        

  1. /****************************************************************************/
  2. /*                                                                          */
  3. /*              广州创龙电子科技有限公司                                    */
  4. /*                                                                          */
  5. /*              Copyright 2014 Tronlong All rights reserved                 */
  6. /*                                                                          */
  7. /****************************************************************************/
  8. /****************************************************************************/
  9. /*                                                                          */
  10. /*              底板 LED 测试(时钟)                                       */
  11. /*                                                                          */
  12. /*              2014年08月22日                                              */
  13. /*                                                                          */
  14. /****************************************************************************/
  15. #include

  16. #include
  17. #include

  18. #include
  19. #include
  20. #include

  21. // 库
  22. #include "TL6748.h"                  // 创龙 DSP6748 开发板相关声明

  23. #include "hw_types.h"                // 宏命令
  24. #include "hw_syscfg0_C6748.h"        // 系统配置模块寄存器
  25. #include "soc_C6748.h"               // DSP C6748 外设寄存器

  26. #include "psc.h"                     // 电源与睡眠控制宏及设备抽象层函数声明
  27. #include "gpio.h"                    // 通用输入输出口宏及设备抽象层函数声明

  28. /****************************************************************************/
  29. /*                                                                          */
  30. /*              宏定义                                                      */
  31. /*                                                                          */
  32. /****************************************************************************/

  33. /****************************************************************************/
  34. /*                                                                          */
  35. /*              全局变量                                                    */
  36. /*                                                                          */
  37. /****************************************************************************/

  38. /****************************************************************************/
  39. /*                                                                          */
  40. /*              函数声明                                                    */
  41. /*                                                                          */
  42. /****************************************************************************/

  43. /****************************************************************************/
  44. /*                                                                          */
  45. /*              PSC 初始化                                                  */
  46. /*                                                                          */
  47. /****************************************************************************/
  48. void PSCInit(void)
  49. {
  50.         // 使能 GPIO 模块
  51.         // 对相应外设模块的使能也可以在 BootLoader 中完成
  52.     PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
  53. }

  54. /****************************************************************************/
  55. /*                                                                          */
  56. /*              GPIO 管脚复用配置                                           */
  57. /*                                                                          */
  58. /****************************************************************************/
  59. void GPIOBankPinMuxSet(void)
  60. {
  61.         // 配置相应的 GPIO 口功能为普通输入输出口
  62.         // 底板 LED
  63.         GPIOBank0Pin0PinMuxSetup();
  64.         GPIOBank0Pin1PinMuxSetup();
  65.         GPIOBank0Pin2PinMuxSetup();
  66.         GPIOBank0Pin5PinMuxSetup();
  67.         // 核心板
  68.         GPIOBank6Pin12PinMuxSetup();
  69.         GPIOBank6Pin13PinMuxSetup();
  70. }

  71. /****************************************************************************/
  72. /*                                                                          */
  73. /*              GPIO 管脚初始化                                             */
  74. /*                                                                          */
  75. /****************************************************************************/
  76. void GPIOBankPinInit(void)
  77. {
  78.         // 配置 LED 对应管脚为输出管脚
  79.     // OMAPL138 及 DSP C6748 共有 144 个 GPIO
  80.         // 以下为各组 GPIO BANK 起始管脚对应值
  81.     // 范围 1-144
  82.         // GPIO0[0] 1
  83.     // GPIO1[0] 17
  84.         // GPIO2[0] 33
  85.     // GPIO3[0] 49
  86.         // GPIO4[0] 65
  87.     // GPIO5[0] 81
  88.         // GPIO6[0] 97
  89.         // GPIO7[0] 113
  90.         // GPIO8[0] 129

  91.         // 核心板 LED
  92.     GPIODirModeSet(SOC_GPIO_0_REGS, 109, GPIO_DIR_OUTPUT);  // GPIO6[12]
  93.     GPIODirModeSet(SOC_GPIO_0_REGS, 110, GPIO_DIR_OUTPUT);  // GPIO6[13]

  94.     // 底板 LED
  95.     GPIODirModeSet(SOC_GPIO_0_REGS, 1, GPIO_DIR_OUTPUT);    // D7  GPIO0[0]
  96.     GPIODirModeSet(SOC_GPIO_0_REGS, 2, GPIO_DIR_OUTPUT);    // D9  GPIO0[1]
  97.     GPIODirModeSet(SOC_GPIO_0_REGS, 3, GPIO_DIR_OUTPUT);    // D10 GPIO0[2]
  98.     GPIODirModeSet(SOC_GPIO_0_REGS, 6, GPIO_DIR_OUTPUT);    // D6  GPIO0[5]
  99. }

  100. /****************************************************************************/
  101. /*                                                                          */
  102. /*              延时                                                        */
  103. /*                                                                          */
  104. /****************************************************************************/
  105. Void Delay(UInt n)
  106. {
  107.         UInt i;

  108.         for(i=n; i>0; i--);
  109. }

  110. /****************************************************************************/
  111. /*                                                                          */
  112. /*              空闲任务                                                    */
  113. /*                                                                          */
  114. /****************************************************************************/
  115. Void LEDStatus(Void)
  116. {
  117.     System_printf("Enter LEDStatus\n");

  118.     GPIOPinWrite(SOC_GPIO_0_REGS, 109, GPIO_PIN_LOW);
  119.     Task_sleep(2500);
  120.     GPIOPinWrite(SOC_GPIO_0_REGS, 109, GPIO_PIN_HIGH);

  121.     System_printf("Exit LEDStatus\n");
  122.     System_flush();
  123. }

  124. /****************************************************************************/
  125. /*                                                                          */
  126. /*              时钟                                                        */
  127. /*                                                                          */
  128. /****************************************************************************/
  129. Void clkMain(UArg arg)
  130. {
  131.         // 延时
  132.         Delay(0x00FFFFFF);
  133.         // D10 灭 GPIO0[2]
  134.         // D7  亮 GPIO0[0]
  135.         GPIOBankPinsWrite(SOC_GPIO_0_REGS, 0, GPIO_BANK_PIN_0, GPIO_BANK_PIN_2);

  136.         // 延时
  137.         Delay(0x00FFFFFF);
  138.         // D7  灭 GPIO0[0]
  139.         // D6  亮 GPIO0[5]
  140.         GPIOBankPinsWrite(SOC_GPIO_0_REGS, 0, GPIO_BANK_PIN_5, GPIO_BANK_PIN_0);

  141.         // 延时
  142.         Delay(0x00FFFFFF);
  143.         // D6  灭 GPIO0[5]
  144.         // D9  亮 GPIO0[1]
  145.         GPIOBankPinsWrite(SOC_GPIO_0_REGS, 0, GPIO_BANK_PIN_1, GPIO_BANK_PIN_5);

  146.         // 延时
  147.         Delay(0x00FFFFFF);
  148.         // D9  灭 GPIO0[1]
  149.         // D10 亮 GPIO0[2]
  150.         GPIOBankPinsWrite(SOC_GPIO_0_REGS, 0, GPIO_BANK_PIN_2, GPIO_BANK_PIN_1);
  151. }

  152. /****************************************************************************/
  153. /*                                                                          */
  154. /*              主函数                                                      */
  155. /*                                                                          */
  156. /****************************************************************************/
  157. Int main()
  158. {
  159.         // 外设使能配置
  160.         PSCInit();

  161.     // 管脚复用配置
  162.     GPIOBankPinMuxSet();

  163.     // GPIO 管脚初始化
  164.     GPIOBankPinInit();

  165.     // 创建一个时钟(时间以系统时钟为基准)
  166.     Clock_Params clkParams;

  167.     Clock_Params_init(&clkParams);
  168.     clkParams.period = 1000;
  169.     clkParams.startFlag = TRUE;
  170.     Clock_create(clkMain, 5, &clkParams, NULL);

  171.     // 启动 SYS/BIOS 系统
  172.     BIOS_start();

  173.     return(0);
  174. }

复制代码


使用BIOS,又提升了一个层次

想问一下,你们发帖怎么复制的代码?我只会截图

      

里面的 工具是论坛专用复制代码。


谢谢

正准备玩DSP/BIOS

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top