在DSP代码中如何点亮或者熄灭LED2? - AM57x - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3209|回复: 3

[已解决] 在DSP代码中如何点亮或者熄灭LED2?

[复制链接]

13

主题

32

帖子

1129

积分

金牌会员

Rank: 6Rank: 6

积分
1129
发表于 2019-5-28 16:57:15 | 显示全部楼层 |阅读模式
          您好,我目前需要利用TL5708开发平台,需要进行如下工作:
1 在DSP代码里实现进行点亮、熄灭LED2,通过查找可知LED2对应的控制引脚为GPIO5_4,在原理图中对应C14/MCASP1_AXR2/MCASP6_AXR2/UART6_CTSN/GPIO5_4引脚,经过查阅资料可知CTRL_CORE_PAD_MCASP1_AXR2的寄存器地址为:Address Offset
0x0000 16BC,Physical Address 0x4A00 36BC,且寄存器0x对应gpio5_4,因此如何使用该引脚来控制LED2灯的点亮和熄灭?请贴出实现的代码,感谢
2 在DSP程序实现GPMC读数操作,经过查阅资料可知,GPMC CS0基地址为0x00000000,在代码中定义#define  DSP_GPMC_CS0_BASEADDR  0x00000000,然后在任务中实现读功能,代码如下所示,但利用示波器观测CS0和REn均为出现低电平有效信号,请帮忙看一下问题出在哪里谢谢

/*
*  ======== main_Dsp1.c ========
*
*/

/* xdctools header files */
#include <xdc/std.h>
#include <xdc/runtime/Diags.h>
#include <xdc/runtime/Error.h>
#include <xdc/runtime/Log.h>
#include <xdc/runtime/System.h>

/* package header files */
#include <ti/ipc/Ipc.h>
#include <ti/sysbios/BIOS.h>
#include <ti/sysbios/knl/Task.h>

/* local header files */
#include "Server.h"
#include "rsc_table.h"
#define  DSP_GPMC_CS0_BASEADDR  0x00000000

/* private functions */
static Void smain(UArg arg0, UArg arg1);


/*
*  ======== main ========
*/
Int main(Int argc, Char* argv[])
{
    Error_Block     eb;
    Task_Params     taskParams;
    unsigned int    data=0xaaaa;
     unsigned int i=1;

    Log_print0(Diags_ENTRY, "--> main:");
    /* must initialize the error block before using it */
    Error_init(&eb);
   
    /* create main thread (interrupts not enabled in main on BIOS) */
    Task_Params_init(&taskParams);
    taskParams.instance->name = "smain";
    taskParams.arg0 = (UArg)argc;
    taskParams.arg1 = (UArg)argv;
    taskParams.stackSize = 0x1000;
    Task_create(smain, &taskParams, &eb);
    if (Error_check(&eb)) {
        System_abort("main: failed to create application startup thread");
    }
/*   (*(volatile unsigned int *)DSP_GPMC_CS0_BASEADDR) = data;

for(i=1;i<1024*1024*16;i++)
{
  (*(volatile unsigned int *)(DSP_GPMC_CS0_BASEADDR+i)) = i%65536;  
}*/
    /* start scheduler, this never returns */
    BIOS_start();
    /* should never get here */
    Log_print0(Diags_EXIT, "<-- main:");
    return (0);
}

/*
*  ======== smain ========
*/
Void smain(UArg arg0, UArg arg1)
{
    Int                 status = 0;
    Error_Block         eb;
    Bool                running = TRUE;
    static unsigned int        i = 0;
    static unsigned short int  data = 0;
    Log_print0(Diags_ENTRY | Diags_INFO, "--> smain:");
    Error_init(&eb);
    /* initialize modules */
    Server_init();
    /* turn on Diags_INFO trace */
    Diags_setMask("Server+F");
    /* loop forever */
    while (running) {
        /* BEGIN server phase */
        /* server setup phase */
        status = Server_create();
if(i<65536)
{
  data = (*(volatile unsigned int *)(DSP_GPMC_CS0_BASEADDR+i)) ;
                i++;
}
        else
{
                i = 0;
}

        if (status < 0) {
            goto leave;
        }
        /* server execute phase */
        status = Server_exec();
        if (status < 0) {
            goto leave;
        }
        /* server shutdown phase */
        status = Server_delete();
        //(*(volatile unsigned int *)DSP_GPMC_CS0_BASEADDR) = data;

        if (status < 0) {
            goto leave;
        }
        /* END server phase */
    } /* while (running) */
    /* finalize modules */
    Server_exit();
leave:
    Log_print1(Diags_EXIT, "<-- smain: %d", (IArg)status);
    return;
}

回复

使用道具 举报

0

主题

17

帖子

1290

积分

金牌会员

Rank: 6Rank: 6

积分
1290
发表于 2019-5-28 17:45:48 | 显示全部楼层
你好,
1、关于DSP中操作GPIO的方式,主要为配置引脚pinmux,配置引脚为输出模式,配置引脚输出电平。可参考我们的uboot源码中的操作流程


2、gpmc的基地址,默认内核源码中配置为0x01000000为gpmc cs0的基地址,具体可查看arch/arm/boot/dts/tl570x-evm-gpmc.dts。ipc例程中,dsp将0x01000000再次映射到DSP空间的0x12000000中。所以实际你在dsp中访问gpmc cs0地址应是访问0x12000000地址。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

13

主题

32

帖子

1129

积分

金牌会员

Rank: 6Rank: 6

积分
1129
 楼主| 发表于 2019-5-29 09:51:31 | 显示全部楼层
本帖最后由 hailang 于 2019-5-29 09:53 编辑

我这里没有arch/arm/boot/dts/tl570x-evm-gpmc.dts这个文件,为啥gpmc的的 基地址0x01000000为gpmc cs0的基地址,而技术手册上说的

0x00000000~0x1FFFFFFF,能解释一下么?



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

44

主题

368

帖子

2894

积分

创龙

Rank: 8Rank: 8

积分
2894
发表于 2019-5-29 22:35:13 | 显示全部楼层
gpmc的基地址可以设置为0x00000000~0x1FFFFFFF之间,由于最多16为数据线,因此最大支持64K的寻址空间
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-3-29 04:03 , Processed in 0.039591 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表