使用StarterWare软件包创建多个串口收发工程,Uart1、Uart2、Ua... - AM437x - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8920|回复: 16
打印 上一主题 下一主题

使用StarterWare软件包创建多个串口收发工程,Uart1、Uart2、Ua...

[复制链接]

7

主题

40

帖子

1133

积分

金牌会员

Rank: 6Rank: 6

积分
1133
跳转到指定楼层
楼主
发表于 2017-1-19 22:28:59 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 wujianzhang 于 2017-1-20 09:23 编辑

最近使用AM4379进行项目开发,基于StarterWare软件包进行裸机开发,参考了StarterWare中examples中的uart_echo实例,按照其中Uart0的相关配置,自己添加了Uart1、Uart2、Uart3,结果除了默认的UART0串口能够发送数据,也能够响应接收数据中断外,其余串口都不能向外发送数据,也无法响应数据接收中断。

对其余串口的配置方法都按照默认Uart0的配置方法,但就是不行。

请问哪位有关于StarterWare多串口的实例程序?如果有的话能否发给我一份?小弟不胜感激,在此谢过了!

我的邮箱:249065964@qq.com

另外,网上关于StarterWare的使用教程和资料真少啊!!!!!除了看StarterWare软件包中的源代码,真没有什么资料了。关于StarterWare如何使用,如何新建配置工程、如何生成BIN文件都没有相关资料。

本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

7

主题

40

帖子

1133

积分

金牌会员

Rank: 6Rank: 6

积分
1133
17#
 楼主| 发表于 2017-1-24 00:24:25 | 只看该作者
问题已经搞定……
回复 支持 反对

使用道具 举报

7

主题

40

帖子

1133

积分

金牌会员

Rank: 6Rank: 6

积分
1133
16#
 楼主| 发表于 2017-1-23 10:37:07 | 只看该作者
所以,现在嫌疑最大的,有可能是关于UART1、UART2的pinmux配置不对



又不知道如何下手

麻烦您了,谢谢!!!!
回复 支持 反对

使用道具 举报

7

主题

40

帖子

1133

积分

金牌会员

Rank: 6Rank: 6

积分
1133
15#
 楼主| 发表于 2017-1-23 10:34:07 | 只看该作者
我查看了starterware中的pinmux生成的.h配置文件
发现只有关于uart0的pinmux配置

但是

没有拿到TI starterware默认的*.pinmux工程文件

我实在不知道如何进行UART1、UART2的管脚复用配置

使用自己创建的pinmux工程生成的.h配置文件,添加到Starterware中是编译不过去的
回复 支持 反对

使用道具 举报

7

主题

40

帖子

1133

积分

金牌会员

Rank: 6Rank: 6

积分
1133
14#
 楼主| 发表于 2017-1-23 10:31:01 | 只看该作者
关于您回复的第一个图中的设置项目

/* Initialize the Board */
status = BOARDInit(NULL);

/* Get board info */
status = UartAppBoardInfoGet(&g_ObjUart0);
if (S_PASS == status)
{
            /* Config Uart*/
            status=InitUartObject(&g_ObjUart0);
}

我也根据uart_echo中已经可以使用的uart0进行了相应的配置

如下所示:

/* Initialize the Board */
status = BOARDInit(NULL);

/* Initialize the UART console */
CONSOLEUtilsInit();

/* Select the console type based on compile time check */
CONSOLEUtilsSetType(CONSOLE_UTILS_TYPE_UART);

/* Get board info */
status = UartAppBoardInfoGet(&g_ObjUart0);
if (S_PASS == status)
{
            /* Config Uart*/
            status=InitUartObject(&g_ObjUart0);
}

status=InitUartObject(&g_ObjUart1);
status=InitUartObject(&g_ObjUart2);
status=InitUartObject(&g_ObjUart3);

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

7

主题

40

帖子

1133

积分

金牌会员

