查看: 4375|回复: 8

[已解决] DMA 使用"Always on "source在PIT模式下(已解决)

[复制链接]

该用户从未签到

25

主题

104

帖子

0

中级会员

Rank: 3Rank: 3

积分
302
最后登录
1970-1-1
发表于 2013-5-14 09:32:28 | 显示全部楼层 |阅读模式
 如题,总之,经过了好多努力,发现是芯片本身设计有这么个缺陷,找到了errta:e4588: DMAMUX: When using PIT with "always enabled" request, DMA request does
not deassert correctly.
按照它给的推荐顺序(附后)
编程之后,貌似PIT能够工作了,能够发现周期更改周期中断时间是有效果的。但是按照我的理想顺序应该是我一次DMA的majorlop传一个数据,然后在DMA中断里关断“always on"需求,开启PIT request,则下一次进入中断必然是等到PIT时间到后触发DMA传输结束才会进入中断。但是现在发现前三次中断有问题,前三次都进入中断了,但是通过观察寄存器发现数据没有传过去,但是却按照我的设置:源地址每次都偏移了一个数据的地址单位,之后就都正常了,但是不是我的数据就漏了前三个么?而且还不确定是不是任意PIT间隔都是前三个不准确啊,能请大牛帮忙么?弄了都一个星期多啦。。
 
 (在线等答案,急啊。。。)
 
