智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1982|回复: 4
打印 上一主题 下一主题

DMA问题

[复制链接]

13

主题

50

帖子

0

精华

高级会员

Rank: 4

积分
613
威望
319
贡献
164
兑换币
191
注册时间
2014-1-8
在线时间
65 小时
毕业学校
重庆大学
跳转到指定楼层
1#
发表于 2014-2-13 15:44:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    User_Def_DMA_Init.Channelx          =DMA_CH1;               //设置为通道1
    User_Def_DMA_Init.Peri_DmaReq       =PORTC_DMAREQ;          //IO C 产生DMA请求
    User_Def_DMA_Init.Minor_loop_Length =H;                     //主循环次数
    User_Def_DMA_Init.Source_Addr       =(uint32_t)&GPIOD_PDIR; //设置源地址
    User_Def_DMA_Init.Dest_Addr         =(uint32_t)Pix_Data;    //目的地址为Pix_Data的首地址
    User_Def_DMA_Init.Dma_irqc          =1;                     //采集结束触发中断
    User_Def_DMA_Init.isr_func          =dma1_isr;              //自定义通道1中断服务子程序
DMA为什么触发不了中断子程序

回复

使用道具 举报

6

主题

152

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3996
威望
1744
贡献
1104
兑换币
1159
注册时间
2013-10-21
在线时间
574 小时
2#
发表于 2014-2-13 16:20:07 | 只看该作者
本帖最后由 wojiaohaomi 于 2014-2-13 16:29 编辑

这个要设置一下触发void DMA_PORT_Init(PTxn ptxn,DMA_PORT_cfg cfg)                       //DMA端口设置
{

    SIM_SCGC5 |= (SIM_SCGC5_PORTA_MASK << (ptxn>>5));                                                               //开启PORTx端口
    GPIO_PDDR_REG(GPIOx[(ptxn>>5)]) &= ~(1 << (ptxn & 0x1f));                                                       //设置端口方向为输入
    PORT_PCR_REG(PORTX[(ptxn>>5)], (ptxn & 0x1F)) = ( 0
            | PORT_PCR_MUX(1)               // 复用GPIO
            | PORT_PCR_IRQC(cfg & 0x03 )    // 确定触发模式
            | ((cfg & 0xc0 ) >> 6)          // 开启上拉或下拉电阻,或者没有
                                                    );
    GPIO_PDDR_REG(GPIOx[(ptxn>>5)]) &= ~(1 << (ptxn && 0x1F));                                                      //输入模式
}


