• DSP 开发例程: led_flash


    DSP 开发例程(1): led_flash

    此例程实现在 EVM6678L 开发板控制 LED 闪烁. 使用了 SYS/BIOSMCSDK PDK TMS320CC6678 两个组件. 例程源码可从我的 gitee.com 仓库上克隆或下载. 点击 DSP 开发教程(0): 汇总查看其他例程说明.

    创建工程

    • 点击菜单: File | New | CCS Project, 打开 New CCS Project 向导.

    • 输入工程名, 选择器件型号为: TMS320C6678, 模板选择: SYS/BIOS | Typical, 点击 Next.
      在这里插入图片描述

    • RTSC 配置设置 页, 勾选 MCSDK PDK TMS320C6678SYS/BIOS(默认已勾选), 点击 Finish.
      在这里插入图片描述

    源码编辑

    main.c

    修改 main.c, 在其中加入函数 EVM_init() 用于平台初始化.

    void EVM_init()
    {
    	platform_init_flags init_flags;
    	platform_init_config init_config;
    
    	// plaform initialize
    	memset(&init_flags, 1, sizeof(platform_init_flags));
    	init_flags.phy = 0;
    	memset(&init_config, 0, sizeof(platform_init_config));
    	if (platform_init(&init_flags, &init_config) != Platform_EOK)
    	{
    		printf("Platform failed to initialize, errno = 0x%x \n", platform_errno);
    		while(1);
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 添加函数 task_ledFlash(), 实现 LED0 的闪烁.
    Void task_ledFlash(UArg a0, UArg a1)
    {
        System_printf("enter task_ledFlash()\n");
    
        while(1)
        {
        	platform_led(0, PLATFORM_LED_ON, PLATFORM_USER_LED_CLASS);
        	Task_sleep(500);
        	platform_led(0, PLATFORM_LED_OFF, PLATFORM_USER_LED_CLASS);
        	Task_sleep(500);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    修改后的 main.c 内容如下:

    /*
     *  ======== main.c ========
     */
    #include 
    #include 
    
    #include 
    
    #include 
    #include 
    
    #include 
    
    #include 
    
    #include 
    
    /*
     *  ======== task_ledFlash ========
     */
    Void task_ledFlash(UArg a0, UArg a1)
    {
        System_printf("enter task_ledFlash()\n");
    
        while(1)
        {
        	platform_led(0, PLATFORM_LED_ON, PLATFORM_USER_LED_CLASS);
        	Task_sleep(500);
        	platform_led(0, PLATFORM_LED_OFF, PLATFORM_USER_LED_CLASS);
        	Task_sleep(500);
        }
    }
    
    /**
     * 平台初始化
     */
    void EVM_init()
    {
    	platform_init_flags init_flags;
    	platform_init_config init_config;
    
    	// plaform initialize
    	memset(&init_flags, 1, sizeof(platform_init_flags));
    	init_flags.phy = 0;
    	memset(&init_config, 0, sizeof(platform_init_config));
    	if (platform_init(&init_flags, &init_config) != Platform_EOK)
    	{
    		printf("Platform failed to initialize, errno = 0x%x \n", platform_errno);
    		while(1);
    	}
    }
    
    /*
     *  ======== main ========
     */
    Int main()
    { 
        Task_Handle task;
        Error_Block eb;
    
        System_printf("enter main()\n");
    
        Error_init(&eb);
        task = Task_create(task_ledFlash, NULL, &eb);
        if (task == NULL) {
            System_printf("Task_create() failed!\n");
            BIOS_exit(0);
        }
    
        BIOS_start();    /* does not return */
        return(0);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73

    platform_osal.c

    新建 platform_osal.c, 在此文件中实现 Osal_platformMalloc(), Osal_platformFree(), Osal_platformSpiCsEnter()Osal_platformSpiCsExit() 这几个系统抽象层函数.

    /*
     * platform_osal.c
     */
    
    /* Platform utilities include */
    #include "ti/platform/platform.h"
    
    /* Resource manager for QMSS, PA, CPPI */
    #include "ti/platform/resource_mgr.h"
    
    /* OSAL functions for Platform Library */
    uint8_t *Osal_platformMalloc (uint32_t num_bytes, uint32_t alignment)
    {
    	return (uint8_t *)malloc(num_bytes);
    }
    
    void Osal_platformFree (uint8_t *dataPtr, uint32_t num_bytes)
    {
        /* Free up the memory */
        if (dataPtr)
        {
            free(dataPtr);
        }
    }
    
    void Osal_platformSpiCsEnter(void)
    {
        /* Get the hardware semaphore.
         *
         * Acquire Multi core CPPI synchronization lock
         */
        while ((CSL_semAcquireDirect (PLATFORM_SPI_HW_SEM)) == 0);
    
        return;
    }
    
    void Osal_platformSpiCsExit (void)
    {
        /* Release the hardware semaphore
         *
         * Release multi-core lock.
         */
        CSL_semReleaseSemaphore (PLATFORM_SPI_HW_SEM);
    
        return;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    app.cfg

    • ti.platform.evmc6678l 添加到配置中.
      在这里插入图片描述
      或者直接在用 XDCscript Editor 打开 app.cfg 添加:
    var Settings = xdc.useModule('ti.platform.evmc6678l.Settings');
    
    • 1

    在这里插入图片描述

    • 添加platform_lib

    在这里插入图片描述
    或者直接在用 XDCscript Editor 打开 app.cfg 添加:

    Program.sectMap["platform_lib"] = new Program.SectionSpec();
    Program.sectMap["platform_lib"].loadSegment = "L2SRAM";
    
    • 1
    • 2
    • 启用 Startup 模块, 将 EVM_init() 函数添加到 Startup.lastFxns 中.
    var Startup = xdc.useModule('xdc.runtime.Startup');
    
    Startup.lastFxns.$add('&EVM_init');
    
    • 1
    • 2
    • 3

    也可直接在 main() 函数中 调用 EVM_init(), 实现平台初始化.

    编译

    选中工程, 右键选择 Build Project, 等待编译完成.

    在这里插入图片描述

    调试

    使用 板载仿真器

    在工程上右键选择 Properties.

    • 选择 General 页, 连接 选择 XDS100v1 USB Emulator. 点击 OK.

    在这里插入图片描述

    • 选中 工程, 右键选择 Debug As | Code Composer Debug Session.

    在这里插入图片描述

    • 只勾选 C66xx_0, 点击 OK.
      在这里插入图片描述
    • 点击 resume 按钮, 运行程序. 此时应该能看到 板卡上的 LED(D0) 开始闪烁.

    在这里插入图片描述

    使用 外部仿真器

    使用外部仿真器同使用板载仿真器的操作流程类似, 这里不再赘述.

  • 相关阅读:
    在线密码破解medusa
    在visual studio里安装Python并创建python工程
    信号的机制——信号处理函数的注册
    串口通信(11)-CRC校验介绍&算法
    电脑重装系统后如何把网站设为首页
    算法宝典——Java版本(持续更新)
    2024届 C++ 刷题 笔试强训 Day 02
    详细介绍windows自带Hyper-V安装虚拟机(windows11 / ubuntu22 / macos12)
    【Java开发】实用小技巧
    qt treeview 删除节点
  • 原文地址:https://blog.csdn.net/falwat/article/details/134036154