` 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的一段示例程序,以供参考:
- /****************************************************************************/
- /* */
- /* 广州创龙电子科技有限公司 */
- /* */
- /* Copyright 2014 Tronlong All rights reserved */
- /* */
- /****************************************************************************/
- /****************************************************************************/
- /* */
- /* 底板 LED 测试(时钟) */
- /* */
- /* 2014年08月22日 */
- /* */
- /****************************************************************************/
- #include
- #include
- #include
- #include
- #include
- #include
- // 库
- #include "TL6748.h" // 创龙 DSP6748 开发板相关声明
- #include "hw_types.h" // 宏命令
- #include "hw_syscfg0_C6748.h" // 系统配置模块寄存器
- #include "soc_C6748.h" // DSP C6748 外设寄存器
- #include "psc.h" // 电源与睡眠控制宏及设备抽象层函数声明
- #include "gpio.h" // 通用输入输出口宏及设备抽象层函数声明
- /****************************************************************************/
- /* */
- /* 宏定义 */
- /* */
- /****************************************************************************/
- /****************************************************************************/
- /* */
- /* 全局变量 */
- /* */
- /****************************************************************************/
- /****************************************************************************/
- /* */
- /* 函数声明 */
- /* */
- /****************************************************************************/
- /****************************************************************************/
- /* */
- /* PSC 初始化 */
- /* */
- /****************************************************************************/
- void PSCInit(void)
- {
- // 使能 GPIO 模块
- // 对相应外设模块的使能也可以在 BootLoader 中完成
- PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
- }
- /****************************************************************************/
- /* */
- /* GPIO 管脚复用配置 */
- /* */
- /****************************************************************************/
- void GPIOBankPinMuxSet(void)
- {
- // 配置相应的 GPIO 口功能为普通输入输出口
- // 底板 LED
- GPIOBank0Pin0PinMuxSetup();
- GPIOBank0Pin1PinMuxSetup();
- GPIOBank0Pin2PinMuxSetup();
- GPIOBank0Pin5PinMuxSetup();
- // 核心板
- GPIOBank6Pin12PinMuxSetup();
- GPIOBank6Pin13PinMuxSetup();
- }
- /****************************************************************************/
- /* */
- /* GPIO 管脚初始化 */
- /* */
- /****************************************************************************/
- void GPIOBankPinInit(void)
- {
- // 配置 LED 对应管脚为输出管脚
- // OMAPL138 及 DSP C6748 共有 144 个 GPIO
- // 以下为各组 GPIO BANK 起始管脚对应值
- // 范围 1-144
- // GPIO0[0] 1
- // GPIO1[0] 17
- // GPIO2[0] 33
- // GPIO3[0] 49
- // GPIO4[0] 65
- // GPIO5[0] 81
- // GPIO6[0] 97
- // GPIO7[0] 113
- // GPIO8[0] 129
- // 核心板 LED
- GPIODirModeSet(SOC_GPIO_0_REGS, 109, GPIO_DIR_OUTPUT); // GPIO6[12]
- GPIODirModeSet(SOC_GPIO_0_REGS, 110, GPIO_DIR_OUTPUT); // GPIO6[13]
- // 底板 LED
- GPIODirModeSet(SOC_GPIO_0_REGS, 1, GPIO_DIR_OUTPUT); // D7 GPIO0[0]
- GPIODirModeSet(SOC_GPIO_0_REGS, 2, GPIO_DIR_OUTPUT); // D9 GPIO0[1]
- GPIODirModeSet(SOC_GPIO_0_REGS, 3, GPIO_DIR_OUTPUT); // D10 GPIO0[2]
- GPIODirModeSet(SOC_GPIO_0_REGS, 6, GPIO_DIR_OUTPUT); // D6 GPIO0[5]
- }
- /****************************************************************************/
- /* */
- /* 延时 */
- /* */
- /****************************************************************************/
- Void Delay(UInt n)
- {
- UInt i;
- for(i=n; i>0; i--);
- }
- /****************************************************************************/
- /* */
- /* 空闲任务 */
- /* */
- /****************************************************************************/
- Void LEDStatus(Void)
- {
- System_printf("Enter LEDStatus
- ");
- GPIOPinWrite(SOC_GPIO_0_REGS, 109, GPIO_PIN_LOW);
- Task_sleep(2500);
- GPIOPinWrite(SOC_GPIO_0_REGS, 109, GPIO_PIN_HIGH);
- System_printf("Exit LEDStatus
- ");
- System_flush();
- }
- /****************************************************************************/
- /* */
- /* 时钟 */
- /* */
- /****************************************************************************/
- Void clkMain(UArg arg)
- {
- // 延时
- Delay(0x00FFFFFF);
- // D10 灭 GPIO0[2]
- // D7 亮 GPIO0[0]
- GPIOBankPinsWrite(SOC_GPIO_0_REGS, 0, GPIO_BANK_PIN_0, GPIO_BANK_PIN_2);
- // 延时
- Delay(0x00FFFFFF);
- // D7 灭 GPIO0[0]
- // D6 亮 GPIO0[5]
- GPIOBankPinsWrite(SOC_GPIO_0_REGS, 0, GPIO_BANK_PIN_5, GPIO_BANK_PIN_0);
- // 延时
- Delay(0x00FFFFFF);
- // D6 灭 GPIO0[5]
- // D9 亮 GPIO0[1]
- GPIOBankPinsWrite(SOC_GPIO_0_REGS, 0, GPIO_BANK_PIN_1, GPIO_BANK_PIN_5);
- // 延时
- Delay(0x00FFFFFF);
- // D9 灭 GPIO0[1]
- // D10 亮 GPIO0[2]
- GPIOBankPinsWrite(SOC_GPIO_0_REGS, 0, GPIO_BANK_PIN_2, GPIO_BANK_PIN_1);
- }
- /****************************************************************************/
- /* */
- /* 主函数 */
- /* */
- /****************************************************************************/
- Int main()
- {
- // 外设使能配置
- PSCInit();
- // 管脚复用配置
- GPIOBankPinMuxSet();
- // GPIO 管脚初始化
- GPIOBankPinInit();
- // 创建一个时钟(时间以系统时钟为基准)
- Clock_Params clkParams;
- Clock_Params_init(&clkParams);
- clkParams.period = 1000;
- clkParams.startFlag = TRUE;
- Clock_create(clkMain, 5, &clkParams, NULL);
- // 启动 SYS/BIOS 系统
- BIOS_start();
- return(0);
- }
复制代码
`
1
|
|
|
|