美文网首页
2021-03-02 G0系列DMA,DMAMUX的外设Requ

2021-03-02 G0系列DMA,DMAMUX的外设Requ

作者: SavageZ | 来源:发表于2021-03-02 10:36 被阅读0次

    LL方式,G0系列,DMA功能配置
    DMA功能除了DMA控制器外,加入了DMAMUX功能.DMAMUX相当于在外设(但不仅限于外设)和DMA控制器之间的路由器.可以灵活的配置输入信号到DMA通道的组合.
    DAM通道编号从1开始,例如G071为LL_DMA_CHANNEL_1LL_DMA_CHANNEL_7
    DMAMUX通道编号从0开始,通道0对应DMA通道1,例如G071为LL_DMAMUX_CHANNEL_0LL_DMAMUX_CHANNEL_6
    即DMAMUX_CHANNELn对应DMA_CHANNELn-1

    配置外设DMA请求和DMA通道映射关系的函数有2个

    __STATIC_INLINE void LL_DMAMUX_SetRequestID(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t Channel, uint32_t Request)
    {
      (void)(DMAMUXx);
      MODIFY_REG((DMAMUX1_Channel0 + Channel)->CCR, DMAMUX_CxCR_DMAREQ_ID, Request);
    }
    

    __STATIC_INLINE void LL_DMA_SetPeriphRequest(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Request)
    {
      (void)(DMAx);
      MODIFY_REG(((DMAMUX_Channel_TypeDef *)((uint32_t)DMAMUX1_Channel0 + (DMAMUX_CCR_SIZE * (Channel - 1UL))))->CCR, DMAMUX_CxCR_DMAREQ_ID, Request);
    }
    

    两者是等效的,都是对32位DMAMUX_CxCR寄存器的bit5:0(DMAREQ_ID[5:0])进行操作,对于G071,x为0到6,对应7个DMAMUX通道.


    DMAMUX.jpg

    注意CxCR寄存器的偏移量为4(32位).

    观察代码实现,两者对DMAMUX1_Channel0的地址偏移操作不同.
    第一个函数DMAMUX1_Channel0类型为DMAMUX_Channel_TypeDef *,即指向DMAMUX_Channel_TypeDef类型的指针,观察定义可知

    typedef struct
    {
      __IO uint32_t   CCR;       /*!< DMA Multiplexer Channel x Control Register    Address offset: 0x0004 * (channel x) */
    }DMAMUX_Channel_TypeDef;
    

    对该指针进行+1操作地址移动4字节.

    第二个函数首先是DMAMUX1_Channel0进行操作,这是一个32位宏定义

    #define DMAMUX1_Channel0       ((DMAMUX_Channel_TypeDef *) DMAMUX1_Channel0_BASE)
    #define DMAMUX1_BASE          (AHBPERIPH_BASE + 0x00000800UL)
    #define AHBPERIPH_BASE        (PERIPH_BASE + 0x00020000UL)
    #define PERIPH_BASE           (0x40000000UL)  /*!< Peripheral base address */
    

    为保证偏移量为4,使用DMAMUX_CCR_SIZE乘以 通道号-1 ,因为DMA通道号和DMAMUX通道号的对应关系.

    #define DMAMUX_CCR_SIZE                   0x00000004UL
    

    两个函数的第二个参数Channel含义不同,可以根据函数名推断,前者为DMAMUX通道号,后者为DMA通道号.
    (uint32_t)DMAMUX1_Channel0 + (DMAMUX_CCR_SIZE * (Channel - 1UL)得到了对应DMAMUX通道的DMAMUX_CxCR寄存器地址,然后将其强制转换为DMAMUX_Channel_TypeDef *指针.

    相关文章

      网友评论

          本文标题:2021-03-02 G0系列DMA,DMAMUX的外设Requ

          本文链接:https://www.haomeiwen.com/subject/tpdtqltx.html