附:errta给的推荐DMA中断服务例程编程顺序::If using the PIT to trigger a DMA channel where the major loop count is set to one, then in
order to get the desired periodic triggering, the DMA must do the following in the interrupt
service routine for the DMA_DONE interrupt:
1. Set the DMA_TCDn_CSR[DREQ] bit and configure DMAMUX_CHCFGn[ENBL] = 0
Mask Set Errata for Mask 1N86B, Rev. 10 MAY 2012
2 Preliminary Freescale Semiconductor, Inc.2. Then again DMAMUX_CHCFGn[ENBL] = 1, DMASREQ=channel in your DMA DONE
interrupt service routine so that "always enabled" source could negate its request then DMA
request could be negated.
This will allow the desired periodic triggering to function as expected.
我知道答案 目前已有8人回答
回复

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2013-5-14 11:23:09 | 显示全部楼层

    RE:DMA 使用"Always on "source在PIT模式下

    DMA里面的数据是否是正确的。按照他的步骤,应该是先产生PIT,完成以后再触发DMA中断。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    25

    主题

    104

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    302
    最后登录
    1970-1-1
     楼主| 发表于 2013-5-14 18:57:24 | 显示全部楼层

    回复:DMA 使用"Always on "source在PIT模式下

    是正确的,但是用的always on source,所以与PIT触发有矛盾,官方才有这个errata,但是我试过以后还是有帖子中的小问题。
    回复第 2 楼 于2013-05-14 19:23:09发表:
    DMA里面的数据是否是正确的。按照他的步骤,应该是先产生PIT,完成以后再触发DMA中断。
     
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    25

    主题

    104

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    302
    最后登录
    1970-1-1
     楼主| 发表于 2013-5-16 10:26:26 | 显示全部楼层

    RE:DMA 使用"Always on "source在PIT模式下

    顶,继续求助,附代码:
    void DMAinit(int chno,int sourceno)//,int irqno
    {
                SIM_SCGC6 |= SIM_SCGC6_DMAMUX_MASK; //开通DMAMUX   
                //DMA_SERQ|=DMA_SERQ_SERQ(chno) ;//使能DMA硬件请求源        chno
                DMAMUX_CHCFG(chno)=(DMAMUX_CHCFG_ENBL_MASK | DMAMUX_CHCFG_SOURCE(sourceno));//使能DMA通道chno,并与触发源sourceno联系
                DMAMUX_CHCFG(chno)|=DMAMUX_CHCFG_TRIG_MASK;//使能周期中断触发功能
                //enable_irq(irqno);//使能DMA传输结束中断
    }

    void DMAset(uint32 *source_addr,uint32 *destiny_address,char sbits,char dbits,char nbytes,char chno,uint16 majorinter )
    {
            uint8 i;
            i =chno ;//DMA通道号
            SIM_SCGC7 |= SIM_SCGC7_DMA_MASK; //开通DMA
            DMA_SADDR(i) = (uint32)source_addr;//DMA源地址  
            DMA_DADDR(i) = (uint32)destiny_address;//DMA目的地址   
            DMA_NBYTES_MLNO(i)  =2;//通道每传一次的数据长度 (内循环) nbytes
            DMA_ATTR(i)= (DMA_ATTR_SSIZE(sbits)|DMA_ATTR_DSIZE(dbits)) ;//源、目数据大小、模式   
            DMA_SOFF(i) =0x2; //源传输完后下一次传输的地址偏移量:这里默认设置为2
            DMA_DOFF(i)=0x0;//目标地址传完一次偏移量 :这里默认设置为0
            DMA_SLAST(i) = 0;   //通道结束传输后调整源地址到初始地址;
            DMA_DLAST_SGA(i) = 0;    //目标地址传输结束后地址调整到初始地址
            DMA_CITER_ELINKNO(i) =DMA_CITER_ELINKNO_CITER( majorinter);//设置当前外循环次数               
            DMA_BITER_ELINKNO(i) = DMA_BITER_ELINKNO_BITER(majorinter);//设置开始外循环次数
            DMA_CSR(i)|=DMA_CSR_BWC(3);//这里默认配置源传输每个数据间间隔8个周期(源地址与目的地址大小不一样时有用)
            DMA_CSR(i)|=DMA_CSR_INTMAJOR_MASK;//开启传输结束中断(外循环结束)       
            //DMA_CSR(i)|=DMA_CSR_START_MASK;软件start位
            DMA_SERQ|=DMA_SERQ_SERQ(chno) ;//使能DMA硬件请求源        chno
    }

    void pwmdmaset()
    {
               DMAinit(1,ftm0ch0_dmasc);//,DMA1intno
               DMAset(pwmdata,(uint32)&FTM0_C0V,1,1,2,1,1);
    }
    各位帮忙看看DMA的设置有没问题?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    85

    主题

    790

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2279
    最后登录
    1970-1-1
    发表于 2013-5-17 14:21:15 | 显示全部楼层

    RE:DMA 使用"Always on "source在PIT模式下

    我看一下你的代码,帖子不要沉,然后回复你。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    25

    主题

    104

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    302
    最后登录
    1970-1-1
     楼主| 发表于 2013-5-20 10:39:37 | 显示全部楼层

    回复:DMA 使用"Always on "source在PIT模式下

    非常感谢!
    回复第 5 楼 于2013-05-17 22:21:15发表:
    我看一下你的代码,帖子不要沉,然后回复你。
     
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    85

    主题

    790

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2279
    最后登录
    1970-1-1
    发表于 2013-5-20 15:23:09 | 显示全部楼层

    RE:DMA 使用(正解)

    程序没有看出啥问题。设置的流程是对的。你可以参考一下以下链接的文档和例程,再仔细和你的需求对照一下,
    文档:http://cache.freescale.com/files/microcontrollers/doc/app_note/AN4419.pdf?fsrch=1&sr=24
    例程:
    http://cache.freescale.com/files/microcontrollers/doc/app_note/AN4419SW.zip?fsrch=1&sr=24
    希望对你有帮助。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    25

    主题

    104

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    302
    最后登录
    1970-1-1
     楼主| 发表于 2013-5-22 21:33:12 | 显示全部楼层

    回复:DMA 使用"Always on "source在PIT模式下

    好的!谢谢版主!这个问题我也已经搁置一段时间了,不过最近再做一个pWM的小程序发现有可能是对FTM_CnV值的更新点设置的不太好,另外也发现我的PIT很奇怪,不能准确定时,很简单的一个设置啊真是不知道错哪了,还不知道是不是本身哪个设计的问题...
    我自己也再看看,解决了再回帖。
    PS:另外对论坛提个建议,关于帖子的回复好像没有提示消息,我都以为帖子沉了没人回复了,今天才打开我的帖子点进去才看到有回复,没有提示不太方便,建议做一个提示
     
    回复第 7 楼 于2013-05-20 23:23:09发表:
    程序没有看出啥问题。设置的流程是对的。你可以参考一下以下链接的文档和例程,再仔细和你的需求对照一下,
    文档:http://cache.freescale.com/files/microcontrollers/doc/app_note/AN4419.pdf?fsrch=1&sr=24
    例程:
    http://cache.freescale.com/files/microcontrollers/doc/app_note/AN4419SW.zip?fsrch=1&sr=24
    希望对你有帮助。
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-9-7 09:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    24

    主题

    130

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    401
    最后登录
    2020-11-3
    发表于 2017-10-19 13:25:23 | 显示全部楼层
    grace-425826 发表于 2013-5-22 21:33
    好的!谢谢版主!这个问题我也已经搁置一段时间了,不过最近再做一个pWM的小程序发现有可能是对FTM_CnV值的 ...

    您好 这个问题如何解决的呢?请教一下
    哎...今天够累的,签到来了1...
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-20 09:12 , Processed in 0.106882 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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