qn1544001262

qn1544001262

0个粉丝

2

问答

0

专栏

0

资料

qn1544001262  发布于  2019-03-14 15:18:29
采纳率 0%
2个问答
2171

海思的MPP加载后DMAC寄存器就配置不了

 
本帖最后由 qn1544001262 于 2019-3-14 15:25 编辑

在hi3519v101上想使用DMA模式下的SSP对外传输数据,但很搞的是只要加载了MPP平台驱动,无论是利用海思提供的DMA内核层函数,还是自写的内核模块,以及himm命令DMAC寄存器都不能读写了,写不进去配置字,读出来也全是0

如果不加载MPP,DMAC的寄存器,用以上三种方法都是能读能写的

有没大佬知道怎么解决这种冲突啊?
我来回答
回答8个
时间排序
认可量排序

Cyan

0个粉丝

12

问答

0

专栏

0

资料

Cyan 2019-03-14 20:46:41
认可0
检查下MPP脚本有没有搞事

qn1544001262

0个粉丝

2

问答

0

专栏

0

资料

qn1544001262 2019-03-15 10:05:52
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=140552&ptid=73556]Cyan 发表于 2019-3-14 20:46[/url]
检查下MPP脚本有没有搞事[/quote]

嗯嗯,谢谢回复,我去排查下

qn1544001262

0个粉丝

2

问答

0

专栏

0

资料

qn1544001262 2019-03-15 16:48:04
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=140552&ptid=73556]Cyan 发表于 2019-3-14 20:46[/url]
检查下MPP脚本有没有搞事[/quote]

还真是脚本搞事啊,时钟配置那个脚本把DMA时钟给关了。
系统启动初始化时开了的,但加载脚本又给关了

天最

1个粉丝

52

问答

0

专栏

2

资料

天最 2020-04-15 18:20:55
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=140587&ptid=73556]qn1544001262 发表于 2019-3-15 16:48[/url]
还真是脚本搞事啊,时钟配置那个脚本把DMA时钟给关了。
系统启动初始化时开了的,但加载脚本又给关了[/quote]

楼主,用dma需要修改内核驱动不??看spidev.c没有dma相关的东西啊,还有dma的应用程序咋写:'(

qn1544001262

0个粉丝

2

问答

0

专栏

0

资料

qn1544001262 2020-04-16 10:04:45
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=156814&ptid=73556]天最 发表于 2020-4-15 18:20[/url]
楼主,用dma需要修改内核驱动不??看spidev.c没有dma相关的东西啊,还有dma的应用程序咋写[/quote]

内核文件夹下搜hidmac

天最

1个粉丝

52

问答

0

专栏

2

资料

天最 2020-04-16 21:21:20
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=156832&ptid=73556]qn1544001262 发表于 2020-4-16 10:04[/url]
内核文件夹下搜hidmac[/quote]

那个spi应用程序怎么用dma方式得到数据呢????和中断/轮询的代码一样么??
spifd = open(file_name, O_RDWR);//打开spi2设备
        if (spifd < 0)
        {
                return -1;
        }
       
        memset(rx_buf, 0, sizeof(rx_buf));
        memset(mesg, 0, sizeof(mesg));
        mesg[0].tx_buf = (__u32)NULL;
        mesg[0].rx_buf = (__u32)rx_buf;
        mesg[0].len = LineBytes;
        mesg[0].speed_hz = 16000000;//不能超过下面的20000000
        mesg[0].bits_per_word = 8;
        mesg[0].cs_change = 1;
       
        HI_U32 mode = SPI_MODE_1 | SPI_CS_HIGH;
        HI_U32 bits = 8;
        HI_U64 u64speed = 20000000;
       
        ret = ioctl(spifd, SPI_IOC_WR_MODE, &mode);//设置spi模式,一共4种模式
        if (ret == -1)
    {
        close(spifd);
        return -1;
    }
       
        ret = ioctl(spifd, SPI_IOC_WR_BITS_PER_WORD, &bits);//设置bits数
        if (ret == -1)
    {
        close(spifd);
        return -1;
    }
        ret = ioctl(spifd, SPI_IOC_WR_MAX_SPEED_HZ, &u64speed);//设置时钟速率

    if (ret == -1)
    {
        close(spifd);
        return -1;
    }

       ret = ioctl(spifd, SPI_IOC_MESSAGE(1), mesg);
                        if (ret != mesg[0].len) {
                                close(spifd);
                                return -1;
                        }

qn1544001262

0个粉丝

2

问答

0

专栏

0

资料

qn1544001262 2020-04-17 11:16:16
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=156857&ptid=73556]天最 发表于 2020-4-16 21:21[/url]
那个spi应用程序怎么用dma方式得到数据呢????和中断/轮询的代码一样么??
spifd = open(file_name, ...[/quote]

我用的是ssp-sony那个驱动,里面配的是海思soc用户指南里的那个spi的寄存器,文档里有说轮询中断DMA三种模式咋用,配合hidmac里写好的函数接口(基本都EXPORT_SYMBOL了),就能用

减脂的瘦子

0个粉丝

1

问答

0

专栏

0

资料

减脂的瘦子 2020-10-14 15:30:08
认可0

楼主,请问怎么用啊,我用SPI能发送,但是怎么用DMA发送呀。谢谢

或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区