注册 登录
查看: 904|回复: 13

[电磁组] 关于DMA模块的端口选择的程序

[复制链接]
发表于 2014-1-12 18:25:31 | 显示全部楼层 |阅读模式
DMAMUX_CHCFG_REG(DMAMUX_BASE_PTR, CHn) = (0
            | DMAMUX_CHCFG_ENBL_MASK                        /* Enable routing of DMA request */
            | DMAMUX_CHCFG_SOURCE((ptxn >> 5) + DMA_Port_A) /* 通道触发传输源:     */
                                             );

    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));  
请问这段程序是怎样实现端口选择的? 还有为什么总有这个(ptxn>>5。。。它代表的怎样的含义呢?求解释:   
回复

使用道具 举报

发表于 2014-1-13 10:20:58 | 显示全部楼层
建议看一下《零死角玩转STM32的初级篇》其中有一个地方讲解了ST库关于左移,右移的问题,还有DMAMUX_CHCFG_ENBL_MASK这个宏定义如何使用的问题。结合ST库的宏定义,还有技术手册中的地址和寄存器设置,慢慢理一下就会知道通道的设置了。
回复 支持 反对

使用道具 举报

发表于 2014-1-13 10:32:41 | 显示全部楼层
  1. ptxn>>5
这个应该要看 K60 视频 里面 PORT 那个视频。我直接把 PORT 那部分 的代码贴上来,认真看一下注释,应该可以看懂。
  1. /*! 枚举管脚编号 */
  2. typedef enum
  3. {
  4.     /*  PTA端口    */ //0~31
  5.     PTA0,  PTA1,  PTA2,  PTA3,  PTA4,  PTA5,  PTA6,  PTA7,  PTA8,  PTA9,  PTA10, PTA11, PTA12, PTA13, PTA14, PTA15,
  6.     PTA16, PTA17, PTA18, PTA19, PTA20, PTA21, PTA22, PTA23, PTA24, PTA25, PTA26, PTA27, PTA28, PTA29, PTA30, PTA31,

  7.     /*  PTB端口    */ //32~63
  8.     PTB0,  PTB1,  PTB2,  PTB3,  PTB4,  PTB5,  PTB6,  PTB7,  PTB8,  PTB9,  PTB10, PTB11, PTB12, PTB13, PTB14, PTB15,
  9.     PTB16, PTB17, PTB18, PTB19, PTB20, PTB21, PTB22, PTB23, PTB24, PTB25, PTB26, PTB27, PTB28, PTB29, PTB30, PTB31,

  10.     /*  PTC端口    */
  11.     PTC0,  PTC1,  PTC2,  PTC3,  PTC4,  PTC5,  PTC6,  PTC7,  PTC8,  PTC9,  PTC10, PTC11, PTC12, PTC13, PTC14, PTC15,
  12.     PTC16, PTC17, PTC18, PTC19, PTC20, PTC21, PTC22, PTC23, PTC24, PTC25, PTC26, PTC27, PTC28, PTC29, PTC30, PTC31,

  13.     /*  PTD端口    */
  14.     PTD0,  PTD1,  PTD2,  PTD3,  PTD4,  PTD5,  PTD6,  PTD7,  PTD8,  PTD9,  PTD10, PTD11, PTD12, PTD13, PTD14, PTD15,
  15.     PTD16, PTD17, PTD18, PTD19, PTD20, PTD21, PTD22, PTD23, PTD24, PTD25, PTD26, PTD27, PTD28, PTD29, PTD30, PTD31,

  16.     /*  PTE端口    */
  17.     PTE0,  PTE1,  PTE2,  PTE3,  PTE4,  PTE5,  PTE6,  PTE7,  PTE8,  PTE9,  PTE10, PTE11, PTE12, PTE13, PTE14, PTE15,
  18.     PTE16, PTE17, PTE18, PTE19, PTE20, PTE21, PTE22, PTE23, PTE24, PTE25, PTE26, PTE27, PTE28, PTE29, PTE30, PTE31,
  19. } PTXn_e;

  20. /*! 枚举端口模块 */
  21. typedef enum
  22. {
  23.     PTA, PTB, PTC, PTD, PTE,

  24.     PTX_MAX,
  25. } PTX_e;

  26. /*! 枚举编号 */
  27. typedef enum
  28. {
  29.     PT0 , PT1 , PT2 , PT3 , PT4 , PT5 , PT6 , PT7 ,
  30.     PT8 , PT9 , PT10, PT11, PT12, PT13, PT14, PT15,
  31.     PT16, PT17, PT18, PT19, PT20, PT21, PT22, PT23,
  32.     PT24, PT25, PT26, PT27, PT28, PT29, PT30, PT31,
  33. } PTn_e;

  34. //根据以上的定义,可以得出:PTx = PTxn / 32 ; PTn = PTxn & 31
  35. #define PTX(PTxn)           ((PTxn)>>5)
  36. #define PTn(PTxn)           ((PTxn)&0x1f)
  37. #define PORTX_BASE(PTxn)     PORTX[PTX(PTxn)]       //PORT模块的地址
回复 支持 反对

使用道具 举报

发表于 2014-1-13 10:34:48 | 显示全部楼层
  1. #define PTX(PTxn)           ((PTxn)>>5)
就是 根据管脚号 来 找到 模块号
PTX(PTB9) 等效于 PTB
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-13 13:46:41 | 显示全部楼层
孟二冬 发表于 2014-1-13 10:32
这个应该要看 K60 视频 里面 PORT 那个视频。我直接把 PORT 那部分 的代码贴上来,认真看一下注释,应该可以 ...

哥们,太佩服你了,赞一个
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-13 13:51:49 | 显示全部楼层
孟二冬 发表于 2014-1-13 10:34
就是 根据管脚号 来 找到 模块号
PTX(PTB9) 等效于 PTB

很容易看懂,谢谢哦,不过,那个K69视频在哪儿,能发个链接?或则发我邮箱,446140869@qq.com.真的太感谢你了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-13 13:56:31 | 显示全部楼层
ahuzjh01 发表于 2014-1-13 10:20
建议看一下《零死角玩转STM32的初级篇》其中有一个地方讲解了ST库关于左移,右移的问题,还有DMAMUX_CHCFG_ ...

嗯,谢谢你的推荐。
回复 支持 反对

使用道具 举报

发表于 2014-1-13 15:26:33 | 显示全部楼层
逝去的星光 发表于 2014-1-13 13:51
很容易看懂,谢谢哦,不过,那个K69视频在哪儿,能发个链接?或则发我邮箱,.真的太感谢你了

论坛上就有帖子啊,论坛置顶帖子

【山外K60】一天攻破k60视频和代码
http://www.vcan123.com/forum.php?mod=viewthread&tid=1236
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-13 17:44:14 | 显示全部楼层
孟二冬 发表于 2014-1-13 15:26
论坛上就有帖子啊,论坛置顶帖子

【山外K60】一天攻破k60视频和代码

嗯,再一次的感谢你啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-13 17:44:40 | 显示全部楼层
孟二冬 发表于 2014-1-13 15:26
论坛上就有帖子啊,论坛置顶帖子

【山外K60】一天攻破k60视频和代码

嗯,再一次的感谢你啊
回复 支持 反对

使用道具 举报

发表于 2014-1-13 20:20:59 | 显示全部楼层
孟二冬 发表于 2014-1-13 10:34
就是 根据管脚号 来 找到 模块号
PTX(PTB9) 等效于 PTB

嗯,再一次的感谢你啊
回复 支持 反对

使用道具 举报

发表于 2014-1-13 20:21:08 | 显示全部楼层
孟二冬 发表于 2014-1-13 10:34
就是 根据管脚号 来 找到 模块号
PTX(PTB9) 等效于 PTB

嗯,再一次的感谢你啊
回复 支持 反对

使用道具 举报

发表于 2014-1-13 20:21:08 | 显示全部楼层
孟二冬 发表于 2014-1-13 10:34
就是 根据管脚号 来 找到 模块号
PTX(PTB9) 等效于 PTB

嗯,再一次的感谢你啊
回复 支持 反对

使用道具 举报

发表于 2014-3-5 14:10:56 | 显示全部楼层
Admin 发表于 2014-1-13 20:21
嗯,再一次的感谢你啊

恩 再一次感谢你
回复 支持 反对

使用道具 举报

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

本版积分规则

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