Rank: 6Rank: 6

积分
1133
13#
 楼主| 发表于 2017-1-23 10:22:11 | 只看该作者
UartAppSocInfoGet()函数中的各个串口所对应的中断号,已经使用switch()语句进行了相应的设置了

switch(pObj->instNum)
                {
                case 0:
                        pObj->uartAppCfg.uartAppIntrCfg.intrLine = 104U;
                        break;
                case 1:
                        pObj->uartAppCfg.uartAppIntrCfg.intrLine = 105U;
                        break;
                case 2:
                        pObj->uartAppCfg.uartAppIntrCfg.intrLine = 106U;
                        break;
                case 3:
                        pObj->uartAppCfg.uartAppIntrCfg.intrLine = 76U;
                        break;
                default:
                        break;
                }
回复 支持 反对

使用道具 举报

7

主题

40

帖子

1133

积分

金牌会员

Rank: 6Rank: 6

积分
1133
12#
 楼主| 发表于 2017-1-23 10:20:55 | 只看该作者
static int32_t UartAppSocInfoGet(uartAppObj_t *pObj)
{
    uint32_t status = S_PASS;

    /*Is the given resource present?*/
    if(TRUE == CHIPDBIsResourcePresent(CHIPDB_MOD_ID_UART, pObj->instNum))
    {
            /* Get the base address of the Module */
        pObj->instAddr = CHIPDBBaseAddress(CHIPDB_MOD_ID_UART, pObj->instNum);

        /* Update the Interrupt Line number */
        if(SOC_FAMILY_ID_AM43XX == SOCGetSocFamilyId())
        {
                switch(pObj->instNum)
                {
                case 0:
                        pObj->uartAppCfg.uartAppIntrCfg.intrLine = 104U;
                        break;
                case 1:
                        pObj->uartAppCfg.uartAppIntrCfg.intrLine = 105U;
                        break;
                case 2:
                        pObj->uartAppCfg.uartAppIntrCfg.intrLine = 106U;
                        break;
                case 3:
                        pObj->uartAppCfg.uartAppIntrCfg.intrLine = 76U;
                        break;
                default:
                        break;
                }

            pObj->uartAppCfg.dmaCfg.dmaType                                =        DMA_TYPE_ENHACED;
            pObj->uartAppCfg.dmaCfg.rxEvtInfo.dmaType         =         DMA_TYPE_ENHACED;
            pObj->uartAppCfg.dmaCfg.rxEvtInfo.instNum         =         0U;
            pObj->uartAppCfg.dmaCfg.rxEvtInfo.evtToChMapType = DMA_UTILS_EVENT_MAP_TYPE_DIRECT;
            pObj->uartAppCfg.dmaCfg.rxEvtInfo.evtNum         =         26U;
            pObj->uartAppCfg.dmaCfg.rxEvtInfo.chNum         =         26U;
            pObj->uartAppCfg.dmaCfg.rxEvtInfo.xferIdx         =         26U;
            pObj->uartAppCfg.dmaCfg.txEvtInfo.instNum         =         0U;
            pObj->uartAppCfg.dmaCfg.txEvtInfo.evtToChMapType = DMA_UTILS_EVENT_MAP_TYPE_DIRECT;
            pObj->uartAppCfg.dmaCfg.txEvtInfo.evtNum         =         26U;
            pObj->uartAppCfg.dmaCfg.txEvtInfo.chNum         =         26U;
            pObj->uartAppCfg.dmaCfg.txEvtInfo.xferIdx         =         26U;
        }
        else
        {
            if (pObj->instNum == 0)
            {
                pObj->uartAppCfg.uartAppIntrCfg.intrLine        =         72U;

                pObj->uartAppCfg.dmaCfg.dmaType                         =         DMA_TYPE_ENHACED;
                pObj->uartAppCfg.dmaCfg.rxEvtInfo.dmaType         =         DMA_TYPE_ENHACED;
                pObj->uartAppCfg.dmaCfg.rxEvtInfo.instNum         =         0U;
                pObj->uartAppCfg.dmaCfg.rxEvtInfo.evtToChMapType = DMA_UTILS_EVENT_MAP_TYPE_DIRECT;
                pObj->uartAppCfg.dmaCfg.rxEvtInfo.evtNum         =         27U;
                pObj->uartAppCfg.dmaCfg.rxEvtInfo.chNum         =         27U;
                pObj->uartAppCfg.dmaCfg.rxEvtInfo.xferIdx         =         27U;
                pObj->uartAppCfg.dmaCfg.txEvtInfo.instNum         =         0U;
                pObj->uartAppCfg.dmaCfg.txEvtInfo.evtToChMapType = DMA_UTILS_EVENT_MAP_TYPE_DIRECT;
                pObj->uartAppCfg.dmaCfg.txEvtInfo.evtNum         =         26U;
                pObj->uartAppCfg.dmaCfg.txEvtInfo.chNum         =         26U;
                pObj->uartAppCfg.dmaCfg.txEvtInfo.xferIdx         =        26U;
            }
            else if (pObj->instNum == 5) /* ICE v1 */
            {
                pObj->uartAppCfg.uartAppIntrCfg.intrLine = 46U;
                /* TBD: DMA Channels to be configured through cross bar */
            }
            else if (pObj->instNum == 3) /* ICE v2 */
            {
                pObj->uartAppCfg.uartAppIntrCfg.intrLine = 44U;
                /* TBD MA Channels to be configured through cross bar */
            }
        }
    }
    else
    {
        status = E_FAIL;
    }

    return status;
}
回复 支持 反对

