C6678开发概述

  • 参考
  • 开发环境
  • 标记及术语
  • 创建sys/bios自定义平台
  • 运行第一个sys/bios程序
  • Clock模块使用Demo


参考

TMS320C6678 Multicore Fixed and Floating-Point Digital Signal Processor Datasheet
TMS320C66x DSP CorePac User Guide 官方手册
创龙6678开发教程

开发环境

CCS5.5

标记及术语

☆ - 表示推荐操作
单镜像 - 每个核心运行相同的应用程序
多镜像 - 每个核心运行不同的应用程序

创建sys/bios自定义平台

Sys/bios使用时首先需要创建平台,然后基于平台创建软件工程。

a) File->New->Project…->RTSC:New RTST Platform

b) 配置平台名、路径、芯片

bios开发软件 bios开发需要什么_TMS320C6678

c) 配置存储器

bios开发软件 bios开发需要什么_ccs5.5_02

运行第一个sys/bios程序

a) View->TI Resource Explorer

b) 选择Typical,并导入工程“Import the example project into CCS”

bios开发软件 bios开发需要什么_TMS320C6678_03


c) 配置工程,选择自定义的平台路径

bios开发软件 bios开发需要什么_TMS320C6678_04


d) 工程生成后可在以下位置修改工程配置

bios开发软件 bios开发需要什么_bios开发软件_05


e) 用XGCONF 打开*.cfg工程配置文件(Open with > XGCONF)进行BIOS配置

f) 编译工程,首次编译报错:

>> Compilation failure
   memory range L1DSRAM
"./configPkg/linker.cmd", line 28: error #10080-D: length not specified for
   memory range L1PSRAM
error #10010: errors encountered during linking; "typical_TMS320C6678.out" not built
gmake: *** [typical_TMS320C6678.out] Error 1
gmake: Target `all' not remade because of errors.

解决方法,打开Debug/configPkg/linker.cmd文件,注释掉:L1DSRAM和L1PSRAM,如下:

bios开发软件 bios开发需要什么_ccs5.5_06


g) 运行程序,结果如下,表明多任务成功运行

bios开发软件 bios开发需要什么_ccs5.5_07

Clock模块使用Demo

来源:
View->TI Resource Explorer-> Clock Example
功能:
该模块用于定时启动某个任务/周期执行某个任务

//头文件:
include <ti/sysbios/knl/Clock.h>
//主要函数功能:
clkParams.period = 10;  //设置循环执行周期,单次执行设置为:0
clkParams.startFlag = TRUE;//设置循环执行为:TRUE/单次执行为:FALSE
clk2 = Clock_create(clk1Fxn, 1000, &clkParams, NULL);
//关键参数(定时启动的函数名称,任务启动起始时刻应>0,配置参数)
Clock_start(clk2);//启动时钟2
time = Clock_getTicks();//获取当前时刻值

官方Demo展示了2个任务:

a) clk0Fxn循环执行周期为5,启动时刻为5;

b) clk1Fxn单次执行,启动时刻为11,该任务调用BIOS_exit(0)结束sys/bios。

注意:

a) 经测试发现System_printf函数无法实时输出结果到环境,打印到下图位置,在sys/bios结束后才会将部分最近缓存打印出来,因此调试后续仍要用串口打印。

bios开发软件 bios开发需要什么_ios_08


b) Clock_create函数中的任务启动起始时刻应>0,否则该任务无法运行

c) 创建多个任务时,需要把单次执行的任务放在最后,且写法如下,只将最后一个Clock_create返回值进行赋值

Clock_create(clk0Fxn, 5, &clkParams, NULL);
Clk2 = Clock_create(clk0Fxn1, 100, &clkParams, NULL);
Clock_start(clk2);

完成程序:

/*
 *  ======== main.c ========
 */

#include <xdc/std.h>

#include <xdc/runtime/Error.h>
#include <xdc/runtime/System.h>

#include <ti/sysbios/BIOS.h>

#include <ti/sysbios/knl/Task.h>

#include <ti/sysbios/knl/Clock.h>

unsigned int task_run_counnect = 0;

/*
 *  ======== taskFxn ========
 */
Void taskFxn(UArg arg0)
{
    System_printf("enter taskFxn()\n");

    //Task_sleep(10);

	System_printf("exit taskFxn()\n");
    BIOS_exit(0);
}


Void taskFxn1(UArg arg0)
{
    task_run_counnect++;
    //Task_sleep(10);
    System_printf("task taskFxn1 run counnect is %d\n",task_run_counnect);

}

Void taskFxn2(UArg arg0)
{
    task_run_counnect++;
    //Task_sleep(10);
    System_printf("task taskFxn2 run counnect is %d\n",task_run_counnect);

}

Void taskFxn3(UArg arg0)
{
    task_run_counnect++;
    //Task_sleep(10);
    System_printf("task taskFxn3 run counnect is %d\n",task_run_counnect);

}

/*
 *  ======== main ========
 */
Int main()
{ 
    Task_Handle task;
    Error_Block eb;

    System_printf("enter main()\n");
/*
    Error_init(&eb);
    task = Task_create(taskFxn, NULL, &eb);
    if (task == NULL) {
        System_printf("Task_create() failed!\n");
        BIOS_exit(0);
    }
*/
     Clock_Handle clk2;
     Clock_Params clkParams;

     /* Create a periodic Clock Instance with period = 5 system time units */
     Clock_Params_init(&clkParams);


     clkParams.period = 30;
     clkParams.startFlag = TRUE;
     Clock_create(taskFxn1, 1, &clkParams, NULL);

     clkParams.period = 30;
     clkParams.startFlag = TRUE;
     Clock_create(taskFxn2, 10, &clkParams, NULL);

     clkParams.period = 30;
     clkParams.startFlag = TRUE;
     Clock_create(taskFxn3, 20, &clkParams, NULL);

     clkParams.period = 0;
     clkParams.startFlag = FALSE;
     clk2 = Clock_create(taskFxn, 100, &clkParams, NULL);

     Clock_start(clk2);


    BIOS_start();    /* does not return */
    return(0);
}