typedef enum DMA_PORT_cfg
{
    DMA_rising          = 0x01u,            //上升沿触发
    DMA_falling         = 0x02u,            //下降沿触发
    DMA_either          = 0x03u,            //跳变沿触发

    //用最高两位标志上拉和下拉
    DMA_rising_down     = 0x81u,            //上升沿触发,源地址IO端口内部下拉
    DMA_falling_down    = 0x82u,            //下降沿触发,源地址IO端口内部下拉
    DMA_either_down     = 0x83u,            //跳变沿触发,源地址IO端口内部下拉

    DMA_rising_up       = 0xc1u,            //上升沿触发,源地址IO端口内部上拉
    DMA_falling_up      = 0xc2u,            //下降沿触发,源地址IO端口内部上拉
    DMA_either_up       = 0xc3u,            //跳变沿触发,源地址IO端口内部上拉

    //用位6来标志,传输结束后,目的地址保持不变,不恢复成原来地址
    DMA_rising_keepon          = 0x21u,     //上升沿触发                      ,目的地址保持不变
    DMA_falling_keepon         = 0x22u,     //下降沿触发                      ,目的地址保持不变
    DMA_either_keepon          = 0x23u,     //跳变沿触发                      ,目的地址保持不变

    DMA_rising_down_keepon     = 0xA1u,     //上升沿触发,源地址IO端口内部下拉,目的地址保持不变
    DMA_falling_down_keepon    = 0xA2u,     //下降沿触发,源地址IO端口内部下拉,目的地址保持不变
    DMA_either_down_keepon     = 0xA3u,     //跳变沿触发,源地址IO端口内部下拉,目的地址保持不变

    DMA_rising_up_keepon       = 0xF1u,     //上升沿触发,源地址IO端口内部上拉,目的地址保持不变
    DMA_falling_up_keepon      = 0xF2u,     //下降沿触发,源地址IO端口内部上拉,目的地址保持不变
    DMA_either_up_keepon       = 0xF3u,     //跳变沿触发,源地址IO端口内部上拉,目的地址保持不变

} DMA_PORT_cfg, DMA_Count_cfg;
/****************初始化DMA传输*********************/
void DMA_init()
{      
        DMA_PORT_Init(PTC20,DMA_rising);//DMA端口设置
        SIM_SCGC7|=SIM_SCGC7_DMA_MASK;//打开DMA模块时钟
        SIM_SCGC6|=SIM_SCGC6_DMAMUX_MASK;//打开DMA多路复用器时钟
        DMAMUX_CHCFG0=DMAMUX_CHCFG_SOURCE(51);//DMA通道0对应51号DMA请求,即PORTC
        DMA_TCD0_CITER_ELINKNO=DMA_CITER_ELINKNO_CITER(1);//当前主循环次数,采集点数
        DMA_TCD0_BITER_ELINKNO=DMA_BITER_ELINKNO_BITER(1);//起始主循环次数,采集点数
        DMA_TCD0_SADDR=(uint32_t)&GPIOD_PDIR ;                          //设置源地址GPIO口,GPIOD_PDIR
        DMA_TCD0_SOFF=0;                                             //每次传送源地址不变
        DMA_TCD0_NBYTES_MLNO=DMA_NBYTES_MLNO_NBYTES(1);              //每次读取一字节
        DMA_TCD0_SLAST=0;                                             //主循环结束后源地址0回写tcd
        DMA_TCD0_DLASTSGA=0;//主循环结束后目的地址0回写tcd
        DMA_TCD0_DADDR=(uint32_t)Image_Buf;//设置目的地址,video数组第一个元素
        DMA_TCD0_DOFF=1;//每次写目的地址加1
        DMA_TCD0_ATTR=DMA_ATTR_SSIZE(0)+DMA_ATTR_DSIZE(0);//源数据宽度8bit,目的数据宽度8bit使能AD0采集DMA_CSR_DREQ
        DMA_ERQ|=DMA_ERQ_ERQ0_MASK;//使能通道0硬件DMA请求
        DMAMUX_CHCFG0|=DMAMUX_CHCFG_ENBL_MASK;//DMA通道0使能

没有dma中断,自己加
回复 支持 反对

使用道具 举报

6

主题

152

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3996
威望
1744
贡献
1104
兑换币
1159
注册时间
2013-10-21
在线时间
574 小时
3#
发表于 2014-2-13 16:22:14 | 只看该作者
试试这个代码吧,我触发成功了的。加油!
回复 支持 反对

使用道具 举报

13

主题

50

帖子

0

精华

高级会员

Rank: 4

积分
613
威望
319
贡献
164
兑换币
191
注册时间
2014-1-8
在线时间
65 小时
毕业学校
重庆大学
4#
 楼主| 发表于 2014-2-13 17:00:15 | 只看该作者
wojiaohaomi 发表于 2014-2-13 16:22
试试这个代码吧,我触发成功了的。加油!

这是什么库,我用的拉普兰德V2库,不知道一样不一样,这个是在哪里设置的?
回复 支持 反对

使用道具 举报

6

主题

152

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3996
威望
1744
贡献
1104
兑换币
1159
注册时间
2013-10-21
在线时间
574 小时
5#
发表于 2014-2-13 18:08:01 | 只看该作者
这个是野火修改后的
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-26 02:17 , Processed in 0.182094 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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