使用道具 举报

7

主题

40

帖子

1133

积分

金牌会员

Rank: 6Rank: 6

积分
1133
11#
 楼主| 发表于 2017-1-23 10:15:59 | 只看该作者
另外,关于DMA,uart_echo中的DMA是关闭的,与DMA应该是没有关系的
回复 支持 反对

使用道具 举报

7

主题

40

帖子

1133

积分

金牌会员

Rank: 6Rank: 6

积分
1133
10#
 楼主| 发表于 2017-1-23 10:12:22 | 只看该作者
vefone 发表于 2017-1-23 09:41
这部分设计的东西比较多,建议您这边把uart0涉及的每个结构体理解清楚。
主要涉及到的是pinmux,中断,dm ...

中断号配置肯定是正确的
这个我已经根据DataSheet重的Interrupt章节确认过了

先不说串口接收中断的问题
使用串口向外发送数据肯定不涉及中断吧?

问题是,现在使用串口向外发送数据都是失败的

关于pinmux我已经跟技术支持说过了
贵公司提供的配套光盘中是没有StarterWare默认的*.pinmux工程的
而StarterWare中的各个工程都是根据那个默认*.pinmux工程生成的.h文件进行配置的
我如果使用配套光盘中提供的pinmux软件进行配置,生成的.h配置文件与starterware中的配置不一致,将会导致工程编译出错
我所能想到的,就是拿到TI默认的那个*.pinmux工程,然后在它基础上添加UART1、UART2等串口,其他管脚复用保持原来的,以便保证工程能够编译通过
但是在网上又找不到TI官方默认的*.pinmux工程文件
回复 支持 反对

使用道具 举报

0

主题

83

帖子

426

积分

创龙

Rank: 8Rank: 8

积分
426
9#
发表于 2017-1-23 09:41:38 | 只看该作者
wujianzhang 发表于 2017-1-20 10:10
串口收发管脚的交叉、直连都试过了,还是不行

这部分设计的东西比较多,建议您这边把uart0涉及的每个结构体理解清楚。
主要涉及到的是pinmux,中断,dma。很有可能是某部分没有设置对,先一个个确认。


本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 02:02 , Processed in 0.042771 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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